在我们使用Nginx
作为负载均衡服务器时,后端服务一般会有2+个节点。默认负载策略是轮询
, 如果不做特殊的配置,当一个服务出问题之后,它依然会转发请求到该服务上。这时候,我就需要使用一些策略来实现节点自动下线
Nginx
自带的ngx_http_proxy_module
模块中,有默认的配置方式
1 2 3 4 5
| upstream http_balance { #20s内出现3次错误,该节点下线20s,这20s内不会将请求转发到下线节点上。 server 192.168.0.6:80 max_fails=3 fails_timeout=20s; server 192.168.0.7:80 max_fails=3 fails_timeout=20s; }
|
nginx_upstream_check_module
该组件为淘宝技术团队
开发,我们可以编译到Nginx
中,首先,到Github下载wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
,在编译时添加模块--add-module=/xxx
。编译成功后,即可在location
中配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| upstream http_balance { zone http_balance 64k; server 192.168.0.6:80; server 192.168.0.7:80; check interval=3000 rise=2 fall=3 timeout=3000 type=http; #interval检测间隔时间,默认毫秒,当前3秒 #rise表示请求2次,正常认为节点正常 #fall表示请求失败3次,则认为节点失败 #timout超时时间,默认毫秒,当前3秒 #type,类型,当前http类型
check_http_send "GET /status.html HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; #分发节点轮询检测后端节点的url/status.html ,如果返回2xx或者3xx认为正常,否则认为失败一次 }
|