企业在解决高并发问题时,一般有两个方向的处理策略:
- 在硬件上:添加负载均衡器分发大量请求,
- 在软件上:在高并发瓶颈处(数据库、web服务器两处)添加解决方案。
其中web服务器一层最常用的的添加负载方案就是:使用nginx实现负载均衡。当并发量增大到一定程度,可将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。
负载均衡的作用:
- 转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
- 故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
- 恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
1.Nginx的负载分发策略
Nginx 的 upstream目前支持的分配算法:
1、轮询(默认):1比1轮流处理请求。每个请求按时间顺序逐一分配到不同的应用服务器。(让过来的请求依次访问服务器。)
如果应用服务器down掉,自动剔除,剩下的继续轮询。
2、权重(加权轮询):通过配置权重,指定轮询几率,权重和访问比率成正比,用于服务器性能不均的情况。(根据不同的权重来分发各服务器上的请求数量)
3、iphash算法:对客户端请求的ip进行hash操作,然后根据hash结果,将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
2.Nginx实现负载均衡
配置Nginx的负载均衡与分发策略:通过在upstream参数中,添加 应用服务器IP 和 指定参数 即可实现。
下面的配置是:Nginx代理服务器将到http://vccloud的请求,分别代理分发到 192.168.1.129:80 和 192.168.1.130:80 服务器上。
# 配置被转发的服务器,其中的 ip 推荐使用内网ip,可以提高访问速度
upstream vccloud {
server 192.168.1.129:80 weight=1; # weight:权重,数字越大,权越高
server 192.168.1.130:80 weight=2;
}
# upstream vccloud {
# ip_hash; # Nginx会让相同的客户端ip请求相同的服务器
# server 192.168.1.128:80; # 缺省配置就是轮询策略,权重默认为1
# server 192.168.1.129:80;
# }
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://vccloud; # 将代理转发给upstream中配置的服务器去处理。这里的http://后的值必须和upstream后面的值一致
}
}
通过以上配置,可以实现,在访问 http://vccloud 时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在代理服务器将请求转发给目的主机时,读取upstream为 vccloud 的地址,读取分发策略,根据配置分发请求到两个服务器上。
3.Nginx其他配置
upstream myServer {
# 1、表示单前的server暂时不参与负载。
server 192.168.72.49:9090 down;
# 2、3次请求失败后,暂停服务20s。允许请求失败的次数默认为:1,默认的暂停服务时间:10s。
server 192.168.72.49:6060 max_fails=3 fail_timeout=20s;
# 3、热备:其它所有的非backup机器down或忙的时候,请求backup机器。所以这台机器压力会最轻。
server 192.168.72.49:7070 backup;
}