高可用keepalived與nginx
阿新 • • 發佈:2020-09-11
Nginx預設監聽在所有的IP地址上,VIP會飄到一臺節點上,相當於那臺nginx多了VIP這麼一個網絡卡,所以可以訪問到nginx所在機器
但是.....如果nginx宕機,會導致使用者請求失敗,但是keepalived沒有掛掉不會進行切換,所以需要編寫一個指令碼檢測Nginx的存活狀態,如果不存活則kill掉keepalived
[root@lb01 ~]# vim check_web.sh #!/bin/sh nginxpid=$(ps -C nginx --no-header|wc -l) #1.判斷Nginx是否存活,如果不存活則嘗試啟動Nginx if[ $nginxpid -eq 0 ];then systemctl start nginx sleep 3 #2.等待3秒後再次獲取一次Nginx狀態 nginxpid=$(ps -C nginx --no-header|wc -l) #3.再次進行判斷, 如Nginx還不存活則停止Keepalived,讓地址進行漂移,並退出指令碼 if [ $nginxpid -eq 0 ];then systemctl stop keepalived fi fi #給指令碼增加執行許可權 [root@lb01 ~]# chmod +x /root/check_web.sh
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
#每5秒執行一次指令碼,指令碼執行內容不能超過5秒,否則會中斷再次重新執行指令碼
vrrp_script check_web {
script "/root/check_web.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
#呼叫並執行指令碼
track_script {
check_web
}
}
#在Master的keepalived中呼叫指令碼,搶佔式,僅需在master配置即可。(注意,如果配置為非搶佔式,那麼需要兩臺伺服器都使用該指令碼)