Keepalived详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keepalived详解相关的知识,希望对你有一定的参考价值。
一.通过vrrp_script实现对集群资源的监控:
Keepalived基础HA功能时用到了vrrp_script这个模块,此模块专门用于对集群中服务资源进行监控。与此模块一起使用的还有track_script模块,在此模块中可以引入监控脚本、命令组合、shell语句等,以实现对服务、端口等多方面的监控。track_script模块主要用来调用“vrrp_script”模块使Keepalived执行对集群服务资源的检测。
此外,在vrrp_script模块中可以定义对服务资源检测的时间间隔、权重等参数,通过vrrp_script和track_script组合,可以实现对集群资源的监控并改变集群优先级,进而实现Keepalived的主、备节点切换。
1.通过killall命令探测服务运行状态:
这种监控集群服务的方式主要是通过killall命令实现的。killall会发送一个信号到正在运行的指定命令的进程。如果没指定信号名,则发送SIGTERM。SIGTERM也是信号名的一种,代号为15,它表示以正常的方式结束程序的运行。其实killall可用的信号名有很多,可通过“killall -l ”命令显示所有信号名列表,其中每个信号名代表对进程的不同执行方式,例如,代号为9的信号表示将强制中断一个程序的运行。这里要用到的信号为0,代号为0的信号并不表示要关闭某个程序,而表示对程序(进程)的运行状态进行监控,如果发现进程关闭或其他异常,将返回状态码1,反之,如果发现进程运行正常,将返回状态码0.vrrp_script模块正是利用了killall命令的这个特性,变相实现了对服务运行状态的监控。
例:
vrrp_script check_mysqld {
script "killall -0 mysqld"
interval 2
}
track_script {
check_mysqld
}
这个例子定义了一个服务监控模块check_mysqld,其采用的监控的方式是通过“killall -0 mysqld”的方式,其中“interval”选项检查的时间间隔,即2s执行一次检测。
在MySQL服务运行正常情况下,通过killall命令检测结果如下:
[[email protected] ~]# killall -0 mysqld
[[email protected] ~]# echo $?
0
这里通过“echo $?”方式显示了上个命令的返回状态码,MySQL服务运行正常,因此返回的状态码为0,此时check_mysqld模块将返回服务检测正常的提示。接着将MySQL服务关闭,再次执行检测,结果如下:
[[email protected] ~]# killall -0 mysqld
mysqld: 没有进程被杀死
[[email protected] ~]# echo $?
1
由于MySQL服务被关闭,因此返回的状态码为1,此时check_mysqld模块将返回服务检测失败的提示。然后根据vrrp_script模块中设定的“weight”值重新设置Keepalived 主、备节点的优先级,进而引发主、备节点发生切换。
从这个过程可以看到,vrrp_script模块其实并不关注监控脚本或监控命令是如何实现的,它仅仅通过监控脚本的返回状态码来识别集群服务是否正常,如果返回状态码为0,那么就认为服务正常,如果返回状态码为1,则认为服务故障。明白了这个原理之后,在进行自定义监控脚本的时候,只需按照这个原则来编写即可。
2.检测端口运行状态:
检测端口的运行状态也是最常见的服务监控方式,在keepalived的vrrp_script模块中可以通过如下方式对本机的端口进行检测:
vrrp_script check_httpd {
script "</dev/tcp/127.0.0.1/80"
interval 2
fall 2
rise 1
}
track_script {
check_httpd
}
在这个例子中,通过 "</dev/tcp/127.0.0.1/80"这样的方式定义了一个对本机80端口的状态检测,其中,“fail”选项表示检测到失败的最大次数,也就是说,如果请求失败两次,就认为此节点资源发生故障,将进行切换操作;“rise”表示如果请求一次成功,就认为此节点资源恢复正常。
3.通过shell语句进行状态监控:
在Keepalived的vrrp_script模块中甚至可以直接引用shell语句进行状态监控,例如:
vrrp_script chk_httpd {
script "if [ -f /var/run/httpd/httpd.pid ]; then exit 0;else exit 1; fi"
interval 2
fall 1
rise 1
}
track_script {
chk_httpd
}
在这个例子中,通过一个shell判断语句,检测httpd.pid文件是否存在,如果存在,就认为状态正常,否则认为状态异常,这种监测方式对于一些简单的应用监控或者流程监控非常有用。从这里也可以得知,vrrp_script模块支持的监控方式十分灵活。
4. 通过脚本进行服务状态监控:
这是最常见的监控方式,其监控过程类似于nagios的执行方式,不同的是,这里只有0、1两种返回状态,例如:
vrrp_script chk_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
track_script {
chk_mysqld
}
其中,check_mysqld.sh的内容为:
#!/bin/bash
/usr/bin/mysql -e "show status;" > /dev/null 2>&1
if [ $? -eq 0 ];then
MYSQL_STATUS=0
else
MYSQL_STATUS=1
fi
exit $MYSQL_STATUS
这是一个最简单的实现MySQL服务状态检测的shell脚本,它通过登录MySQL数据库后执行查询操作来检测MySQL运行是否正常,如果检测正常,将返回状态码0,否则返回状态码1。其实,很多在nagios下运行的脚本,只要稍作修改,既可在这里使用,非常方便。
以上是关于Keepalived详解的主要内容,如果未能解决你的问题,请参考以下文章