前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高可用 - 07 Keepalived 通过 vrrp_script实现对集群资源的监控的几种方式

高可用 - 07 Keepalived 通过 vrrp_script实现对集群资源的监控的几种方式

作者头像
小小工匠
发布2023-03-07 21:36:46
7680
发布2023-03-07 21:36:46
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

文章目录

在这里插入图片描述
在这里插入图片描述

Pre

高可用 - 06 Keepalived基础功能应用实例用到了vrrp_script这个模块,此模块专门用于对集群中服务资源进行监控。与此模块一起使用的还有track_script模块,在此模块中可以引入监控脚本、命令组合、shell语句等,以实现对服务、端口多方面的监控

track_script模块主要用来调用“vrrp_script”模块使Keepalived执行对集群服务资源的监控。

此外,在vrrp_script模块中还可以定义对服务资源监控的时间间隔、权重等参数,通过vrrp_scripttrack_script组合,可以实现对集群资源的监控并改变集群优先级,进而实现Keepalived的主、备节点切换。

在这里插入图片描述
在这里插入图片描述

vrrp_script模块常见的几种监控机制

通过killall命令监控服务运行状态

这种监控集群服务的方式主要是通过killall命令实现的。

killall会发送一个信号给正在运行指定命令的进程。如果没指定信号名,则发送SIGTERM。SIGTERM也是信号名的一种,代号为15,它表示以正常方式结束程序的运行。其实killall可用的信号名有很多,可通过“killall -l”命令显示所有信号名列表,其中每个信号名代表对进程的不同执行方式。

代码语言:javascript
复制
[root@VM-24-3-centos ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[root@VM-24-3-centos ~]# killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
[root@VM-24-3-centos ~]#

例如,代号为9的信号表示将强制中断一个程序的运行。这里要用到的信号为0,代号为0的信号并不表示要关闭某个程序,而表示对程序(进程)的运行状态进行监控,如果发现进程关闭或其他异常,将返回状态码1,反之,如果发现进程运行正常,将返回状态码0。vrrp_script模块正是利用了killall命令的这个特性,变相地实现了对服务运行状态的监控。

看个例子

代码语言:javascript
复制
vrrp_script check_mysqld {
   script "killall -0 mysqld"
   interval 2
   }
track_script {
   check_mysqld
   }

在这个例子中,定义了一个服务监控模块check_mysqld,其采用的监控方式是通过“killall -0 mysqld”,其中“interval”选项用于设置检查的时间间隔,即2秒钟执行一次检测。

在mysql服务运行正常的情况下,通过killall命令检测的结果如下。

代码语言:javascript
复制
[root@keepalived-master ~]# killall -0 mysqld
[root@keepalived-master ~]# echo $?
0

这里通过“echo $?”方式显示了上个命令返回的状态码,mysql服务运行正常,因此返回的状态码为0,此时check_mysqld模块将返回服务检测正常的提示。

接着将mysql服务关闭,再次执行检测,结果如下。

代码语言:javascript
复制
[root@keepalived-master ~]#  killall -0 mysqld
mysqld: no process killed
[root@keepalived-master ~]# echo $?
1

由于mysql服务被关闭,因此返回的状态码为1,此时check_mysqld模块将返回服务检测失败的提示。然后根据vrrp_script模块中设定的“weight”值重新设置Keepalived主、备节点的优先级,进而引发主、备节点发生切换。

从这个过程可以看到,vrrp_script模块其实并不关注监控脚本或监控命令是如何实现的,它仅仅通过监控脚本的返回状态码来识别集群服务是否正常,如果返回的状态码为0,那么就认为服务正常,如果返回的状态码为1,则认为服务故障。明白了这个原理之后,在进行自定义监控脚本的时候,只需按照这个原则来编写即可。


检测端口运行状态

检测端口的运行状态,也是最常见的服务监控方式。在Keepalived的vrrp_script模块中可以通过如下方式对本机的端口进行检测。

代码语言:javascript
复制
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端口的状态检测。其中

  • “fall”选项表示检测到失败的最大次数。也就是说,如果请求失败两次,就认为此节点资源发生故障,将进行切换操作;
  • “rise”表示如果请求一次成功,就认为此节点资源恢复正常。

通过shell语句进行状态监控

在Keepalived的vrrp_script模块中甚至可以直接引用shell语句进行状态监控。

代码语言:javascript
复制
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模块支持的监控方式十分灵活。


通过脚本进行服务状态监控

这是最常见的监控方式, 这里只有0、1两种返回状态。下面给出一个示例。

代码语言:javascript
复制
vrrp_script chk_mysqld {
   script "/etc/keepalived/check_mysqld.sh"
   interval 2
   }
   track_script {
   chk_mysqld
   }

其中,check_mysqld.sh的内容如下。

代码语言:javascript
复制
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD='xxxxxx'

$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" > /dev/null 2>&1
if [ $? = 0 ] ;then
    MYSQL_STATUS=0
else
    MYSQL_STATUS=1
fi
    exit $MYSQL_STATUS

这个一个最简单地实现mysql服务状态检测的shell脚本,它通过登录mysql数据库后执行查询操作来检测mysql运行是否正常,如果检测正常,将返回状态码0,否则返回状态码1。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • Pre
  • vrrp_script模块常见的几种监控机制
    • 通过killall命令监控服务运行状态
      • 检测端口运行状态
        • 通过shell语句进行状态监控
          • 通过脚本进行服务状态监控
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档