Fork me on GitHub
0%

nginx 负载均衡策略之第三方扩展策略

之前已经将 nginx 负载均衡中的内置策略介绍完了,下面我们来看一下第三方的扩展策略,所谓的内置策略其实就是 nginx 安装后就已经自带了,对于第三方的一些策略则是需要我们在安装时要额外添加第三方的模块才能实现。下面就一一进行介绍:

url_hash

该策略将前端请求的 url 地址进行 hash,根据 hash 结果将请求定向到同一后端服务器节点上,这种适合后台服务器为缓存时比较有效,一般也会配合缓冲命中来使用。

刚才也说了第三方策略需要额外添加第三方模块才能实现,所以我们需要对我们的 nginx 进行重新编译安装,下面是添加第三方模块编译安装的命令,但要注意的是这个第三方模块需要我们提前下载好,下面命令中的路径就是我下载的模块所在路径。url_hash 策略需要的第三方模块是 ngx_http_consistent_hash,这个可以在 nginx 第三方模块网站中找到该项目的 github 地址,这里贴出地址:

nginx 第三方模块网站
ngx_http_consistent_hash 项目地址

1
2
3
sudo ./configure --add-module=/home/zhouxh/software/ngx_http_consistent_hash
sudo make
sudo make install

然后还是在之前我们添加的 upstream 中加上对应的策略,配置如下,不清楚的可以参考上一篇的内容。

1
2
3
4
5
upstream loadserver {
consistent_hash $request_uri;
server 192.168.1.110:10080;
server 192.168.1.111:10080;
}

上面的配置加了一个调度策略:一致性哈希 consistent_hash,对客户端请求的 url 进行哈希,既然这里采用 url_hash 的策略来进行负载,那么对于后面再进行权重配置就没有多大意义了,所以后面就不必再添加 weight 权重配置了。

fair

这个策略按后端服务器的响应时间来分配请求,响应时间短的优先分配,但在实际项目中,响应时间受很多的因素所影响,所以真正采用这种方式进行负载需慎重。同样的先下载 fair 策略对应的第三方模块 nginx-upstream-fair,再对我们的 nginx 进行重新编译安装,nginx-upstream-fair 项目地址如下:

nginx-upstream-fair 项目地址

这个项目其实并不是第三方模块网站中找到的那个 nginx-upstream-fair 项目,那个项目我使用 nginx-1.12.0 版本的 nginx 编译出错,于是看到那个项目中也有人遇到这个问题,他推荐的是另一个 nginx-upstream-fair 项目,也就是上面贴出来的那个,编译正常通过,基于 nginx-1.12.0 版本的 nginx 亲测可用。
编译安装命令如下:

1
2
3
sudo ./configure --add-module=/home/zhouxh/software/ngx_http_consistent_hash --add-module=/home/zhouxh/software/nginx-upstream-fair
sudo make
sudo make install

配置也是一样的,只是需要改变一下策略名称:

1
2
3
4
5
upstream loadserver {
fair;
server 192.168.1.110:10080;
server 192.168.1.111:10080;
}

sticky

该策略是在多台服务器的环境下,确保一个客户端只和一台服务器通讯,它会保持长连接,并在结束会话后再次选择一个服务器,保证了压力均衡。同样的我们先下载 fair 策略对应的第三方模块 nginx-upstream-fair,再对我们的 nginx 进行重新编译安装,nginx-upstream-fair 模块在第三方模块网站中能够找到直接下载:

nginx 第三方模块网站

编译安装命令如下:

1
2
3
sudo ./configure --add-module=/home/zhouxh/software/ngx_http_consistent_hash --add-module=/home/zhouxh/software/nginx-upstream-fair --add-module=/home/zhouxh/software/nginx-sticky-module-ng
sudo make
sudo make install

配置也是一样的,需要改变一下策略名称:

1
2
3
4
5
upstream loadserver {
sticky;
server 192.168.1.110:10080;
server 192.168.1.111:10080;
}

注意:由于整个模块是通过 cookie 实现,如果浏览器不支持 cookie,那么 sticky 不生效。

到这里 nginx 负载均衡一些扩展的第三方策略也全部介绍完了 ,有点要提醒的是以上都是基于 HTTP 七层负载均衡,还有一个是 TCP 四层负载均衡,接下来会有介绍。

 wechat
扫描上面图中二维码关注微信公众号