1. 程式人生 > 實用技巧 >keepalived+nginx高可用配置

keepalived+nginx高可用配置

首先兩臺伺服器都安裝keepalived

yum install keepalived

修改keepalived配置檔案

vim /etc/keepalived/keepalived.conf

主伺服器配置檔案修改為

vrrp_instance VI_1 {         #定義VRRP熱備例項
    state MASTER             #熱備狀態,MASTER表示主伺服器
    interface eth0           #承載VIP地址的物理介面
    virtual_router_id 1      #虛擬路由ID號,每個熱備組保持一致
    priority 
100 #優先順序,數值越大優先順序越高 advert_int 1 #通告間隔秒數 authentication { #認證資訊,每個熱備組保持一致 auth_type PASS #認證型別 auth_pass 123456 #密碼字串 } virtual_ipaddress { #指定VIP漂移地址,可以寫多個 192.168.10.20 } }

從伺服器配置檔案修改為

vrrp_instance VI_1 {
    state BACKUP  #改這裡
    
interface eth0 virtual_router_id 1 priority 10 #改這裡,這裡要改成比主伺服器值要小 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.10.20 } }

兩臺都開啟keepalived服務

/bin/systemctl stop keepalived.service

以下是檢查是否成功了,執行

ip a

如果成功了,主伺服器有虛似ip:192.168.10.20,從伺服器沒有虛擬ip。把主伺服器keepalived關閉掉,從伺服器有虛擬ip了,主伺服器沒有了,如果主伺服器重新啟動,主服器這時又有虛擬ip了,從伺服器沒有虛擬ip了

注意:

如果出現了主從伺服器都有虛擬ip,那麼一般是腦裂了,

比如阿里雲的伺服器都會有這情況,vrrp沒有開放,不支援廣播和組播。需要將配置檔案中的通訊方式修改為單播通訊。

以下例子主伺服器內網ip為:172.18.40.183,從伺服器內網ip為:172.18.40.182,虛擬ip定為:172.18.40.185

主伺服器配置檔案改為:

vrrp_script chk_nginx {               #檢測nginx的執行狀態
 script "/etc/keepalived/nginx_check.sh"            #指令碼路徑
 interval 2             #探測間隔時間
 weight -20            #如果條件滿足,權重-20
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    unicast_src_ip 172.18.40.183
    unicast_peer {
                  172.18.40.182   #對端IP地址,此地址一定不能忘記
                }
    advert_int 1
        priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {                                #將track_script塊加入instance配置塊
        chk_nginx                                     #執行Nginx檢測
    }
    virtual_ipaddress {
        172.18.40.185/32
    }
}

從伺服器配置改為:

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    unicast_src_ip 172.18.40.182
   unicast_peer {
                  172.18.40.183   #對端IP地址,此地址一定不能忘記
                }
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.18.40.185/32
    }
}

這裡增加了nginx檢查

vim /etc/keepalived/nginx_check.sh

sh指令碼的內容為:

#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi

給它附執行許可權:

chmod +x /etc/keepalived/nginx_check.sh

單通道配置檔案最關鍵設定的兩個引數為:

unicast_src_ip,
unicast_peer
檢試下是否成功
主伺服器圖

從伺服器圖

當主伺服器nginx掛掉之後,sh指令碼會執行殺掉keepalived命令,從而虛擬ip為飄到從伺服器上面。

特別說明一下,如果是阿里雲伺服器,可以用阿里雲自帶的:

HaVip+keepalived方案來實現高可用