概念
nginx_upstream_check_module 是专门提供负载均衡器内节点的健康检查的外部模块,由淘宝的姚伟斌大神开发,通过它可以用来检测后端 realserver 的健康状态。如果后端 realserver 不可用,则后面的请求就不会转发到该节点上,并持续检查几点的状态。在淘宝自己的 tengine 上是自带了该模块。项目地址:https://github.com/yaoweibin/nginx_upstream_check_module
参考文档:https://www.cnblogs.com/paul8339/p/8124739.html
示例:基于http健康状态检测
注意:只需要在一个nginx实例中定义一个虚拟主机专门用于显示查看健康状态页面, 对于需要健康状态检查的服务, 只需要在upstream开启即可如下;
#vim /usr/local/nginx/conf.d/www.test.com.conf
upstream node {
ip_hash;
server 192.9.191.31:8001;
server 192.9.191.31:8002;
server 192.9.191.31:8003;
check interval=1000 rise=1 fall=1 timeout=1000 type=http; #监测间隔时间, 失败到成功的次数, 成功到失败的次数, 超时时间, 类型
check_http_send "GET /index.html HTTP/1.0\r\n\r\n"; #get请求, 资源路径
check_http_expect_alive http_2xx http_3xx; #状态码是2或3开头就是正常
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://node;
}
server {
listen 80;
server_name helth_chek.test.com;
location /status { //开启状态页面
check_status;
access_log off;
allow 192.9.191.0/24;
deny all;
}
}
参数详解
check interval=1000 rise=1 fall=1 timeout=1000 type=http;
interval检测间隔时间,单位毫秒
rise请求1次正常的话,标记此realserver的状态为up
fall表示请求1次都失败的请求,标记此realserver的状态为down
timeout超时时间,单位毫秒
type是http类型
check_http_send "GET /index.html HTTP/1.0\r\n\r\n";
可以使用GET方法,POST,HEAD等方法获取资源 /index.html表示请求的资源,
check_http_expect_alive http_2xx http_3xx;
状态码是2xx和3xx就认为后端服务是正常的
验证
访问: helth_chek.test.com/status 如下所示
示例: 基于tcp服务的健康服务检测
#vim /usr/local/nginx/conf.d/www.test.com.conf
upstream node {
ip_hash;
server 192.9.191.31:8001;
server 192.9.191.31:8002;
server 192.9.191.31:8003;
check interval=1000 rise=1 fall=1 timeout=1000 type=tcp; #监测间隔时间, 失败到成功的次数, 成功到失败的次数, 超时时间, 类型
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://node;
}
}
server {
listen 80;
server_name helth_chek.test.com;
location /status { //开启状态页面
check_status;
access_log off;
allow 192.9.191.0/24;
deny all;
}
}