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

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

一、vrrp_script

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

配置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用户执行脚本。socket

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

2.一、经过killall命令检测服务运行状态

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

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

2.二、检测端口运行状态

对于服务端口的监控也能够达到检测服务是否正常运行的目的。经过一个特殊的文件/dev/tcp就能够对端口进行检测,打开这个文件就至关于创建了一个socket链接。注意:/dev/tcp文件自己并不存在。code

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

2.三、使用shell语句进行监控

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

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.四、经过脚本进行监控

vrrp_script能够经过运行指定的脚原本对服务进行监控。在编写脚本时,只须要控制脚本的返回值为0或非0便可。blog

相关文章
相关标签/搜索