企业在解决高并发问题时,一般有两个方向的处理策略:
其中web服务器一层最常用的的添加负载方案就是:使用nginx实现负载均衡。当并发量增大到一定程度,可将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。
负载均衡的作用:
Nginx 的 upstream目前支持的分配算法:
1、轮询(默认):1比1轮流处理请求。每个请求按时间顺序逐一分配到不同的应用服务器。(让过来的请求依次访问服务器。)
如果应用服务器down掉,自动剔除,剩下的继续轮询。
2、权重(加权轮询):通过配置权重,指定轮询几率,权重和访问比率成正比,用于服务器性能不均的情况。(根据不同的权重来分发各服务器上的请求数量)
3、iphash算法:对客户端请求的ip进行hash操作,然后根据hash结果,将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
配置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 的地址,读取分发策略,根据配置分发请求到两个服务器上。
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; }