之前已经将 nginx 负载均衡中的内置策略介绍完了,下面我们就来看一下第三方的扩展策略,所谓的内置策略其实就是 nginx 安装后就已经自带了,对于第三方的一些策略则是需要我们在安装时要额外添加第三方的模块才能实现。下面就一一进行介绍:
url_hash
该策略将前端请求的 url 地址进行 hash,根据 hash 结果将请求定向到同一台后端服务器节点上,也就是说该策略会先将请求的 url 地址计算 hash 值,根据 计算的 hash 值来分发给后台服务器,这样的话对于同一个 url 地址的 hash 值是一样的将会分发到同一后台服务器节点上,这种适合后台服务器为缓存时比较有效,一般也会配合缓存命中来使用。
刚才也说了第三方策略需要额外添加第三方模块才能实现,所以我们需要对我们的 nginx 进行重新编译安装,下面是添加第三方模块编译安装的命令,但要注意的是这个第三方模块需要我们提前下载好,下面命令中的路径就是我下载好的模块所在路径。url_hash 策略需要的第三方模块是 ngx_http_consistent_hash,这个可以在 nginx 第三方模块网站中找到该项目的 github 地址进行下载。
nginx 第三方模块网站地址如下:
https://www.nginx.com/resources/wiki/modules/
ngx_http_consistent_hash 项目地址如下:
https://github.com/replay/ngx_http_consistent_hash
上面的配置加了一个调度策略:一致性哈希 consistent_hash,对客户端请求的 url 进行哈希,既然这里采用 url_hash 的策略来进行负载,那么对于后面再进行权重配置就没有多大意义了,因为这时是根据 url 的 hash 结果进行分发,只会考虑 url 的 hash 结果,而不会去看各个服务的权重,所以后面就不必再添加 weight 权重配置了。
fair
这个策略按后端服务器的响应时间来分配请求,响应时间短的优先分配,但在实际项目中,响应时间受很多的因素所影响,所以真正采用这种方式进行负载需慎重。同样的先下载好 fair 策略对应的第三方模块 nginx-upstream-fair,再对我们的 nginx 进行重新编译安装。
nginx-upstream-fair 项目地址如下:
https://github.com/itoffshore/nginx-upstream-fair
其实上面这个项目并不是第三方模块网站中找到的那个 nginx-upstream-fair 项目,那个项目我使用 nginx-1.12.0 版本的 nginx 编译出错,于是看到那个项目中也有人遇到这个问题,他推荐的是另一个 nginx-upstream-fair 项目,也就是我上面贴出来的那个地址,编译正常通过,基于 nginx-1.12.0 版本的 nginx 亲测可用。
编译安装命令如下:
配置也是一样的,只是需要改变一下策略名称:
sticky
该策略是在多台服务器的环境下,确保一个客户端只和一台服务器通讯,它会保持长连接,并在结束会话后再次选择一个服务器,保证了压力均衡。同样的我们先下载 sticky 策略对应的第三方模块 nginx-sticky-module-ng,再对我们的 nginx 进行重新编译安装,nginx-sticky-module-ng 模块在第三方模块网站中能够找到直接下载:
nginx 第三方模块网站地址如下:
https://www.nginx.com/resources/wiki/modules/
编译安装命令如下:
配置也是一样的,需要改变一下策略名称:
注意:由于这个模块是通过 cookie 实现,如果浏览器不支持 cookie,那么 sticky 不生效。还一个就是为了防止浏览器缓存影响我们的测试结果,上面的所有测试每一次访问之后记得清除缓存再访问,但最好还是用 curl 命令发送请求测试,这样可以避免缓存带来的影响。
到这里 nginx 负载均衡扩展的第三方策略也全部介绍完了 ,有点要提醒的是以上这些策略都是基于 HTTP 七层负载均衡,其实呢还有一个是 TCP 四层负载均衡,接下来会有介绍。
领取专属 10元无门槛券
私享最新 技术干货