使用nginx_upstream_check_module对后端服务进行健康检测

nginx可以方便快捷的配置负载均衡,并且可以配置失效策略,负载均衡算法等。如下,是一个简单的配置。

 

 

如上,配置了两台后端服务,一个81端口,一个82端口,81的权重为1,82的权重为2。每10s内如果失效次数到达2次,则任务后端服务不可用,判定为不可用,会将其从后端列表中摘除,10s再次加入后端服务器列表。

nginx默认的健康监测机制为被动检测,没有主动进行心跳检测。还好,有nginx_upstream_check_module模块,配置了nginx_upstream_check_module模块,就可以主动进行心跳检测了。

配置模块
1)首先,停止nginx。进入nginx安装包,如我的路径是/root/lnmp1.5/src/nginx-1.14.1

cd /root/lnmp1.5/src/nginx-1.14.1

2)为了统一管理第三方模块,新建了一个modules目录,并进入modules目录

mkdir modules;
cd modules;

 

3)下载nginx_upstream_check_module模块

wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master;
unzip master;
patch -p1 < /root/lnmp1.5/src/nginx-1.14.1/modules/nginx_upstream_check_module-master/check_1.14.0+.patch

 

4)查看nginx原本的配置参数

nginx -V

 

5)重新编译,要使用上面输出的配置参数

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/root/lnmp1.5/src/openssl-1.0.2o --add-module=/root/lnmp1.5/src/nginx-1.14.1/modules/nginx_upstream_check_module-master;
make;

 

最后的add-module就是加载了nginx_upstream_check_module模块。

然后使用make编译。注意,不要make install。

6)将生成的nginx替换原来的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak;
cp ./objs/nginx /usr/local/nginx/sbin/;

 

开启nginx服务。

service nginx start;

 

配置心跳检测

upstream backend {
            #ip_hash;
            server 127.0.0.1:81 max_fails=2 fail_timeout=10s weight=1;
            server 127.0.0.1:82 max_fails=2 fail_timeout=10s weight=2;
 
            check interval=5000 rise=2 fall=3 timeout=3000 type=http;
            check_http_send "HEAD / HTTP/1.0\r\n\r\n";
            check_http_expect_alive http_2xx http_3xx;
        }

 

上述心跳检测的规则是:每5s检测一次,失败3次则标识后端服务为不存活,成功两次标识为存活,超时时间为3s,检测方式为http。

心跳检测的方式有http和tcp两种方式。如果只是tcp方式,则下面的check_http_send和check_http_expect_alive不需要。

当type为 http,可使用check_http_send来配置http监控检查包发送的请求内容,

 check_http_send "GET /url/index.html  HTTP/1.0\r\n\r\n";


为了减少传输数据量,推荐采用 HEAD 方法。

 check_http_send "HEAD / HTTP/1.0\r\n\r\n";


当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头。

采用 GET 请求uri的size不宜过大,确保在1个interval内传输完成,否则判后端服务器或网络异常。

check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
 

指定HTTP回复的健康检查成功状态码,默认认为2XX和3XX的状态是健康的,但无法精确区分像301、302。

check_http_expect_alive [http_2xx | http_3xx | http_4xx | http_5xx]

 

 

 

原文链接:https://blog.csdn.net/maquealone/article/details/87261214

 

posted @ 2022-03-11 22:00  fengjian1585  阅读(1526)  评论(0编辑  收藏  举报