1. 程式人生 > 實用技巧 >高可用keepalived與nginx

高可用keepalived與nginx

Nginx預設監聽在所有的IP地址上,VIP會飄到一臺節點上,相當於那臺nginx多了VIP這麼一個網絡卡,所以可以訪問到nginx所在機器

但是.....如果nginx宕機,會導致使用者請求失敗,但是keepalived沒有掛掉不會進行切換,所以需要編寫一個指令碼檢測Nginx的存活狀態,如果不存活則kill掉keepalived

1.nginx故障切換指令碼

[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

2.呼叫指令碼

[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配置即可。(注意,如果配置為非搶佔式,那麼需要兩臺伺服器都使用該指令碼)