Add health check for nginx
更新日期:
原由
为了监控nginx服务器的upstream,如tomcat的状态,给nginx服务器添加nginx_upstream_check_module,
安装
配置
默认没有conf.d文件夹,手动建一个,并且在nginx.conf文件中的server directive前加上
conf.d/tomcat.conf
conf.d/xxx.com.conf
切换nginx命令与服务
命令
安装后的位置在/usr/local/nginx/sbin/nginx
。
如果想无缝切换的话,可以直接把原来的nginx命令备份后,用新的nginx命令覆盖旧的。然后参考这个教程无缝切换。在CentOS 6.x上也可以使用service nginx upgrade
命令来做,原理是一样的。
否则继续往下走。
服务
-
CentOS 7.x
12sudo cp /usr/lib/systemd/system/nginx.service /usr/lib/systemd/system/nginx_patched.servicesudo vim /usr/lib/systemd/system/nginx_patched.service修改部分内容如下:
1234PIDFile=/run/nginx_patched.pidExecStartPre=/usr/bin/rm -f /run/nginx_patched.pidExecStartPre=/usr/local/nginx/sbin/nginx -tExecStart=/usr/local/nginx/sbin/nginx -
CentOS 6.x
12sudo cp /etc/init.d/nginx /etc/init.d/nginx_patchedsudo vim /etc/init.d/nginx_patched修改部分内容如下:
12345678# config: /usr/local/nginx/conf/nginx.conf# config: /etc/sysconfig/nginx_patched# pidfile: /var/run/nginx_patched.pidnginx="/usr/local/nginx/sbin/nginx"sysconfig="/etc/sysconfig/${prog}_patched"lockfile="/var/lock/subsys/nginx_patched"pidfile="/var/run/${prog}_patched.pid"NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"修改
/etc/sysconfig/nginx_patched
部分内容如下:1NGINX_CONF_FILE=/usr/local/nginx/conf/nginx.conf停止原有的nginx服务:
-
CentOS 7.x
12/usr/bin/systemctl stop nginx.service/usr/bin/systemctl disable nginx.service -
CentOS 6.x
12/sbin/service nginx stop/sbin/chkconfig nginx off开启新的nginx服务:
-
CentOS 7.x
12/usr/bin/systemctl start nginx_patched.service/usr/bin/systemctl enable nginx_patched.service -
CentOS 6.x
123/sbin/chkconfig --add nginx_patched/sbin/service nginx_patched start/sbin/chkconfig nginx_patched on
其他
如果不想自己重新用源码打patch,再编译安装的话,可以尝试下Tengine,自带了health check 模块。
如果不用health check模块的话,退一步,可以这样:
这样也可以实现负载均衡,当有一台tomcat当机后,请求会自动转到剩余可有的tomcat上,但有个孬处是,当当掉的tomcat启来后,nginx无法自动获知到,有新的upstream可用,这时就需要手动reload nginx,对线上请求会有波动影响。推荐还是使用health check模块。