上一篇博客咱們瞭解了keepalived的架構以及安裝、VIP的配置和高可用相關配置,回顧請參考http://www.javashuo.com/article/p-hjqivgso-no.html;今天咱們來聊一下keepalived的郵件通知配置;html
一個高可用服務,應該具有當服務發生故障,可以第一時間作故障轉移,從而保證服務的可用性,同時還應該第一時間通知管理員,以便管理員可以知道服務發生了轉移,這樣一來管理員也能第一時間去排查故障,讓故障的節點在很短的時間從新上線,避免下次故障致使服務不可用;keepalived的故障通知郵件機制,是經過判斷當前節點keepalived的角色來觸發郵件通知;node
keepalived的郵件通知配置linux
notification_email {...}:該指令用於應用一段郵件接收者的一個配置段,用大括號括起來,裏面能夠配置多個郵件接收者;docker
notification_email_from:該指令用於指定郵件發出者的郵箱;bash
smtp_server:該指令用於指定郵件服務器地址;服務器
smtp_connect_timeout:該指令用於指定鏈接郵件服務器的超時時長,默認30秒;架構
notify_master:配置節點成爲master角色的觸發的動做;一般爲執行一個腳本;測試
notify_backup:配置節點角色轉換爲backup觸發的動做;this
notify_fault:配置節點爲失敗狀態觸發的動做;server
示例:配置node01在發生故障轉移時的郵件接收者爲本機的root用戶,郵件服務器地址爲127.0.0.1,郵件發出者爲node01_keepalived@localhost
一、編寫郵件通知腳本
[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配置郵件客戶端向互聯網郵箱發送故障轉移通知郵件的配置就測試完畢了;