高可用服务之Keepalived邮件通知配置
上一篇博客我们了解了keepalived的架构以及安装、VIP的配置和高可用相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13634755.html;今天我们来聊一下keepalived的邮件通知配置;
一个高可用服务,应该具备当服务发生故障,能够第一时间做故障转移,从而保证服务的可用性,同时还应该第一时间通知管理员,以便管理员能够知道服务发生了转移,这样一来管理员也能第一时间去排查故障,让故障的节点在很短的时间重新上线,避免下次故障导致服务不可用;keepalived的故障通知邮件机制,是通过判断当前节点keepalived的角色来触发邮件通知;
keepalived的邮件通知配置
notification_email {...}:该指令用于应用一段邮件接收者的一个配置段,用大括号括起来,里面可以配置多个邮件接收者;
notification_email_from:该指令用于指定邮件发出者的邮箱;
smtp_server:该指令用于指定邮件服务器地址;
smtp_connect_timeout:该指令用于指定连接邮件服务器的超时时长,默认30秒;
notify_master:配置节点成为master角色的触发的动作;通常为执行一个脚本;
notify_backup:配置节点角色转换为backup触发的动作;
notify_fault:配置节点为失败状态触发的动作;
示例:配置node01在发生故障转移时的邮件接收者为本机的root用户,邮件服务器地址为127.0.0.1,邮件发出者为node01_keepalived@localhost
1、编写邮件通知脚本
[root@node01 keepalived]# cat notify.sh #!/bin/bash # contact='root@localhost' notify() { local mailsubject="$(hostname) to be $1, vip floating" local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1" echo "$mailbody" | mail -s "$mailsubject" $contact } case $1 in master) notify master ;; backup) notify backup ;; fault) notify fault ;; *) echo "Usage: $(basename $0) {master|backup|fault}" exit 1 ;; esac [root@node01 keepalived]#
提示:该脚本主要实现了,根据传递不同参数来发送不同内容的邮件;
给脚本加上执行权限,并把脚本从node01复制到node02上
安装mail命令
[root@node01 keepalived]# mail -bash: mail: command not found [root@node01 keepalived]# [root@node01 keepalived]# yum install mailx Loaded plugins: fastestmirror base | 3.6 kB 00:00:00 docker-ce-stable | 3.5 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (2/2): epel/x86_64/primary_db | 6.9 MB 00:00:01 Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package mailx.x86_64 0:12.5-19.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ===================================================================================================== Package Arch Version Repository Size ===================================================================================================== Installing: mailx x86_64 12.5-19.el7 base 245 k Transaction Summary ===================================================================================================== Install 1 Package Total download size: 245 k Installed size: 466 k Is this ok [y/d/N]: y Downloading packages: mailx-12.5-19.el7.x86_64.rpm | 245 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : mailx-12.5-19.el7.x86_64 1/1 Verifying : mailx-12.5-19.el7.x86_64 1/1 Installed: mailx.x86_64 0:12.5-19.el7 Complete! [root@node01 keepalived]#
提示:在node02也需要安装mailx这个程序包,让其能够通过mail来发送邮件;
验证:手动给脚本传递master|backup参数,测试在本机是否能够发送邮件?本机root用户能够收到邮件?
提示:可以看到我们给脚本一个master参数,它会以邮件的方式通知给本机的root用户;到此邮件脚本就准备好了;
配置keepalived邮件通知
配置keepalived邮件的接收者和发送者
提示:以上配置表示当发生故障转移,邮件通知接收者为root@localhost,发送者为node01_keepalived@localhost,邮件服务器地址为127.0.0.1,超时时长为30秒;
配置keepalived发生故障转移时,触发执行的脚本
提示:以上配置表示当vrrp VI_1发生故障转移是,如果从master角色转变为backup角色时,就会触发notify_backup指令说指定的脚本和参数发送邮件;如果从backup角色转变为master角色就会触发notify_master指令所指定的脚本和参数来发送邮件,如果当前节点从master或backup角色转变为fault状态时,它会触发notify_fault指令说指定的脚本和参数来发送邮件;
验证:启动node01的keepalived,看看是否会发送邮件?
提示:从keepalived的状态信息中可以看到已经触发了脚本执行;
打开root用户的邮箱,看看是否有故障转移时的邮件呢?
提示:可以看到的确有邮件收到,告诉我们说node01从backup变为了master;
在node02上加上邮件通知配置
启动node02上的keepalived
停掉node01上的keepalived,然后在node02上看看是否会收到邮件?
提示:可以看到当node01节点服务故障时,它会把vip转移给node02,并且node02会从backup角色转变为master角色,从而触发notify_master指令所指定的脚本和参数来发送邮件;
示例:配置keepalived在发生故障转移时向指定的互联网邮箱发送邮件
配置邮件客户端
提示:配置以上配置以后,在node01和node02上就可以以linux-1874@qq.com这个邮箱,向我们在脚本里指定的接收者邮箱发送邮件了;配置邮件客户端需要在对应的邮箱里开启POP3/SMTP,然后认证以后,它会告诉我们smtp-auth-password的一个字符串,如下所示;
提示:到此邮件客户端就配置好了;
修改脚本中收件人的邮箱为一个互联网邮箱
提示:修改邮件接收者以后,如果node01或node02上的keepalived发生故障转移,它就会以我们配置的邮件客户端指定的邮箱向我们指定的接收者发送邮件;
验证:启动node01上的keepalived,看看是否会在linux_test01@126.com邮箱中收到linux-1874@qq.com的邮件呢?邮件内容是不是我们在脚本指定的内容呢?
提示:可以看到启动node01上的keepalived以后,对应node01上的keepalived从stop状态,变成了master状态,并且也触发了指定的脚本;
打开linux_test01@123.com邮箱,看看是否收到了邮件?
提示:可以看到在linux_test01@126.com的邮箱里,收到了3封邮件,第一封是node01转换为backup状态发送到邮件,第二封死node02从master角色转换为backup角色发送到邮件,第三封是node01从backup角色转换为master发送的邮件;到此keepalived基于mail配置邮件客户端向互联网邮箱发送故障转移通知邮件的配置就测试完毕了;