关于nginx模块nginx_upstream_check_module的安装使用
2016-12-05 00:00
716 查看
在使用nginx的反向代理过程中,对于服务器节点的健康检查和故障转移很重要。
早期使用nginx的时候,用来做故障转移用到的是如下配置(比较粗暴)
经过实际测试,在5s内,如果第一个服务器节点都不返回,在这5s内,请求不会向这台服务器转发,5s的超时时间到了,再次发起请求,就按照轮转规则,该到这台服务器还是会过去,这时候再经历5s,请求不会到这台服务器。这样子实际达不到想要的效果,在服务没恢复以前,请求不到这台服务器。
之后在网上找关于nginx健康检查的模块、组件 ,找到了淘宝的nginx_upstream_check_module。安装过程比较简单,就是给nginx打补丁。打完补丁重新编译一个nginx版本就可以使用了。
https://github.com/yaoweibin/nginx_upstream_check_module
这里我用到的是1.10.1版本的nginx,在网上看到的很多资料说是用到patch -p0 (有待深究),也安装了 http_stub_status 用来看请求量。在nginx中用到的配置是:
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的时候,用来做故障转移用到的是如下配置(比较粗暴)
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 Tengine ngx_http_upstream_check_module 健康功能检测使用
- nginx模块nginx_upstream_check_module来检查后端服务器的健康情况
- Tengine ngx_http_upstream_check_module 健康功能检测使用
- Nginx 负载均衡 后端 监控检测 nginx_upstream_check_module 模块的使用
- nginx nginx_upstream_check_module nginx-sticky-module 安装
- Nginx 负载均衡 后端 监控检测 nginx_upstream_check_module 模块的使用
- nginx入门学习—— 在已安装好的nginx上添加nginx_upstream_check_module模块(三)
- 自动安装带nginx_upstream_check_module模块的Nginx脚本
- 安装nginx_upstream_check_module时make出错,求助
- 关于springIDE的安装与使用 【Spring2.0 技术手册补遗 】
- 关于Linux下VNC的安装和使用的问题 ZT
- Photoshop入门:关于外部样式的安装和使用
- 关于使用osql 与 sqlcmd 命令来安装数据库前的知识准备(比如用installshield)
- 关于HUAWEI EG162G安装使用问题解决方案
- 关于pager-taglib的安装与使用
- 关于loadrunner安装使用相关
- Wix 使用总结(续)--关于Feature和Component的状态判断安装过程
- 关于PHP Pear 安装及使用
- 关于使用Visual Studio 2008 建立Setup And Deployment Project(安装与部署项目)制作安装.net 安装程序,插入Custom Actions(自定义动作)的办法
- 关于使用HttpModule模块处理登录验证示例