nginx主动检测被动监测
被动检测
Nginx 将请求传递给 Upstream Server处理时,默认会根据单位时间、失败次数,判定 Upstream Server 是否故障
相关参数:
- fail_timeout
- 该时间范围内,产生 max_fails 次数的失败后,Nginx 会认为该 Upstream Server 故障,并将其摘除相同的时间
- 默认值:10s
- max_fails
- 失败的最大次数,设置为 0 则为不使用摘除逻辑
- 默认值:1
- 具体什么为失败,见 proxy_next_upstream
- proxy_next_upstream
- 指定何种什么情况下,Nginx 应将请求交给下一个 Upstream Server
- 默认值:error、timeout
- 其它可选值:invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off
- 其它参数见 Nginx 文档:ngx_http_upstream_module
###
主动检测
Nginx 主动检测 Upstream Server 是否正常,需要安装淘宝的 nginx_upstream_check_module
检测方式:Nginx 定期检测 Upstream Server,可考虑以下方式
TCP:检测 Upstream Server 的 IP + 端口是否存活
HTTP:
- HEAD:
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
- GET:
check_http_send "HEAD / HTTP/1.1\r\n Host: $host\r\n\r\n Connection: keep-alive\r\n\r\n";
重要提示:当后端服务的HTTP协议版本为HTTP/1.1时,必须在请求头指定Host: foo.bar.com,否则健康检查会报check protocol http error with peer的错误而导致后端节点被下线,配置示例(长连接同理):
- HEAD:
#tengine配置参考
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
"#check interval=3000 rise=2 fall=5 timeout=1000 type=http;"
进行健康检查,检查的时间间隔为3000毫秒,当有2次连续成功时认为服务正常,
当有5次连续失败时认为服务不正常,超时时间为1000毫秒,检查类型为HTTP。
配置参考
check interval=3000 rise=2 fall=3 timeout=1000 type=http;
check_http_expect_alive http_2xx;
check_http_send "GET / HTTP/1.1\r\nHOST:$host\r\n\r\nConnection:keep-alive\r\n\r\n";
#check_http_send "HEAD / HTTP/1.0\r\n\r\n";
一定注意check的格式,不能有空格等。否则健康检查会报check protocol http error with peer的错误而导致后端节点被下线。可以通过查看error日志查看到具体的信息。
被动检测nginx版本自带指令,主动检测需要安装扩展淘宝的 nginx_upstream_check_module
注意事项
nginx_upstream_check_module模块比较特殊,需要patch后在编译。同时patch注意对应的nginx版本。
模块路径:/opt/apps/nginx-module/nginx_upstream_check_module-0.4.0
⚠️手动打patch
cd /opt/soft/nginx/nginx
patch -p1 < /opt/apps/nginx-module/nginx_upstream_check_module-0.4.0/check_1.14.0+.patch
编译流程
编译机器
nginx源路径 /opt/soft/nginx/nginx
安装目录 /opt/apps_install/nginx
模块目录 /opt/apps/nginx-module
查看原nginx已有模块
nginx -V
新扩展模块
下载新模块,一定把之前有的模块都加全,不要有遗漏。
主动检测模块配置health-status
location /health-status
{
allow 192.168.0.0/16;
allow 127.0.0.1;
deny all;
check_status;
access_log off;
}
参考地址
nginx扩展nginx_upstream_check_module健康监测
tengine ngx_http_upstream_check_module模块
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!