【nginx】配置Nginx实现负载均衡
在关于⼀⽂中已经提到,企业在解决⾼并发问题时,⼀般有两个⽅向的处理策略,软件、硬件,硬件上添加负载均衡器分发⼤量请求,软件上可在⾼并发瓶颈处:数据库+web服务器两处添加解决⽅案,其中web服务器前⾯⼀层最常⽤的的添加负载⽅案就是使⽤nginx实现负载均衡。
⼀、负载均衡的作⽤
1、转发功能
按照⼀定的算法【权重、轮询】,将客户端请求转发到不同应⽤服务器上,减轻单个服务器压⼒,提⾼系统并发量。
2、故障移除
通过⼼跳检测的⽅式,判断应⽤服务器当前是否可以正常⼯作,如果服务器期宕掉,⾃动将请求发送到其他应⽤服务器。
3、恢复添加
如检测到发⽣故障的应⽤服务器恢复⼯作,⾃动将其添加到处理⽤户请求队伍中。
⼆、Nginx实现负载均衡
同样使⽤两个tomcat模拟两台应⽤服务器,端⼝号分别为8080 和8081
1、Nginx的负载分发策略
Nginx 的 upstream⽬前⽀持的分配算法:
1)、轮询 ——1:1 轮流处理请求(默认)
每个请求按时间顺序逐⼀分配到不同的应⽤服务器,如果应⽤服务器down掉,⾃动剔除,剩下的继续轮询。
2)、权重 ——you can you up
通过配置权重,指定轮询⼏率,权重和访问⽐率成正⽐,⽤于应⽤服务器性能不均的情况。
3)、ip_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问⼀个应⽤服务器,可以解决session共享的问题。
2、配置Nginx的负载均衡与分发策略
通过在upstream参数中添加的应⽤服务器IP后添加指定参数即可实现,如:
upstream tomcatserver1 {
server 192.168.72.49:8080 weight=3;
server 192.168.72.49:8081;
}
server {
listen      80;
server_name  8080.max;
#charset koi8-r;
#access_log  logs/host.access.log  main;
location / {
proxy_pass  tomcatserver1;
index  index.html index.htm;
}
}
通过以上配置,便可以实现,在访问8080.max这个⽹站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给⽬的主机时,读取upstream为 tomcatsever1的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将⼤部分请求发送给49服务器上的tomcat1,也就是8080端⼝;较少部分给tomcat2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能⼒。
3、nginx其他配置
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
}
1)down
表⽰单前的server暂时不参与负载
2)Weight
默认为1.weight越⼤,负载的权重就越⼤。
3)max_fails
允许请求失败的次数默认为1.当超过最⼤次数时,返回proxy_next_upstream 模块定义的错误
4)fail_timeout
负载均衡服务器有哪些max_fails 次失败后,暂停的时间。
5)Backup
其它所有的⾮backup机器down或者忙的时候,请求backup机器。所以这台机器压⼒会最轻。
三、使⽤Nginx的⾼可⽤
除了要实现⽹站的⾼可⽤,也就是提供n多台服务器⽤于发布相同的服务,添加负载均衡服务器分发请求以保证在⾼并发下各台服务器能相对饱和的处理请求。同样,负载均衡服务器也需要⾼可⽤,以防如果负载均衡服务器挂掉了,后⾯的应⽤服务器也紊乱⽆法⼯作。
实现⾼可⽤的⽅案:添加冗余。添加n台nginx服务器以避免发⽣上述单点故障。具体⽅案详见下⽂:keepalive+nginx实现负载均衡⾼可⽤
四、总结
总结⼀点,负载均衡不论是各种软件或硬件上的解决⽅案,主要还是将⼤量的并发请求按照⼀定的规律分发给不同的服务器处理,从⽽减少某台服务器的瞬时压⼒,提⾼⽹站的抗并发能⼒。nginx在负载均衡的应⽤之所以⼴泛,笔者认为这归功于它的灵活配置,⼀个f⽂件解决⼤部分问题,不论是nign
x创建虚拟服务器、nginx的反向代理服务器,还是本⽂介绍的nginx的负载均衡,⼏乎都在这个配置⽂件中进⾏。服务器上只负责把nginx搭好,跑起来即可。⽽且它本⾝轻量级,不需要占⽤服务器太多资源就可以达到较好的效果,腻害。