天天看点

nginx对后端节点的健康检查

最近梳理了下手头的业务,发现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 中。(添加方式此处忽略)

               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。

     本文转自西鼠 51CTO博客,原文链接:http://blog.51cto.com/10630401/1961172,如需转载请自行联系原作者

继续阅读