您的位置:首页 > 运维架构 > Nginx

关于nginx模块nginx_upstream_check_module的安装使用

2016-12-05 00:00 716 查看
在使用nginx的反向代理过程中,对于服务器节点的健康检查和故障转移很重要。

早期使用nginx的时候,用来做故障转移用到的是如下配置(比较粗暴)

upstream portals {
server 172.16.68.134:8082 max_fails=1 fail_timeout=5;
server 172.16.68.135:8082 max_fails=1 fail_timeout=5;
server 172.16.68.136:8082 max_fails=1 fail_timeout=5;
server 172.16.68.137:8082 max_fails=1 fail_timeout=5;
}

经过实际测试,在5s内,如果第一个服务器节点都不返回,在这5s内,请求不会向这台服务器转发,5s的超时时间到了,再次发起请求,就按照轮转规则,该到这台服务器还是会过去,这时候再经历5s,请求不会到这台服务器。这样子实际达不到想要的效果,在服务没恢复以前,请求不到这台服务器。

之后在网上找关于nginx健康检查的模块、组件 ,找到了淘宝的nginx_upstream_check_module。安装过程比较简单,就是给nginx打补丁。打完补丁重新编译一个nginx版本就可以使用了。

https://github.com/yaoweibin/nginx_upstream_check_module

patch -p0 < ./nginx_upstream_check_module-master/check_1.11.1+.patch

./configure --user=user1 --group=user1 --prefix=/app/nginx-1.10.1 --with-pcre=/app/nginx-1.10.1/pcre-8.39 --with-http_stub_status_module --add-module=./nginx_upstream_check_module-master/

这里我用到的是1.10.1版本的nginx,在网上看到的很多资料说是用到patch -p0 (有待深究),也安装了 http_stub_status 用来看请求量。在nginx中用到的配置是:

upstream portals {
server 172.16.68.134:8082;
server 172.16.68.135:8082;
server 172.16.68.136:8082;
server 172.16.68.137:8082;
check interval=5000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}

server {
listen       80;
server_name  localhost;

location /ng_status {
stub_status on;
access_log off;
}

location /status {
check_status;
access_log off;
}
}

interval间隔5s,连续失败5次,连续成功2次,超时时间1s,使用http协议,发送一个请求头,如果是2xx或者3xx状态(比如200,302等)表示服务正常运行。

这里出现了一个问题,就是按照github上的配置,检查后没报错,但是在访问网页/status的时候,提示找不到对应的网页,看nginx的error日志,发现在nginx启动的时候,提示找不到任何主机节点。这个之后,在网上找了一下nginx官方提供的健康检查服务,后来发现是收费版的功能,之后再在网上找到一个资料,这个是需要在服务目录下提供一个网页,里面含有指定的字符串,当发现匹配的字符串时,就认为这个节点正常。之后,加了个nginx的群,看到也有人配置使用nginx_upstream_check_module这个模块,发现别人可以了,自己又去试了一次,还是不行,重新编译了个版本放到新的目录,就可以了。

这里存在一个思想误区(漏洞),在nginx发送http请求的时候,发送的是"/",也就是访问根目录,而我这次部署的项目,是一个纯粹的服务,没有任何网页,tomcat的ROOT目录中,所有的文件都删掉了,所有在访问服务器的"/"根路径的时候,直接请求失败了,nginx认为没有任何一个节点存活,所以这个服务也就不可用了。监看检查用到的那个网页被我部署到tomcat的根目录,也就是能正常访问到,于是模块正常使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx 健康检查