本文主要详细介绍Nginx服务器的负载均衡策略(6种)。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。
一、关于Nginx的负载均衡
在服务器集群中,Nginx扮演代理服务器的角色(即反向代理)。为了避免对单个服务器造成过大的压力,它将用户的请求转发到不同的服务器。详情请查看我的其他博客。
二、Nginx负载均衡策略
负载均衡用于从“上游”模块定义的后端服务器列表中选择一个服务器来接受用户的请求。一个最基本的上游模块是这样的。模块中的服务器是服务器列表:
#动态服务器组
上游动态_左雨{
服务器本地主机:8080;#tomcat 7.0
服务器本地主机:8081;#tomcat 8.0
服务器本地主机:8082;#tomcat 8.5
服务器本地主机:8083;#tomcat 9.0
}
上游模块配置完成后,反向代理指定对服务器列表的访问:
#其他页面反向代理tomcat容器
位置~。*$ {
索引index.jsp index.html;
proxy _ pass http://dynamic _ zuoyu
}
这是负载均衡最基本的例子,但不足以满足实际需求;目前Nginx服务器的上游模块支持六种分配:
负载平衡策略
投票
默认模式
重量
重量模式
ip _哈希
根据ip分配方法
最少连接
最小连接模式
公平(第三方)
响应时间模式
Url_hash(第三方)
根据URL分配方法
这里只详细讲解Nginx的负载均衡策略,第三方不多描述。
1、轮询
最基本的配置方式,上面的例子是轮询,这是上游模块默认的负载均衡策略。每个请求将按时间顺序一个接一个地分配给不同的后端服务器。
有以下参数:
失败_超时
与max _ failures一起使用。
最大失败次数
设置在fail_timeout参数设置的时间内的最大失败次数。如果在此时间内对服务器的所有请求都失败,服务器将被视为关闭。
失败时间
服务器被视为停机的时间长度,默认为10秒。
支持
将此服务器标记为备用服务器。当主服务器停止时,将向它发送请求。
向下
标记服务器永久关闭。
注意:
在轮询中,如果服务器宕机,它将被自动拒绝。
默认配置是轮询策略。
这种策略适用于服务器配置相当、无状态、短而快的服务。
2、weight
权重方法,它根据轮询策略指定轮询的概率。例子如下:
#动态服务器组
上游动态_左雨{
服务器localhost:8080 weight=2;#tomcat 7.0
服务器本地主机:8081;#tomcat 8.0
服务器本地主机:8082备份;#tomcat 8.5
服务器localhost:8083 max _ fails=3 fail _ time out=20s;#tomcat 9.0
}
在本例中,weight参数用于指定轮询概率,weight的默认值为1;权重值与访问速率成正比。例如,Tomcat 7.0被访问的可能性是其他服务器的两倍。
注意:
权重越高,需要处理的请求就越多。
该策略可以与least_conn和ip_hash结合使用。
这种策略更适合服务器硬件配置差异较大的情况。
3、ip_hash
根据基于客户端IP的分配方法指定负载平衡器。这种方法保证了同一个客户端的请求始终被发送到同一个服务器,以保证会话会话。这样,每个访问者都有一个固定的访问后端服务器的权限,可以解决会话不能跨服务器的问题。
#动态服务器组
上游动态_左雨{
ip _ hash#确保每个来宾都有固定的后端服务器访问权限。
服务器localhost:8080 weight=2;#tomcat 7.0
服务器本地主机:8081;#tomcat 8.0
服务器本地主机:8082;#tomcat 8.5
服务器localhost:8083 max _ fails=3 fail _ time out=20s;#tomcat 9.0
}
注意:
nginx 1 . 3 . 1版之前,不能在ip_hash中使用weight。
Ip_hash不能与backup同时使用。
这种策略适用于有状态服务,比如会话。
当需要移除服务器时,必须手动将其关闭。
4、least_conn
将请求转发到连接较少的后端服务器。轮询算法将请求平均转发给所有后端,使它们的负载大致相同;但是,有些请求需要很长时间,这会导致很高的后端负载。在这种情况下,least_conn可以达到更好的负载均衡效果。
#动态服务器组
上游动态_左雨{
最少_连接;#将请求转发到连接较少的后端服务器
服务器localhost:8080 weight=2;#tomcat 7.0
服务器本地主机:8081;#tomcat 8.0
服务器本地主机:8082备份;#tomcat 8.5
服务器localhost:8083 max _ fails=3 fail _ time out=20s;#tomcat 9.0
}
注意:
这种负载均衡策略适用于不同请求处理时间导致的服务器过载。
5、第三方策略
第三方负载均衡策略的实现需要安装第三方插件。
fair
根据服务器的响应时间分配请求,响应时间短的优先。
#动态服务器组
上游动态_左雨{
服务器本地主机:8080;#tomcat 7.0
服务器本地主机:8081;#tomcat 8.0
服务器本地主机:8082;#tomcat 8.5
服务器本地主机:8083;#tomcat 9.0
公平;#在短响应时间内实现优先级分配
}
url_hash
根据访问url的散列结果来分发请求,以便将每个url定向到同一个后端服务器,该服务器应该与缓存命中一起使用。如果多次请求相同的资源,它可能到达不同的服务器,导致不必要的多次下载,缓存命中率低,并浪费一些资源时间。通过使用url_hash,相同的url(即相同的资源请求)可以到达相同的服务器。一旦资源被缓存,一旦接收到请求,就可以从缓存中读取它。
#动态服务器组
上游动态_左雨{
哈希$ request _ uri#认识到每个url都指向同一个后端服务器
服务器本地主机:8080;#tomcat 7.0
服务器本地主机:8081;#tomcat 8.0
服务器本地主机:8082;#tomcat 8.5
服务器本地主机:8083;#tomcat 9.0
}
三、总结
以上是六种负载均衡策略的实现方法,其中Nginx按照除了轮询和轮询权重之外的不同算法来实现。在实践中需要根据不同的场景有选择的应用,大部分都是结合各种策略来满足实际需求。希望对大家的学习有帮助,也希望大家多多支持。