为什么要这么做
源于最近一个新项目上线运行,项目初期的磨合阶段,问题肯定源源不断,版本迭代也就比较频繁,但是为了不影响用户使用,只能选择大半夜更新(大家都睡了,唯有你挑灯夜战),为了保证睡眠,自然就得想解决方案了。
准备阶段
服务器系统:ubuntu14.04
tomcat版本:tomcat7
nginx
1)由于项目是基于tomcat运行的,那么首先我们需要在服务器上安装两个tomcat,官网下载tar.gz包,拷贝到服务器的两个文件夹下解压即可(这个文件夹的位置,名称可按照自己的习惯随意创建)。
2)解压之后,其中一个tomcat保持不动,另一个需要修改conf文件夹下server.xml文件中四个端口。
8005:负责监听关闭tomcat的请求
8080:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求
8009:负责和其他HTTP服务器建立连接,把Tomcat和其他http服务器集成时需要用到此连接器
8443:服务器扎鞥在处理http请求时收到一个SSL传输请求后重定向的端口号
本人的习惯都是在原来的基础上加1
3)安装nginx,直接apt -get即可安装
配置阶段
1)nginx配置
修改etc/nginx目录下的nginx.conf文件,在http{}中增加如下内容:
upstream tomcat {
#ip_hash
server localhost:8080 weight=1;
server localhost:8081 weight=1;
}
server {
listen 89;
server_name localhost 127.0.0.1;
location / {
location ~*/项目名/ {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host:89;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://tomcat;
}
}
}
以上配置有两点需要注意的
A.反向代理的地址与upstream命名的需保持一致;
B.当你不想使用nginx默认的80端口时,$host后面必须显式的加上端口号,否则你会发现你的项目跑不起来。
有很多人建议自己新增加一个conf文件,不要再原来的文件中修改,这也是个很好的提议,避免改动比较乱造成不必要的麻烦。
好了,至此负载均衡已经实现,但是这并不能解决问题,我们的session呢,停了一个服务,session就没了,这时候我们就要来实现session的持久化了。
2) tomcat的session赋值
修改tomcat安装路径conf文件夹下的server.xml文件
在<Engine name= "Catalina" defaultHost="localhost">下方增加如下内容:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha