5、nginx负载均衡中常见的算法及原理有哪些?
5、nginx负载均衡中常见的算法及原理有哪些?
nginx负载均衡中常见的算法及原理
1、rr轮询调度算法
rr轮询算法为nginx默认调度算法,按客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器,这相当于LVS中的rr轮询算法。如果后端节点服务器宕机,宕机的服务器会被自动从节点服务器池中剔除,以使客户端的用户访问不受影响。新的请求会分配给正常的服务器。
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
server 10.0.0.17:80;
server 10.0.0.27:80;
}
[root@centOS8 ~]#vim /apps/nginx/conf/conf.d/pc.conf
server{
listen 80;
server_name www.magedu.com;
location / {
root /data/nginx/html/pc;
proxy_pass http://websrvs;
}
[root@centOS8 ~]#nginx -t
[root@centOS8 ~]#nginx -s reload
[root@client ~]#curl http://www.magedu.com/
2、wrr加权轮询调度算法
在rr轮询算法的基础上加上权重,即为权重轮询算法。权重越高,在被访问的概率越大。可以根据服务器的配置和性能指定权重值大小,达到合理有效的地利用主机资源。
upstream websrvs {
server 10.0.0.17 weight=2;
server 10.0.0.27 weight=6;
}
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
server 10.0.0.17:80 weight=3;
server 10.0.0.27:80;
}
[root@centOS8 ~]#nginx -t
[root@centOS8 ~]#nginx -s reload
[root@client ~]#curl http://www.magedu.com/
3、ip_hash源地址hash调度算法
源地址hash调度算法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计算,以实现会话保持。该方法确保来自同一客户端的请求将始终传递到同一服务器,除非该服务器不可用。在该服务器不可用的情况下,客户端请求将被传递到另一台服务器。很可能,它也将始终是同一台服务器。
注意:当负载均衡算法为ip_hash时,后端服务器在负载均衡调度中的状态不能有weight和backup。
upstream websrvs {
ip_hash;
server 10.0.0.17;
server 10.0.0.27;
}
如果需要临时下线其中一台服务器,则应使用down参数对其进行标记,以保留客户端 IP 地址的当前散列。
upstream backend {
ip_hash;
server 10.0.0.17;
server 10.0.0.27;
server 10.0.0.37 down;
}
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
ip_hash;
server 10.0.0.17:80;
server 10.0.0.27:80;
}
[root@centOS8 ~]#nginx -t
[root@centOS8 ~]#nginx -s reload
[root@client ~]#curl http://www.magedu.com/
4、least_conn最少连接调度算法
最少连接调度算法,优先将客户端请求调度到当前连接最少的后端服务器,相当于LVS中的WLC加权最少连接算法。同时考虑服务器的权重,如果后端服务器的连接数都相同时,则使用WRR加权轮询调度算法。
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
least_conn;
server 10.0.0.17:80;
server 10.0.0.27:80;
}
[root@centOS8 ~]#nginx -t
[root@centOS8 ~]#nginx -s reload
[root@client ~]#curl http://www.magedu.com/
后端服务器的连接数都相同时,则使用WRR加权轮询调度算法,默认权重是1
5、hash KEY [consistent] 一致性hash调度算法
基于指定请求报文中首部字段或者URI等key做hash计算。可以包含文本、key变量及其组合。如果consistent指定了参数,将使用ketama一致性hash算法。该方法确保在将服务器添加到组或从组中删除时,只有少数密钥将重新映射到不同的服务器。这有助于为缓存服务器实现更高的缓存命中率。
一致性hash算法适用于后端是Cache服务器(如varnish)时使用,consistent定义使用一致性hash运算,一致性hash基于取模运算。
注意:从组中添加或删除服务器可能会导致将大部分密钥重新映射到不同的服务器。
hash $request_uri consistent; #基于用户请求的uri做hash,使用一致性hash运算
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
hash $request_uri;
server 10.0.0.17:80;
server 10.0.0.27:80;
}
基于用户请求的uri做hash,使用一致性hash运算
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
hash $request_uri consistent;
server 10.0.0.17:80;
server 10.0.0.27:80;
}
hash $cookie_sessionid #基于cookie中的sessionid这个key进行hash调度,实现会话绑定
[root@centOS8 ~]#vim /apps/nginx/conf/nginx.conf
http {
upstream websrvs {
hash $cookie_name consistent;
server 10.0.0.17:80;
server 10.0.0.27:80;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器