Nginx的几种负载均衡策略

标签:
nginx负载均衡内置策略扩展策略 |
分类: 后台服务 |
Nginx的几种负载均衡策略
一 前言
从服务器市场占有率来看,nginx已有与Apache分庭抗礼的势头。其中,不得不提的特性就是负载均衡能力,这成为很多公司选择他的主要原因。另一个原因是Nginx运行速度的确很快,耗用的资源却比Apache或IIS服务器少得多,获取如此傲人的表现,归因于它是基于事件的。这意味着,Nginx并不为每一个网页请求创建新的进程和线程。最终结果就是,即使负载加大后,内存方面的使用仍是可以预测的。
http://s12/mw690/0062ApCkzy7bTdGuWPpab&690
图1 Nginx负载均衡示意图
二
Nginx的upstream目前支持的6种方式的分配,分别是:轮询策略,权重轮询策略,ip_hash策略,fair策略,url_hash策略,sticky策略等。
目前我总结的nginx负载策略共两大类,分别是:内置策略和扩展策略。
1)
轮序策略
顾名思义,该策略就是服务器将每个前端请求按顺序(时间顺序和排列次序)逐一分配到不同的后端服务器节点。如果后端服务器出现问题,即down掉,那么就会被自动剔除。
例如:当前端有多个请求到后端服务器节点,服务会被轮流分配到下面三个服务器。
加权轮询策略
该策略在基本的轮询策略基础上考虑各后端服务器节点接受请求的权重,指定各后端服务器节点被轮询到的机率,主要应用于后端服务器节点性能不均的情况。
例如:通过直接配置weight来设置访问机率,weight的大小和访问比率成正比。下面三个服务器(如果不配置weight,则默认配置为weight=1),第一个的权重是1,第二个的权重是3,第三个的权重是2,那么这三个后端服务器被访问的比率是1:3:2,即server 172.31.3.82:9171被访问的机率最高,server 172.31.3.82:9171次之,server 172.31.3.82:9170访问的机率最小。
注意:因为weight是内置,所以可以直接和其他策略配合使用。
ip_hash策略
例如:因为weight是内置,所以可以直接和其他策略配合使用。本策略使用的是ip_hash策略,需要在配置upstream中添加ip_hash一行。
upstream s_siat{
或者:
upstream s_siat{
两者都是ip_hash策略。只是对应服务器被访问的机率有所改变。
注意:ip_hash模块和后面的Sticky模块不能够同时使用。
2)
url_hash策略
该策略将前端请求的url地址进行hash操作,根据hash结果将请求定向到同一后端服务器节点上,后台服务器为缓存是比较有效。一般url_hash需要配合缓冲命中来使用。
例如:在upstream中加入hash语句,server语句中不能谢茹茹weight等其他参数,需要注意与ip_hash的区别。Hash_method是使用的hash算法。
upstream somestream {
}
server {
}
上述是一个极简的监听8081端口的nginx服务,当请求url为/get时,会走url_hash;同样配置了upstream模块,hash $request_uri表明了是按照url规则进行hash策略。
fair策略
例如:同样只需要在upstream的所有的server后面添加fair一行即可。
upstream s_siat{
注意:这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此需要慎用。
Sticky策略
例如:同样只需要在upstream的server前添加sticky一行即可,但是代码中还需要进行cookie的
upstream s_siat{
注意:如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现。Sticky模块和ip_hash模块不能够同时使用。
注意:Nginx和Apache不同,Nginx每次安装一个新的模块都需要重新编译一次,编译完成之后将Nginx这一个文件拷贝到sbin下面即可。
三
在需要使用负载均衡的server中增加
proxy_pass
http://backserver/;
upstream
backserver{
ip_hash;
server
127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载)
server
127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server
127.0.0.1:6060 max_fails=3 fail_timeout=30s;(max_fails允许请求失败的次数默认为1,此处允许失败的次数为3。每次失败后暂停的时间为30s)
server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)
keepalive 16;(连接到nginx负载均衡器的最大)
}
server {
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
6. keepalive:连接数(keepalive的值)指定了每个工作进程中保留的持续连接到nginx负载均衡器缓存的最大值。如果超过这个设置值的闲置进程想链接到nginx负载均衡器组,最先连接的将被关闭。
7. location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
注:nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
l
l