0%

nginx 增加健康检查模块 nginx_upstream_check_modules

因在linux环境Nginx中配置了2个WEB应用地址作为高可用。现在其中一个应用地址IIS停止了。结果都不能标记down,都会连接到原来一台地址上,只有proxy_connect_timeout参数超时了才会访问另外一台地址,然而访问后还是会请求原先停止的应用。因此采用如下方案解决。

淘宝技术团队开发的nginx模快nginx_upstream_check_module来检测后服务的健康状态,如果后端服务器不可用,则所以的请求不转发到这台服务器

github项目地址:https://github.com/yaoweibin/nginx_upstream_check_module/

部署

部署目录在/opt/src/下

  • 首先先从 GitHub 上下载 nginx_upstream_check_module 模块
1
2
wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
unzip master
  • nginx打补丁

截止2020年8月该模块暂时支持1.16.1版本

1
2
3
4
yum install -y patch
cd nginx-1.16.1
patch -p1 < ../nginx_upstream_check_module-master/check_1.16.1.patch
#因为我们nginx的版本是1.16.1补丁就选择1.16.1的,p1代表在nginx目录,p0是不在nginx目录
  • 编译Nginx
1
2
参数增加如下:
--add-module=/opt/src/nginx_upstream_check_module-master/
  • 配置模块
1
2
3
4
5
upstream test {
server 10.0.0.1:8080;
server 10.0.0.2:8080;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}
  • 健康检查状态
1
2
3
4
location /nstatus {
check_status;
access_log off;
}
  • 配置文件参数解释
1
2
3
4
5
6
7
interval     检测间隔时间,单位为毫秒
rsie 请求2次正常的话,标记此后端的状态为up
type 类型为http
fall 表示请求5次都失败的情况下,标记此后端的状态为down
timeout 为超时时间,单位为毫秒

更多参数查看https://github.com/yaoweibin/nginx_upstream_check_module/