1. 程式人生 > 其它 >12 keepalived腦裂問題

12 keepalived腦裂問題

1.什麼是腦裂

由於某些原因,導致兩臺keepalived高可用伺服器在指定時間內,無法檢測到對方的心跳,各自取得資源及服務的所有權,而此時的兩臺高可用伺服器又都還活著。

2.腦裂的故障

1.網線鬆動,網路故障 2.伺服器硬體故障 3.伺服器之間開啟了防火牆

3.如何解決腦裂之nginx宕機

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

但是.....如果nginx宕機,會導致使用者請求失敗,但是keepalived沒有掛掉

[root@web02 ~]# while true;do curl -H"Host:game.test.com" 192.168.15.200;

解決方案

1.判斷埠

2.判斷程序的方式

通過程序的方式解決

1、lb01和lb02編寫指令碼

cd etc/keepalived

vim /etc/keepalived/check.sh

#!/bin/bash
# 1、判斷埠
# 2、通過程序的方式

ps -aux | grep [n]ginx

if [ $? -ne 0 ];then
    systemctl restart nginx
    
    sleep 3;
    
    ps -aux | grep [n]ginx
    
    if [ $? -ne 0 ];then
        systemctl stop keepalived 
    fi
    
fi

2.指令碼增加可執行許可權

cd /etc/keepalived/

chmod +x check.sh

3、修改keepalived配置檔案

vim /etc/keepalived/keepalived.conf

#全域性配置
global_defs {
    #身份識別(全域性唯一)
    router_id lb01
}

#每5秒執行一次指令碼,指令碼執行內容不能超過5秒,否則會中斷再次重新執行指令碼
vrrp_script check_web {
    # 指定指令碼路徑
    script "/etc/keepalived/check.sh"
    # 5秒鐘執行一次
    interval 5
            }

# 配置VRRP協議 vrrp_instance VI_1 { # 狀態,MASTER和BACKUP(這裡僅僅是一個標記,正真確認VIP的是權重) state BACKUP #開啟非搶佔式 nopreempt # 繫結網絡卡 interface eth0 # 虛擬路由標示,可以理解為分組 virtual_router_id 50 # 優先順序(數字越大,權重越大) priority 100 # 監測心跳間隔時間 advert_int 1 # 配置認證 authentication { # 認證型別 auth_type PASS # 認證的密碼 auth_pass 1111 } # 設定VIP virtual_ipaddress { # 虛擬的VIP地址 192.168.15.200 } #呼叫計劃的指令碼 track_script { check_web } }

4.測試

重啟或啟動nginx和keepalived

 systemctl start nginx

 systemctl start keepalived