企业在解决高并发问题时,一般有两个方向的处理策略:

  • 在硬件上:添加负载均衡器分发大量请求,
  • 在软件上:在高并发瓶颈处(数据库、web服务器两处)添加解决方案。

其中web服务器一层最常用的的添加负载方案就是:使用nginx实现负载均衡。当并发量增大到一定程度,可将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。

负载均衡的作用:

  • 转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
  • 故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
  • 恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

1.Nginx的负载分发策略

Nginx 的 upstream目前支持的分配算法:

1、轮询(默认):1比1轮流处理请求。每个请求按时间顺序逐一分配到不同的应用服务器。(让过来的请求依次访问服务器。)

如果应用服务器down掉,自动剔除,剩下的继续轮询。

【Nginx】6. 负载均衡详解_负载均衡

2、权重(加权轮询):通过配置权重,指定轮询几率,权重和访问比率成正比,用于服务器性能不均的情况。(根据不同的权重来分发各服务器上的请求数量)

【Nginx】6. 负载均衡详解_应用服务器_02

3、iphash算法:对客户端请求的ip进行hash操作,然后根据hash结果,将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

【Nginx】6. 负载均衡详解_服务器_03


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;  
}