社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Nginx的负载均衡算法你知道都有哪些吗

21ic电子网 • 2 年前 • 248 次点击  


前言

Nginx作为一款最流行WEB服务器软件,同时也是一款反向代理和负载均衡软件。毫不夸张地说,Nginx在负载均衡领域绝对是老大地位,这得益于它的高并发和稳定性。而且在配置使用上也是非常简单,维护也特别容易。那么本篇文章就来聊聊Nginx作为负载均衡器,它支持的算法都有哪些?

Nginx支持的算法汇总

Nginx并不像LVS那样支持多达10种负载均衡算法,它默认支持4种算法,另外还可以通过自定义三方模块来支持更多的三方算法,下面我只列出来两种常见的。
算法
说明
轮询默认的算法,如果配置中不指定就走这个算法
Weight带权重的轮询算法,权重越高被请求的次数就越多
ip_hash根据客户端IP来选择后端服务器
least_conn会将请求优先发送给连接数最少的后端服务器
fair三方模块,按后端服务器响应时间来决策
url_hash三方模块,按访问url的hash结果来分配请求

轮询

按请求发来的顺序逐一分配到不同的后端服务器上,最简单最弱智的负载均衡算法,看似公平,其实并不好,比如后端某台服务器负载很高了,那么还是会雷打不动地被动接收请求。

配置示例如下:

upstream aminglinux {    server 192.168.10.11;    server 192.168.10.12;}

Weight

相比较默认的轮询算法,这个Weight多加了一层权重的概念。就是说,我们可以人为地给后端服务器定义权重。这样确实可以保证让性能更好的服务器接收更多的请求,正所谓“能者多劳”!
配置示例如下
upstream aminglinux {    server 192.168.10.11 weight=1;    server


    
 192.168.10.12 weight=3;}
说明:这个weight定义的值范围为1-255,值越大,那么给到的请求就越多。

Ip_hash

当使用了负载均衡后,那么就意味着,同一个客户端很有可能第一次访问的是A机器,而第二次访问的是B机器,那么这样就会导致,访问A机器时登录了,而访问B机器时是非登录状态。而这个算法主要用来解决此类问题。
该算法下,每个请求按访问IP的哈希结果分配后端服务器,使来自同一个IP的访客固定访问一台后端服务器,这样就解决了上面提到的问题,也就是说所谓的“session共享问题”。

配置示例如下:

upstream aminglinux {    ip_hash;    server 192.168.10.11;    server 192.168.10.12;}

Least_conn

从字面意思上也可以理解,就是将请求优先分配给后端服务器里连接数最少的服务器。不过,这个算法是和weight配合使用的,它有一个公式:conns/weight,也就是说Nginx会计算连接数除以权重,最终拿这个值进行比对,值越小会优先分配到请求。
配置示例如下:
upstream aminglinux {    least_con    server 192.168.10.11 weight=10;    server 192.168.10.12 weight=5;}

Fair

这是一个三方的算法,需要在编译Nginx时增加nginx-upstream-fair-master模块支持。该算法可以根据后端服务器的响应时间的大小来决定将请求发送给谁,响应时间越快,那么就优先拿到请求。
配置示例如下:
upstream aminglinux {    fair;    server 192.168.10.11;    server 192.168.10.12;}

Url_hash

三方的算法,需要在编译Nginx时增加ngx_http_upstream_hash_module模块支持。该算法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。注意:使用该算法后不能带weight。
配置示例如下:
upstream aminglinux {    hash $request_uri;    server 192.168.10.11;    server 192.168.10.12;}

来源:阿铭linux


温馨提示:

因最近微信公众平台推送规则改变,很多读者反馈没有及时看到更新的文章。根据最新规则,建议多点击“推荐阅读、分享、收藏”等,成为常读用户。


推荐阅读:


请点下【在看】给小编加鸡腿



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152187
 
248 次点击