一個高可用服務,應該具備當服務發生故障,能夠第一時間做故障轉移,進而保證服務的可用性,同時還應該第一時間通知管理者,以便管理者能夠知道服務發生了轉移,這樣一來管理者也能第一時間去排查故障,讓故障的節點在很短的時間重新上線,避免下次故障導緻服務不可用;keepalived的故障通知郵件機制,是通過判斷目前節點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上就可以以[email protected]這個郵箱,向我們在腳本裡指定的接收者郵箱發送郵件了;配置郵件用戶端需要在對應的郵箱裡開啟POP3/SMTP,然後認證以後,它會告訴我們smtp-auth-password的一個字元串,如下所示;
提示:到此郵件用戶端就配置好了;
修改腳本中收件人的郵箱為一個網際網路郵箱
提示:修改郵件接收者以後,如果node01或node02上的keepalived發生故障轉移,它就會以我們配置的郵件用戶端指定的郵箱向我們指定的接收者發送郵件;
驗證:啟動node01上的keepalived,看看是否會在[email protected]郵箱中收到[email protected]的郵件呢?郵件内容是不是我們在腳本指定的内容呢?
提示:可以看到啟動node01上的keepalived以後,對應node01上的keepalived從stop狀态,變成了master狀态,并且也觸發了指定的腳本;
打開[email protected]郵箱,看看是否收到了郵件?
提示:可以看到在[email protected]的郵箱裡,收到了3封郵件,第一封是node01轉換為backup狀态發送到郵件,第二封死node02從master角色轉換為backup角色發送到郵件,第三封是node01從backup角色轉換為master發送的郵件;到此keepalived基于mail配置郵件用戶端向網際網路郵箱發送故障轉移通知郵件的配置就測試完畢了;
作者:Linux-1874
出處:https://www.cnblogs.com/qiuhom-1874/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.