Nginx 配置进阶
负载均衡实现
业务说明
需要搭建tomcat服务器集群(应用集群),共同抗击高并发.这时需要使用反向代理服务器.同时配置负载均衡.

集群搭建
说明:准备3台tomcat服务器.端口号分别为8001/8002/8003.
负载均衡策略
轮询策略
说明:根据配置文件的顺序,依次访问服务器.
配置服务集群(默认是轮询策略)
java
#配置服务列表,服务的ip地址为自己服务器的真实ip
upstream gateways{
server 192.168.1.130:8001;
server 192.168.1.130:8002;
server 192.168.1.130:8003;
}
#配置后台管理服务器
server {
listen 80;
server_name localhost;
location / {
#实现http请求的转发
proxy_pass http://gateways;
}
}
权重策略
说明:可以为某些服务器添加权重,让该服务器处理能力更强的,可以处理更多的请求。
配置应用服务列表,本次配置采用默认是轮循策略,再给一个权重值;(让能者多劳)
java
upstream gateways{
server 192.168.227.131:10001 weight=3;
server 192.168.227.131:10002 weight=2;
server 192.168.227.131:10003 weight=1;
}
备注,一但修改了配置文件(nginx.conf),要重新加载配置文件.(/usr/local/nginx/sbin/nginx -s reload)
IPHASH策略
问题说明:如果采用集群的部署,假如要做敏感操作,要求用户必须登录.但是由于nginx实现了负载均衡的操作,导致用户的Session数据不同共享.从而导致用户频繁登录.用户体验较差.
问题: nginx实现了tomcat负载均衡. 导致用户每次访问都是不同的服务器,但是用户的登录信息是存储在一台应用服务器上的,其它服务器没有这个登录信息,所以在访问到其它服务器时还需要重新登录。
解决方案: 能否让用户每次访问同一台服务器?答案是可以的,我们可以采用IPHASH策略,对请求进行负载均衡。
这样,同一个IP执行hash操作的结果肯定是相同。
IPHASH调用原理 如图所示:
IPHASH的配置如下:
java
#配置服务应用列表
upstream geteways {
ip_hash;
server 192.168.227.131:10001 weight=6;
server 192.168.227.131:10002 weight=3;
server 192.168.227.131:10003 weight=1;
}
- IPHASH存在的问题
- IPHASH如果一旦服务器出现异常,导致业务请求失效.
- 可能会出现负载不均的现象.负载有高有低(可在测试中试用).
一般不会使用IPHASH,有时只是在测试中使用一下。
3.3 NGINX常用属性
3.3.1 Down属性
说明:如果服务器宕机,可以在配置文件中标识为down.这样以后不会再访问故障机.
java
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 down;
server 192.168.227.131:10002;
server 192.168.227.131:10003;
}
BACKUP设计
说明:备用机设置,正常情况下该服务器不会被访问.当主机全部宕机或者主机非常忙时,该服务器才会访问.
java
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 down;
server 192.168.227.131:10002:8082;
server 192.168.227.131:10003 backup;
}
宕机服务器高可用实现
说明:当服务器宕机时,如果访问的失败次数达到最大失败次数,则标识为down.自动完成.在一定的周期之内,如果服务器恢复正常,则还会尝试访问故障机.
java
max_fails=1 最大的失败次数
fail_timeout=60s; 设定周期为60秒
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 max_fails=1 fail_timeout=60s;
server 192.168.227.131:10002 max_fails=1 fail_timeout=60s;
server 192.168.227.131:10003 max_fails=1 fail_timeout=60s;
}