上篇中提到对nginx7层(http和https)进行健康检查,使用的是淘宝的模块进行编译
https://github.com/yaoweibin/nginx_upstream_check_module
但是此模块只支持nginx7层的健康检查,不支持4层UDP和TCP的健康检查。如果我们需要既支持4层又支持7层的健康检查模块,需要使用由另一位大神修改后的模块
https://github.com/zhouchangxun/ngx_healthcheck_module
下面对配置文件中的配置进行解析
user nginx;
events {
worker_connections 1024;
}
http {
#下边server固定放在nginx配置文件中,主要用来做健康检查
#指定监听的ip 指定健康检查的访问路径和数据的展示格式为json,
#访问curl 127.0.0.1:9997/status 则所有健康检查的数据均能显示。获取数据代码解析json获取所需数据即可
server {
listen 127.0.0.1:9997;
location /status {
healthcheck_status json;
}
}
#正常监听器开始添加
server {
listen 192.168.11.2:800;
server_name test1;
location /{
proxy_pass http://test1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream test1 {
server 10.110.29.22:8080 weight=20;
server 10.110.28.33:80 weight=20;
#interval健康检查检查间隔时间 rise检查成功几次认为后端server状态为up fall检查失败几次认为后端server状态为down
#timeout超时时间 type检查协议类型(tcp或者http)
#port健康检查的端口,取值从1开始,不配置默认检测后端server本身端口(29.22就检查8080端口,28.33就检查80端口),
#规定后所有后端server检查规定的端口(port=8080:29.22和28.33都检查8080端口)
check interval=3000 rise=1 fall=3 timeout=4000 type=http port=8080;
#此条检查http转发,需要配置的有两个地方
#一是转发路径 如果不加配置默认"/"访问根目录下默认的tomcat页面,配置健康检查路径后,按配置路径去访问后端节点是否可用
#举例说明 登录10.110.29.22节点,在tomcat目录webapps目录下新建目录aa并且放入文件bb.html。这样健康检查时11.110.29.22:8080的状态为up
#而10.110.28.33:8080的状态就为down,因为无法找到此节点。
#另一方面是域名的配置,这个对健康检查的结果目前并无影响(具体情况以后补充)。
#一般这两个方面没有特殊要求默认不做配置即可,如果需要配置域名,可参考以下链接
*****https://cloud.tencent.com/developer/article/1448475*****
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
#check_http_send "HEAD /aa/bb.html HTTP/1.1\r\nHost:www.baidu.com\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
}
stream{
server {
listen 192.168.23.13:88;
proxy_pass http://test2;
}
upstream test2 {
server 10.110.29.12:8080 weight=20;
server 10.110.28.13:8080 weight=20;
check interval=3000 rise=1 fall=3 timeout=4000 type=tcp port=8080;
}
server {
listen 192.168.23.13:77 udp;
proxy_pass test3;
}
upstream test3 {
server 10.110.29.12:8080 weight=20;
server 10.110.28.13:8080 weight=20;
check interval=3000 rise=1 fall=3 timeout=4000 type=udp port=8080;
}
}
检测后端server‘状态 不指定port默认显示为0
需要注意一点,一定要打补丁,否则stream模块的健康检查不可用(git中也有详细介绍)
cd tengine-2.3.2
patch -p1 < /root/ngx_healthcheck_module/nginx_healthcheck_for_tengine_2.3+.patch
根据自己的版本选择补丁文件
版权声明:本文为liucy007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。