以前写过一篇,nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx 挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研究了一下该如何监控 nginx进程呢,看官方站看到了。vrrp_script 功能,但是用他的方法实在形不通,可能是我的方法不对,或者是个BUG。所以后来我自己写了个小脚本来完成工作。
环境
Server 1 : ubuntu-server 8.04.4 192.168.6.162
Server 2 : userver-server 8.04.4 192.168.6.188
软件
Keepalived 1.1.15
nginx-0.8.35
pcre-8.02
1.分别在两台服务器上安装nginx
1 | tar jxvf pcre-8.02.tar.bz2 |
2.分别在两台服务器编写配置文件
1 | vim /usr/local/nginx/conf/nginx.conf |
3.分别在两台机器创建测试文件
echo "192.168.6.162" > /var/www/index.html
echo "192.168.6.188" > /var/www/index.html
4.安装 keepalived
apt-get install keepalived
5.在server 1服务器编写配置文件
1 | vrrp_script chk_http_port { |
6.在 server 2 服务器 keepalived 配置
1 | vrrp_script chk_http_port { |
7.编写监控nginx监控脚本
1 | vim /opt/nginx_pid.sh |
8、测试,分别在两个服务器启动 nginx 和 keepalived
/usr/local/nginx/sbin/nginx
/etc/init.d/keepalived start
监控 server 1 的日志
1 | Apr 20 18:37:39 nginx Keepalived_vrrp: Registering Kernel netlink command channel |
监控 server 2的日志
1 | Apr2018:38:23 varnish Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'. |
看日志可以看出,两台服务器的 MASTRE 和 BACUKUP 已经都正常了
现在我们在 server 1 把 nginx 服务器停到Server 1 $> killall nginx
这时候看server 1的日志
1 | Apr 20 18:41:26 nginx Keepalived_healthcheckers: Terminating Healthchecker child process on signal |
可以看出keepalived 的进程已经停到
这时候看server 2的日志,看是否已经接管
1 | Apr 20 18:41:23 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE |
很明显的看出 server 2 已经接管了,已经变为 MASTER 了