描述

在Nginx的负载均衡检查模块中,对于负载均衡的节点可以配置如下可选参数参数:
max_fails=1 fail_timeout=10s

这个是Nginx在负载均衡功能中,用于判断后端节点状态,所用到两个参数。
Nginx基于连接探测,如果发现后端异常,在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout)再试一次。

默认:fail_timeout为10s,max_fails为1次。

说明

在两个节点都可用的情况下,突然有一个节点挂掉,客户端请求过来后哪怕请求到了不可用的节点,此次请求也不会失败,因为Nginx会把此次请求转发到另外一个可用节点,再把结果返回给客户端。
当一个节点挂掉,Nginx不知道节点是否恢复的时候,会把客户端的请求同时转发到两个节点,判断节点健康情况。
Nginx的负载均衡max_fails和fail_timeout - 图1

示例

Nginx的负载均衡max_fails和fail_timeout - 图2
如上配置表明如果后端节点10秒内出现2次不可用情况,判定节点不可用。判定不可用后10秒内请求不会转发到此节点,直到10秒后重新检测节点健康情况。

思考:
1: nginx健康检查方式为被动检查,如果更加主动的去检测状态?
2: failed 节点如何上下线?
3: 节点如何动态的发现?