青蛙学Linux—Keepalived中通过vrrp_script实现对资源的监控

在Keepalived的配置文件中,我们可以指定Keepalived监控的网络接口,当系统或网络出现问题时就会进行主备切换。但是,很多时候我们需要对集群中特定的服务进行监控,但服务发生故障时就进行主备切换,此时只监控网络接口就无法满足我们的需求。Keepalived提供了vrrp_script调用自定义脚本的方式满足了我们的需求。

1、vrrp_script

在Keepalived中,可以通过vrrp_script调用shell命令或一个脚本,通过该命令或脚本的返回值来判断监控的资源是否出问题。当返回值为0时,Keepalived认为被监控的资源正常;当返回值为非0时,Keepalived认为被监控的资源出现了问题。

配置vrrp_script:

vrrp_script 自定义名称 {
    script "命令或脚本"
    interval 数字
    fall 数字
    rise 数字
}
vrrp_instance VRRP实例名 {
    ...
    track_script {
        vrrp_script的自定义名称
    }
}
  • script:调用shell命令或脚本
  • interval:定义执行命令或脚本的时间间隔,单位秒
  • fall:定义检测失败的最大次数,如设置为2表示当请求失败两次时就认为节点资源故障
  • rise:定义请求成功的次数,如设置为1表示当进行一次请求成功后就认为节点资源恢复正常
  • vrrp_instance中的track_script:调用vrrp_script使之生效

vrrp_script执行命令或脚本时默认使用的用户为keepalived_script,如果系统中不存在该用户,则使用root用户执行脚本。

2、使用vrrp_script监控资源的几种常用方式

2.1、通过killall命令检测服务运行状态

通过命令killall –0 进程名可以检测指定的进程是否正在运行。这里使用了killall的0信号,当killall向一个进程发出0信号时,不会结束这个进程,而是返回0或非0的值。0表示进程正在运行,而非0表示进程不存在。所以,通过这种方式可以很方便的检测一个服务是否正在运行。

e.g:监测Apache的httpd服务
vrrp_script check_httpd{
    script "killall -0 httpd"
    ...
}

2.2、检测端口运行状态

对于服务端口的监控也可以达到检测服务是否正常运行的目的。通过一个特殊的文件/dev/tcp就可以对端口进行检测,打开这个文件就相当于建立了一个socket连接。注意:/dev/tcp文件本身并不存在。

e.g:检测80端口是否打开
vrrp_script check_httpd {
    script "</dev/tcp/127.0.0.1/80"
    ...
}

2.3、使用shell语句进行监控

vrrp_script还支持直接引用shell语句进行状态监控。

e.g:判断Apache的PID文件是否存在以确定Apache的服务是否正常
vrrp_script check_httpd {
    script "if [ -f /var/run/httpd/httpd.pid ]; then exit 0; else exit 1; fi"
    ...
}

2.4、通过脚本进行监控

vrrp_script可以通过运行指定的脚本来对服务进行监控。在编写脚本时,只需要控制脚本的返回值为0或非0即可。

原文地址:https://www.cnblogs.com/yu2006070-01/p/10386772.html