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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 高可用 - 07 Keepalived 通过 vrrp_script实现对集群资源的监控的几种方式

0bc7b7bcd1fc4752b429566093397057.png


Pre


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


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


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


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


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


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

killall会发送一个信号给正在运行指定命令的进程。如果没指定信号名,则发送SIGTERM。

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


[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命令的这个特性,变相地实现了对服务运行状态的监控。


看个例子

vrrp_script check_mysqld {
   script "killall -0 mysqld"
   interval 2
   }
track_script {
   check_mysqld
   }


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

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

[root@keepalived-master ~]# killall -0 mysqld
[root@keepalived-master ~]# echo $?
0


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

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

[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模块中可以通过如下方式对本机的端口进行检测。


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语句进行状态监控。

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两种返回状态。下面给出一个示例。

vrrp_script chk_mysqld {
   script "/etc/keepalived/check_mysqld.sh"
   interval 2
   }
   track_script {
   chk_mysqld
   }


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

#!/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。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
负载均衡 测试技术
LVS+KeepAlived构建高可用集群
LVS+KeepAlived构建高可用集群
105 0
|
机器学习/深度学习 编解码 运维
高可用方案组件,Keepalived详解
高可用方案组件,Keepalived详解
1045 0
|
监控 网络协议 数据安全/隐私保护
高可用 - 05 Keepalived配置(全局配置、VRRPD、LVS)
高可用 - 05 Keepalived配置(全局配置、VRRPD、LVS)
601 0
|
监控
高可用 - 06 Keepalived基础功能应用实例
高可用 - 06 Keepalived基础功能应用实例
137 0
|
负载均衡 Linux Docker
LVS+keepalived配置高可用架构和负载均衡机制(2)
LVS+keepalived配置高可用架构和负载均衡机制(2)
251 0
|
负载均衡 网络协议 前端开发
LVS+keepalived配置高可用架构和负载均衡机制(1)
LVS+keepalived配置高可用架构和负载均衡机制(1)
737 1
|
负载均衡 安全 网络安全
构建Keepalived高可用集群
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器.
349 0
|
负载均衡 网络协议 算法
keepalived 保证集群的高可用
keepalived 保证集群的高可用
keepalived 保证集群的高可用
|
Shell Docker 容器
KeepAlived集群高可用搭建
你的系统是否存在单点故障呢?那么这里我们基于Docker演示下基于KeepAlive的高可用配置。 简介 KeepAlived是一个用C语言编写的路由软件,它的主要目的是为了提供基于Linux服务器的负载均衡和高可用功能。