一、Tomcat集群带来的好处
1.提高服务的性能,并发能力,以及高可用性
2.提供项目架构的横向扩展能力
二、Tomcat集群实现原理
通过Nginx负载均衡进行请求转发
三、Nginx + Tomcat搭建集群
(一)、修改hosts文件
1. windows修改hosts 文件
c:WindowsSystem32driversetchosts
127.0.0.1 www.water.com
2. linux修改hosts文件
vi /etc/hosts
(二)、启动Nginx
windows nginx.exe
windows下nginx进程杀不掉,请在cmd用如下命令
taskkill /fi "imagename eq nginx.EXE" /f
Linux: usr/local/nginx/sbin/nginx.sh
进入sbin目录
执行 .sudo ./nginx
(三)、修改
修改配置文件
如上图,如果有域名,可以将127.0.0.1 替换成域名
修改配置文件后重启:
[... sbin]# ./nginx -s reload
最后,访问nginx,会交替显示8080或者9090的网页
四、Nginx负载均衡算法
1、轮询算法
默认采用轮询算法
upstream tomcats{ server 192.168.6.1:8080; server 192.168.6.2:8080; }
location配置
location / { proxy_pass http://tomcats; }
2、权重
upstream tomcats{ server 192.168.6.1:8080 weight 2; server 192.168.6.2:8080 weight 1; }
weight为权重,当服务器配置比较好时,可以分配更大的权重。
3、ip_hash
upstream tomcats{ ip_hash; server 192.168.6.1:8080; server 1192.168.6.2:8080; }
ip_hash 可以保证用户访问可以请求到上游服务器中的固定的服务器,前提是用户ip没有发生更改。
注意: 不能把后台服务器直接移除,只能标记为down,这样才能让hash算法计算的服务器不改变。
4、url_hash
upstream tomcats{ url hash; server 192.168.6.1:8080; server 1192.168.6.2:8080; }
5、least_conn
upstream tomcats{ hash $request_uri; server 192.168.6.1:8080; server 1192.168.6.2:8080; }
五、upstream指令参数
max_conns :用来限制同时连接到upstream负载上的单个服务器的最大连接数,作用是可以对单个服务器进行限流,防止服务器超负荷运转.默认值为0,则表示没有限制
slow_start: 商业版Nginx才有
down: 不访问192.168.6.1这台机器
upstream tomcats{ server 192.168.6.1:8080 down; server 192.168.6.2:8080; server 192.168.6.3:8080; }
backup
upstream tomcats{ server 192.168.6.1:8080 backup; server 192.168.6.2:8080; server 192.168.6.3:8080; }
当前面2和3两台宏机后,备用机192.168.6.1将加入集群,被用户访问。
max_fails: 表示失败几次,则标记server已宏机,踢出上游服务。
fail_timeout: 表示失败重试时间
假设目前配置如下:
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂机或者宏机,随后再过15秒,这15秒不会有新的请求到达刚刚挂掉的节点上,而是会请求正常运作的server,15秒后会再有新请求尝试连接挂掉的server。15秒后会再有新的请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
六、keepalive提高吞吐量
配置:
upstream tomcats{ server xx.xx.xx.xx:8080; keepalive 32; }
location 配置如下
location / { proxy_pass http://tomcats; proxy_http_version 1.1; proxy_set_header Connection ""; }
测试机器 mobilexxx.exxx.com
如下图所示,未设置keepalvie的吞吐量为118,设置后为160.