suncool 发表于 2018-12-29 06:28:46

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命令检测结果如下:
  # killall -0 mysqld
  # echo $?
  0
  这里通过“echo $?”方式显示了上个命令的返回状态码,MySQL服务运行正常,因此返回的状态码为0,此时check_mysqld模块将返回服务检测正常的提示。接着将MySQL服务关闭,再次执行检测,结果如下:
  # killall -0 mysqld
  mysqld: 没有进程被杀死
  # echo $?
  1
              由于MySQL服务被关闭,因此返回的状态码为1,此时check_mysqld模块将返回服务检测失败的提示。然后根据vrrp_script模块中设定的“weight”值重新设置Keepalived 主、备节点的优先级,进而引发主、备节点发生切换。
              从这个过程可以看到,vrrp_script模块其实并不关注监控脚本或监控命令是如何实现的,它仅仅通过监控脚本的返回状态码来识别集群服务是否正常,如果返回状态码为0,那么就认为服务正常,如果返回状态码为1,则认为服务故障。明白了这个原理之后,在进行自定义监控脚本的时候,只需按照这个原则来编写即可。
      2.检测端口运行状态:

              检测端口的运行状态也是最常见的服务监控方式,在keepalived的vrrp_script模块中可以通过如下方式对本机的端口进行检测:
  vrrp_script check_httpd {
  script "&1
  if [ $? -eq 0 ];then
  MYSQL_STATUS=0
  else
  MYSQL_STATUS=1
  fi
  exit $MYSQL_STATUS
  这是一个最简单的实现MySQL服务状态检测的shell脚本,它通过登录MySQL数据库后执行查询操作来检测MySQL运行是否正常,如果检测正常,将返回状态码0,否则返回状态码1。其实,很多在nagios下运行的脚本,只要稍作修改,既可在这里使用,非常方便。

  





页: [1]
查看完整版本: Keepalived详解(四)