Keepalived + Nginx高可用配置

一、nginx狀態檢測腳本

新建腳本:vi /etc/keepalived/nginx_check.sh

給腳本執行權限:

cd /etc/keepalived

chmod 755 nginx_check.sh

腳本範例1:

#!/bin/bash
A=`ps -C nginx --no-heading|wc -l`
if [ $A -eq 0 ];then
      pkill keepalived
fi

#檢查到nginx關閉,則自動關掉keepalived

 腳本範例2:

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    systemctl start nginx
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl kill keepalived 
    fi
fi
#檢查nginx的狀態,0代表已經停止了。運行狀態一般是2;
#如果nginx停止了,則先啓動nginx。過兩秒再檢查一下nginx的狀態;
#如果還是停止的,則關閉keepalived。VIP將自動切到備機上

腳本範例3 :

#!/bin/bash
counter=$(curl -s 192.168.70.129:8000) 
if [ "${counter}" != "11" ]; then
        systemctl kill keepalived
fi
#在nginx上部署的應用公開一個接口地址,此地址只返回”11“用於做心跳檢測
#如果訪問這個接口返回的不是11說明系統掛了,關閉keepalived

腳本範例4: 

#!/bin/bash
counter=$(curl -s 192.168.70.129:8000) 
if [ "${counter}" != "11" ]; then
    	systemctl start nginx
    sleep 2
    counter=$(curl -s 192.168.70.129:8000)
    if [ "${counter}" != "11" ]; then
        systemctl kill keepalived
    fi
fi
#在nginx上部署的應用公開一個接口地址,此地址只返回”11“用於做心跳檢測
#如果訪問此接口地址返回的不是”11“,則先啓動nginx。過兩秒再檢查一下接口地址的返回值;
#如果返回的還不是”11“,則關閉keepalived。VIP將自動切到備機上

啓動後可以看到執行腳本成功(或查看日誌:tail -n 30 /var/log/messages):

二、keepalived配置

編輯keepalived配置文件:vi /etc/keepalived/keepalived.conf

配置文件參數說明:https://blog.csdn.net/qq_26900081/article/details/105088270

主(MASTER)配置:


! Configuration File for keepalived

global_defs {
}
vrrp_script nginx_check 
{
    script "/etc/keepalived/nginx_check.sh"
    interval 3
    weight -2
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.70.99/24
    }
    track_script {
        nginx_check
    }
}

備(BACKUP)配置(如果有兩備,排名高的備機也要檢測nginx) :

! Configuration File for keepalived

global_defs {
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.70.99/24
    }
    
    #郵件通知
    notify_master "/etc/keepalived/notify.sh master"#當前節點狀態變爲主(master)的時候調用
    notify_backup "/etc/keepalived/notify.sh backup"#當前節點狀態變爲備(backup)的時候調用
    notify_fault "/etc/keepalived/notify.sh fault"#當前節點失效的時候調用
}

三、郵件腳本

需要安裝mail郵件服務工具,並配置好。

新建腳本:vi /etc/keepalived/notify.sh

給腳本執行權限:

cd /etc/keepalived

chmod 755 notify.sh

#!/bin/bash
contact='[email protected]' #郵件地址
mail_notify() {
	mailheader="$(hostname) to be $1,vip飄移"
	mailbody="$(date +'%F %T'): vrrp transition,$(hostname) changed to be $1"
	echo "$mailbody" | mail -s "$mailheader" $contact
}
case $1 in
master)
	mail_notify master
	;;
backup)
	mail_notify backup
	;;
fault)
	mail_notify fault
	;;
*)
	echo "Usage: $(basename $0) {master|backup|fault}"
	exit 1
	;;
esac

 

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