最近梳理了下手头的业务,发现nginx层配有几种健康检查方式,在这里做个总结,记录下nginx做负载均衡时对后端节点的健康检查方式:
1、ngx_http_proxy_module 模块中的下面三个指令(nginx自带模块)
proxy_connect_timeout 60s
设置与后端服务器建立连接的超时时间。应该注意这个超时一般不可能大于75秒
proxy_read_timeout 60s
定义从后端服务器读取响应的超时。此超时是指相邻两次读操作之间的最长时间间隔,而不是整个响应传输完成的最长时间。如果后端服务器在超时时间段内没有传输任何数据,连接将被关闭。
proxy_next_upstream error timeout;
指定在何种情况下一个失败的请求应该被发送到下一台后端服务器
2、ngx_http_upstream_module模块中的server指令 (nginx自带模块)
采用这个方式需要注意的一点是,如果后端有不健康节点,负载均衡器依然会先把该请求转发给该不健康节点,然后再转发给别的节点,这样就会浪费一次转发。
范例:
upstream name {
server 10.0.0.1:80 max_fails=1 fail_timeout=10s;
server 10.0.0.2:80 max_fails=1 fail_timeout=10s;
}
PS:下面是每个指令的介绍:
max_fails=number # 设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。
fail_timeout=time # 设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。默认情况下,该超时时间是10秒。
weight=number #权重值
backup #备份机的标志
down #标明改节点不可用
ip_hash; #会话保持功能,将客户端的多次请求定向到组内的同一台服务器,保障C/S之间建立稳定的会话
keepalive connections; #控制网络连接的保持功能
3、nginx_upstream_check_module模块(非nginx自带)
这个是淘宝技术团队开发的nginx_upstream_check_module,是一个专业提供负载均衡器内节点的健康检查的。如果后端节点不可用,则所以的请求就不会转发到该节点上。使用这种检查方式,通过补丁的方式来添加该模块到自己的 nginx 中。(添加方式此处忽略)
范例:
upstream name {
server 10.0.0.1:80;
server 10.0.0.2:80;
check interval=300 rise=2 fall=5 timeout=1000 type=tcp port81;
}
上面 配置的意思是,对name这个负载均衡条目中的所有节点,每个300毫秒检测一次,请求2次正常则标记 realserver状态为up,如果检测 5 次都失败,则标记 realserver的状态为down,超时时间为1秒。
健康检查包的类型是tcp类型,端口是81。