nginx是系统部署时常常用来当做代理,负载均衡的服务。尤其对于后端服务,部署的服务可能会有多个节点,对于出现问题的节点,如何快速的踢出,并在可用的时候加进来呢。
1,nginx自带的模块ngx_http_proxy_module和ngx_http_upstream_module
使用示例如图所示
参数说明
proxy_next_upstream 指定出现何种错误或异常,将请求转到下一个节点
max_fails fail_timeout 在fail_timeout时间内节点出现失败的次数大于等于max_fails设置的值,该节点将会被踢出,下个fail_timeout再去请求一次,如果成功,该节点将会被假如正常节点。
2,淘宝技术团队开发的nginx_upstream_check_module
nginx自带的check模块相对来说比较粗糙,推荐使用淘宝技术团队开发的nginx_upstream_check_module
GitHub地址:https://github.com/yaoweibin/nginx_upstream_check_module 可参考编译安装模块
使用示例如下图所示:
interval 监测间隔,每隔interval毫秒,将会发送一次请求到所有节点
fail 失败的次数达到fail,该节点将会标为不可用
rise 被踢出的节点,成功的次数达到rise,该节点将会标为可用
timeout 监测请求的超时时间
type 请求方式,支持tcp, ssl_hello,http,mysql,ajp,fastcgi
check_http_send 发送监测的接口配置,如示例为/api/monitor/ping http请求
check_http_expect_alive 接口成功的标识 例如http_2xx,http_3xx
可以配置对于当前nginx的upstream的节点状况,如下图所示
curl 'http://127.0.0.1:30030/status' 可以获取节点状况,方便监控节点健康状态,进行预警处理。