Nginx+keepalived實現故障切換和郵件報警

拓撲圖如下:

圖片1.png

實現思路是:master的優先級爲100,backup的優先級爲99;在master上面配置一個檢測nginx監控狀態的腳本(backup不用配置),當發現master的nginx故障後將master的優先級減2爲98,使其backup優先級比master高,bakup獲取到vip對外提供服務;

master服務器上面的nginx服務恢復正常後,master的優先級不減2恢復原來的100,master獲取到vip對外提供服務

 

郵件報警實現思路:使用keepalived的狀態轉換執行腳本參數notify_master|notify_backup;當角色變爲master或backup時去調用發送郵件的腳本給指定用戶發送郵件通知

Keepalived_master配置文件:

---------------------------------------------------------------------------------------------

global_defs {
   router_id proxy-master             ##定義設備的名稱
}
vrrp_script chknginx {                  ##定義nginx健康檢查腳本
        script "/etc/keepalived/scripts/chk_nginx.sh"         ##健康檢查腳本存放路徑
        interval 3             ##每多少秒進行一次健康檢查
        weight -2             ##檢查失敗優先級減2
    }
vrrp_instance VI_1 {                 ##定義一個備份實例
    state MASTER                 ##此服務器爲master狀態
    interface ens33                 ##vip綁定到哪塊網卡
    virtual_router_id 1          ##熱備組id,同一個組id要一致
    priority 100                     ##當前設備的優先級
    advert_int 3                     ##備份組內多久進行一次健康檢查
    notify_master "/etc/keepalived/scripts/mail.sh Master" ##狀態爲master時發送郵件腳本
    notify_backup "/etc/keepalived/scripts/mail.sh Backup" ##狀態爲backup時發送郵件腳本
    authentication {                 ##實例間認證的信息
        auth_type PASS             ##認證的類型
        auth_pass putianhui      ##認證的密碼
    }
    virtual_ipaddress {                 ##設置vip的地址
        192.168.2.254 dev ens33 label ens33:1 ##設置vip並添加一個網卡別名
    }
    track_script {
        chknginx                     ##調用nginx健康檢查
    }


Keepalived_backup配置文件:

---------------------------------------------------------------------------------------------

global_defs {
   router_id proxy-slave ##定義此設備的名稱
}
vrrp_instance VI_1 {                     ##定義熱備組實例
    state BACKUP                     ##此服務器爲備份狀態
    interface ens33                 ##vip綁定到哪塊網卡
    virtual_router_id 1             ##熱備組id,同一個組id要一致
    priority 99                     ##當前設備的優先級
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass putianhui         ##認證的密碼,同一個組密碼要一致
    }
    virtual_ipaddress {
        192.168.2.254 dev ens33 label ens33:1
    }
}


上面用到的腳本代碼信息

chk_nginx.sh腳本信息

---------------------------------------------------------------------------------------------

#!/bin/bash
#判斷80端口是否存在,不存在就退出返回1
#返回1就是判定監控檢查失敗,0爲正常
LISTEN_PORT=80
STATUS=`/usr/bin/netstat -anpt | grep "$LISTEN_PORT" | grep -v grep |wc -l`
if [ "$STATUS" -eq 0 ];then
#   /usr/sbin/nginx
   sleep 5
   if [ "$STATUS" -eq 0 ];then
      exit 1
   else
      exit 0
   fi
else
   exit 0
fi


mail.sh發送郵件報警腳本信息

---------------------------------------------------------------------------------------------

#!/bin/bash
#使用mailx向指定用戶發送郵件
#$1爲keepalived狀態發生變化執行腳本傳進來的第一個參數
#[email protected]爲接收報警郵件的用戶郵箱地址
NAME="Proxy_master Server"
TIME=$(date +%F_%H:%M)
echo "${TIME}--${NAME} status is $1" | mail -s "${NAME} status is $1"  [email protected]


配置發送報警郵件:

1、  安裝sendmail或postfix (郵件傳送代理MTA),本教程使用sendmail軟件。

(標註:如果直接使用外部郵箱【qq企業郵和網易企業郵等】發送郵件可以不需要配置sendmail或postfix,直接把這兩個軟件關掉,直接跳到第3步:配置mail即可實現) 

[root@ssticentos65 ~]# yum -y install sendmail                #在線yum安裝sendmail
[root@ssticentos65 ~]# /etc/init.d/sendmail start             #啓動sendmail服務
[root@ssticentos65 ~]# /etc/init.d/sendmail status          #查看sendmail啓動情況
sendmail dead but subsys locked                            #sendmail進程鎖住,原因是postfix服務啓動導致sendmail服務進程鎖住,需要關閉postfix服務。
sm-client (pid  1759) is running...
[root@ssticentos65 ~]# /etc/init.d/postfix stop                #暫停postfix服務提示失敗,原因是postfix進程正在使用,需要使用kill命令殺掉postfix進程
Shutting down postfix:                                     [FAILED]
[root@ssticentos65 ~]# /etc/init.d/postfix status                #查看postfix服務可以查看到進程號
master (pid  1647) is running...
[root@ssticentos65 ~]# kill -9 1647                                     #殺掉postfix服務進程號
[root@ssticentos65 ~]# /etc/init.d/postfix status                #查看postfix狀態
master dead but pid file exists
[root@ssticentos65 ~]# chkconfig postfix off                      #設置postfix開機不啓動
[root@ssticentos65 ~]# /etc/init.d/sendmail stop               #暫停sendmail服務
Shutting down sm-client:                                   [  OK  ]
Shutting down sendmail:                                    [FAILED]
[root@ssticentos65 ~]# /etc/init.d/sendmail start                 #啓動sendmail服務
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]

2、安裝郵件發送工具mailx 。(郵件用戶代理MUA)

[root@ssticentos65 ~]# yum -y install mailx                     #在線安裝mailx

3、  配置mail

[root@ssticentos65 ~]# vim /etc/mail.rc
set  [email protected]    ##設置發件人的郵箱地址
set  smtp=smtp.exmail.qq.com   ##設置發件人的smtp地址
set smtp-auth-user="[email protected]" smtp-auth-password="XXXXXXX" ##設置發件的賬號和密碼(qq郵箱有可能會需要授權碼,密碼有時候不行)
set  smtp-auth=login     ##登錄,默認即可


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章