您的位置:首页 > 运维架构 > Nginx

Nginx负载均衡中后端节点服务器健康检查的操作梳理

2017-05-27 14:52 477 查看

Nginx负载均衡中后端节点服务器健康检查的操作梳理

正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样势必造成网站访问故障。虽然nginx可以在localtion中启用proxy_next_upstream来解决返回给用户的错误页面,如下:

以上的配置大家可以参考一下,但这个还是会把请求转发给这台服务器的,然后再转发给别的服务器,这样以来就浪费了一次转发,对于网站性能来说也不是最佳理想的方案。为了避免上面说顾虑的情况,可以对nginx后方realserver的健康状态进行检查,如果发现后端服务器不可用,则请求不转发到这台服务器。
目前主要有三种方式可以实现对nginx负载均衡的后端节点服务器进行健康检查:
1)ngx_http_proxy_module模块和ngx_http_upstream_module模块(这是nginx自带模块)
参考地址:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream
2)nginx_upstream_check_module模块(淘宝技术团队开发)
参考地址:https://github.com/yaoweibin/nginx_upstream_check_module
3)ngx_http_healthcheck_module模块
------------------------------------------------------------------------------------------------------------------------

一、利用nginx自带模块ngx_http_proxy_module和ngx_http_upstream_module对后端节点做健康检查
严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。下面列出这两个模块中相关的指令:

具体实例配置如下:

二、利用nginx_upstream_check_module模块对后端节点做健康检查
除了上面介绍的nginx自带模块,还有一个更专业的模块,来专门提供负载均衡器内节点的健康检查的。这个就是淘宝技术团队开发的nginx模块nginx_upstream_check_module,通过它可以用来检测后端realserver的健康状态。如果后端realserver不可用,则所以的请求就不会转发到该节点上。个人比较推荐使用这种方式来检查nginx后端节点的健康状态。

在淘宝自己的tengine上是自带了该模块的,大家可以访问淘宝tengine的官网http://tengine.taobao.org来获取该版本的nginx,
如果没有使用淘宝的tengine的话,可以通过补丁的方式来添加该模块到我们自己的nginx中。部署流程如下:

具体实例配置如下:

配置完毕后,重启nginx。然后访问http://localhost/nstatus这个页面就可以看到当前两台realserver实时的健康状态。
温馨提示:在生产环境的实施应用中需要注意下面两点

也可以参考http://www.cnblogs.com/kevingrace/p/5882006.html这篇文档里的nginx后端节点健康检查的方法

三、利用ngx_http_healthcheck_module模块对后端节点做健康检查
除了上面两个模块,nginx官方在早期的时候还提供了一个ngx_http_healthcheck_module模块用来进行nginx后端节点的健康检查。nginx_upstream_check_module模块就是参照该模块的设计理念进行开发的,因此在使用和效果上都大同小异。
但是需要注意的是,ngx_http_healthcheck_module模块仅仅支持nginx的1.0.0版本,1.1.0版本以后都不支持了!因此,对于目前常见的生产环境上基本都不会去用这个模块了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: