上一篇博客我們了解了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配置郵件客戶端向互聯網郵箱發送故障轉移通知郵件的配置就測試完畢了;