一、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