关于高可用-keepalived的健康检测-监控脚本的使用
如何判断nginx是否运行?1、使用killall -0 nginx 来判断nginx是否运行了没有2、也可以使用 pidof nginx来查找nginx的进程号,如果进程号不存在则表示nginx服务被终止了[root@mysql nginx]# vim check_nginx.sh #创建一个检测nginx是否运行的脚本/bin/bash#检测nginx是否正常运行thenexit 0elsee
目录
如果负载均衡器上的nginx出现了程序问题,keepalived是否还有价值?
监控本机的nginx是否运行,如果nginx进程不运行,就立马降低本机的优先级30,并观察vip是否发生漂移
实现:如果检查到nginx进程关闭,立马关闭keepalived的服务软件
一、项目背景:
负载均衡器包含了:
1、nginx --》实现负载均衡
2、keepalived --》实现高可用 HA
如果负载均衡器上的nginx出现了程序问题,keepalived是否还有价值?
keepalived的价值是建立在nginx能正常工作的情况下的,如果nginx出现异常,这台机器就不是负载均衡器了,需要停止它的master角色的身份,会将它的优先级降低,让位给其他的机器。所以它的背后就需要一个健康检测系统。
程序解析:
二、项目简介:
三、实例:
监控本机的nginx是否运行,如果nginx进程不运行,就立马降低本机的优先级30,并观察vip是否发生漂移
1、编写监控nginx的脚本
如何判断nginx是否运行?
1、使用killall -0 nginx 来判断nginx是否运行了没有
2、也可以使用 pidof nginx来查找nginx的进程号,如果进程号不存在则表示nginx服务被终止了
[root@mysql /]# cd nginx
[root@mysql nginx]# ls
nginx-1.23.2 onekey_install_henshan_nginx.sh
nginx-1.23.2.tar.gz
[root@mysql nginx]# vim check_nginx.sh #创建一个检测nginx是否运行的脚本
[root@mysql nginx]# cat check_nginx.sh
#!/bin/bash
#检测nginx是否正常运行
if /usr/sbin/pidof nginx &>/dev/null ;then
exit 0
else
exit 1
fi
[root@mysql nginx]#
[root@mysql nginx]# ps aux|grep nginx #检查nginx是否正在进行服务
root 915 0.0 0.1 67876 1408 ? Ss 4月06 0:00nginx: master process /usr/local/scnginx66/sbin/nginx
clay 918 0.0 0.2 68744 2308 ? S 4月06 0:00nginx: worker process
clay 919 0.0 0.2 68744 2308 ? S 4月06 0:00nginx: worker process
clay 920 0.0 0.2 68744 2308 ? S 4月06 0:00nginx: worker process
clay 921 0.0 0.2 68744 2804 ? S 4月06 0:00nginx: worker process
root 3750 0.0 0.0 112824 988 pts/1 R+ 03:10 0:00 grep --color=auto nginx
[root@mysql nginx]# bash check_nginx.sh #nginx成功运行输出0 不成功运行输出1
[root@mysql nginx]# echo $? #判断是否运行成功
0
[root@mysql nginx]#
[root@mysql nginx]# nginx -s stop #停止nginx服务
[root@mysql nginx]# ps aux|grep nginx
root 3774 0.0 0.0 112824 988 pts/1 R+ 03:20 0:00 grep --color=auto nginx
[root@mysql nginx]# bash check_nginx.sh
[root@mysql nginx]# echo $?
1
[root@mysql nginx]#
[root@mysql nginx]# ll
总用量 1092
-rw-r--r-- 1 root root 110 4月 7 03:12 check_nginx.sh
drwxr-xr-x 9 clay clay 186 10月 19 15:56 nginx-1.23.2
-rw-r--r-- 1 root root 1108243 3月 14 00:30 nginx-1.23.2.tar.gz
-rw-r--r-- 1 root root 1562 3月 14 01:01 onekey_install_henshan_nginx.sh
[root@mysql nginx]# chmod +x check_nginx.sh #给它增加可执行权限
[root@mysql nginx]# ll
总用量 1092
-rwxr-xr-x 1 root root 110 4月 7 03:12 check_nginx.sh
drwxr-xr-x 9 clay clay 186 10月 19 15:56 nginx-1.23.2
-rw-r--r-- 1 root root 1108243 3月 14 00:30 nginx-1.23.2.tar.gz
-rw-r--r-- 1 root root 1562 3月 14 01:01 onekey_install_henshan_nginx.sh
[root@mysql nginx]#
keepalived 会通过查看脚本执行的返回值来判断脚本是否正确执行
0 表示执行成功 nginx还在运行
1 表示执行失败 nginx运行失败
(在两台负载均衡器里都必须完成该脚本,而且两个脚本都必须赋予可执行权限)
2、在keepalived.conf文件里面定义监控脚本
在global_defs下面定义
定义监控脚本的执行方式 和 执行后所产生的条件:
当 keepalived发现这个脚本check_nginx.sh这个脚本的返回值为0的时候,不执行下面的wegiht -30 的操作, 当发现返回值非0的时候,就会执行给优先级减30 的操作
这条命令是1s中执行一次,1s中刷新执行
3、在keepalived里调用监控脚本
撰写调用监控脚本:
第二台负载均衡器上也需要进行配置
4、通过tcpdump来查看对应的vip 和 其中的优先级
首先需要刷新服务:service keepalived restart
如果出现错误,需要查看日志:tail /var/log/massages
安装tcpdump : yum install tcpdump -y
使用tcpdump查看ens33网卡的vrrp协议包的交流记录:
tcpdump -i ens33 vrrp -vv
-vv 表达的是以数字的形式
通过打开nginx和关闭nginx可以查看对应产生的效果
可以通过 ip add 来查看vip是否发生了漂移,并且与nginx产生的情况是否相互对应
四、keepalived的一些其他功能:
当本节点服务器成为某个角色的时候,我们去执行某个脚本
1、notify_master
notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务,比如nginx,haproxy等)
如:notify_master /mail/master.sh
2、notify_backup
notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务,比如nginx,haproxy等)
notify_backup /mail/backup.sh
实现:如果检查到nginx进程关闭,立马关闭keepalived的服务软件
1、编写halt_keepalived脚本,用来实现对keepalived的关闭
[root@mysql nginx]# vim halt_keepalived.sh #创建一个能直接关闭keepalived服务的脚本
[root@mysql nginx]# cat halt_keepalived.sh
#!/bin/bash
#关闭keepalived服务
service keepalived stop
[root@mysql nginx]# bash halt_keepalived.sh
Redirecting to /bin/systemctl stop keepalived.service
[root@mysql nginx]# ps aux|grep keepalived
root 5155 0.0 0.0 112824 988 pts/1 R+ 04:08 0:00 grep --color=auto keepalived
[root@mysql nginx]# chmod +x halt_keepalived.sh #给予可执行权限
[root@mysql nginx]# ll
总用量 1096
-rwxr-xr-x 1 root root 112 4月 7 03:17 check_nginx.sh
-rwxr-xr-x 1 root root 61 4月 7 04:07 halt_keepalived.sh
drwxr-xr-x 9 clay clay 186 10月 19 15:56 nginx-1.23.2
-rw-r--r-- 1 root root 1108243 3月 14 00:30 nginx-1.23.2.tar.gz
-rw-r--r-- 1 root root 1562 3月 14 01:01 onekey_install_henshan_nginx.sh
[root@mysql nginx]#
2、在keepalived.conf文件里调用 notify_backup 命令,用于调用脚本
然后打开keepalived服务和nginx服务 进行测试
当我们把该负载均衡器的nginx关闭的时候,keepalived也会随之关闭,因此实现了我们想要的功能
3、notify_stop
notify_fault:当当前节点出现故障,执行的任务;
notify_stop /mail/stop.sh
五、参考文章:
keepalived中vrrp_script,track_script,notify的使用方法 - 代搬服务器 - 博客园 (cnblogs.com)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)