1. 程式人生 > 實用技巧 >高可用服務之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配置郵件客戶端向網際網路郵箱傳送故障轉移通知郵件的配置就測試完畢了;