Nginx负载均衡配置
什么是负载均衡
如上图所示,所谓负载均衡,就是通过Nginx按照一定的策略,将客户端的大量请求,分配到不同的上游服务器进行处理,从而防止服务器处理大量请求,导致崩溃的问题。
接下来,我会介绍Nginx,最常用的负载均衡配置方式。
默认策略 (default)
Nginx的默认的负载均衡方式,更像是雨露均沾,会依次轮询配置的上游服务器地址。
缺点:忽略了服务器的性能差异、饱和状态,无法更加精确的分配处理任务。
upsteram disk_server { server 192.168.90.111; server 192.168.90.222; } server { listen 80; server_name www.devtt.com location / { proxy_pass http://disk_server; # 这里指向 upsteram '变量' } }
权重值 (weight)
Nginx权重配置方式,可根据服务器性能,更加合理的分配处理任务。在配置中,是用weight
关键字设定正整数,来分配不同服务器的请求比例。
缺点:配置设定后是静态的,会忽略目标服务器的动态负载状态,所以权重配置方式,不一定能准确的分配相关任务。
# 注:权重值并不是百分比!它是相对其他服务器的权重值来衡量的单位! upstream disk_server { server 192.168.90.111 weight=6; # 例如这台服务器性能、吞吐量最高,可分配更多的任务。 server 192.168.90.222 weight=2; server 192.168.90.333 weight=2; } server { listen 80; server_name www.devtt.com; location / { proxy_pass http://disk_server; } }
IP分配策略 (ip_hash)
IP分配策略,是将相同IP地址的请求分配到同一台上游服务器,确保相同IP请求,始终由同一台目标服务器处理。
缺点:相同IP请求都会分配到同一服务器,可能造成目标服务器过载,特别是移动互联网时代,频繁切换基站导致IP变化。
upstream disk_server { ip_hash; server 192.168.90.111; server 192.168.90.222; server 192.168.90.333; } server { listen 80; server_name www.devtt.com; location / { proxy_pass http://disk_server; } }
URL分配策略 (url_hash)
URL分配策略,是将请求的URL进行哈希计算,将具有相同URL的请求,分配到同一台上游服务器。
缺点:与ip_hash
类似,可能会导致某些服务器处理的请求量过多,造成目标服务器过载,因为 URL 的分布可能不均匀。
upstream disk_server { hash $request_uri; # URI 会进行哈希 server 192.168.90.111; server 192.168.90.222; server 192.168.90.333; } server { listen 80; server_name www.devtt.com; location / { proxy_pass http://disk_server; } }
备用机 (backup)
备用机策略,顾名思义,就是在其他上游服务器出现异常、不可用时,进行调用分配,如果其他服务器正常,则不分配处理任务。
upstream disk_server { server 192.168.90.111; server 192.168.90.222; server 192.168.90.333 backup; # 备用服务器 } server { listen 80; server_name www.devtt.com; location / { proxy_pass http://disk_server; } }
最小连接数 (least_conn)
最小连接数策略,该策略会计算每个服务器当前连接数,将请求分配给连接数最少的上游服务器,是典型的动态均衡策略。
缺点:高并发场景下,变化较快,连接数的准确性不一定可控。
upstream disk_server { least_conn; # 使用最小连接数策略 server 192.168.90.111 weight=2; # 权重为2的服务器 server 192.168.90.222 weight=1; # 权重为1的服务器 server 192.168.90.333 weight=1 backup; # 备用服务器,权重为1 } server { listen 80; server_name www.devtt.com; location / { proxy_pass http://disk_server; } }
响应时间策略 (fair)
响应时间分配策略,是根据每个上游服务器响应时间进行分配,响应最快的服务器将会分配更多处理任务,也是动态均衡策略。
缺点:还需要搭配Nginx的nginx_upstream_fair插件使用,安装配置相对繁琐,我本人没用过。
upstream disk_server { fair; server 192.168.90.111; server 192.168.90.222; server 192.168.90.333; } server { listen 80; server_name www.devtt.com; location / { proxy_pass http://disk_server; } }
以上,就是Nginx的常见负载均衡配置方案,没有最好的方案,只有最适合自己业务场景的方案。