使用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