1. 程式人生 > >keepalived 功能 、原理、腦裂

keepalived 功能 、原理、腦裂


  1. 簡介:

    1. keepalived設計之初是專為LVS負載均衡軟體設計的,用來管理和監控LVS集群系統中的各個服務節點狀態,,後來加入實現高可用的VRRP功能。通過vrrp協議實現高可用功能的

  2. 常用的功能

    1. 管理LVS負載均衡軟體

    2. 對LVS叢集節點健康檢查功能

    3. 系統網路服務的高可用功能

  3. 原理:keepalived是通過vrrp來實現伺服器之間的故障切換轉移的,keepalived在正常服務時,主master節點會不斷的向備backup節點發送心跳資訊(多播的形式),告訴備節點自己還活著,當主節點發生故障時,就無法向備節點發送心跳資訊,當備節點無法接收到主節點的心跳資訊時,呼叫自身的接管程式,接管主節點的ip服務資源,當主節點恢復時,備節點會釋放主節點故障時自身接管的ip服務資源,回覆到備用角色。

  4. vrrp:虛擬路由冗餘協議;主要是解決靜態路由的單點故障問題,其是通過競選機制來確定將路由的任務交給某臺vrrp路由器的。

    1. vrrp是通過ip多播的方式實現高可用之間的通訊;

    2. vrrp通過加密協議對資料進行加密,keepalived使用的是明文方式配置認證型別和密碼

    3. vrrp在正常工作時,是主節點發包,備節點接包,當備節點沒有接受到包時,通過競選,啟動接管機制,接管主節點的資源,一般而言,備節點可以有多個,在使用keepalived時,一般是一主一備。

  5. 腦裂:

    1. 何為腦裂:

      1. 由於某種原因,導致兩臺高可用伺服器在指定是時間內,無法檢測到對方的心跳資訊,各自取得資源及服務特權,此時兩臺高可用伺服器都還正常執行,導致ip或者服務在兩端同時存在而發生衝突。

    2. 原因

      1. 高可用伺服器之間心跳線鏈路故障

        1. 心跳線壞了

        2. 網絡卡及相關驅動壞了

        3. 心跳線間連線裝置故障

      2. 開啟iptables,阻擋了心跳資訊的傳輸

      3. 心跳網絡卡地址等資訊不正確,導致傳送心跳資訊失敗

    3. 預防:

      1. 同時使用序列電纜和乙太網電纜連線,同時使用兩條心跳線

      2. 做好監控報警

      3. 當有腦裂時,強行關閉一個心跳節點

  6. 有關網路高可用的配置(單例項主備):

    1. 採用yum安裝,配置檔案為/etc/keepalived/keepalived.conf

    2. global_defs {              							global_defs {                                                      
         notification_email { 									    notification_email {
           
      [email protected]
            [email protected]      [email protected]        [email protected]      [email protected]        [email protected]    }                                       }    notification_email_from [email protected]  notification_email_from [email protected]    smtp_server 192.168.200.1         smtp_server 192.168.200.1    smtp_connect_timeout 30        smtp_connect_timeout 30     router_id LVS_DEVEL       router_id LVS_DEVEL1    vrrp_skip_check_adv_addr      vrrp_skip_check_adv_addr    #vrrp_strict        #vrrp_strict    vrrp_garp_interval 0       vrrp_garp_interval 0    vrrp_gna_interval 0       vrrp_gna_interval 0 } }                                                                       vrrp_instance VI_1 {                             vrrp_instance VI_1 {         state MASTER                                 state  BACKUP                                          interface ens33                                interface ens33                               virtual_router_id 51                             virtual_router_id 51     priority 100                                priority 90     advert_int 1                                 advert_int 1     authentication {                               authentication {         auth_type PASS                                  auth_type PASS         auth_pass 1111                                  auth_pass 1111     }                                       }     virtual_ipaddress {                              virtual_ipaddress {         10.0.0.3/24 dev ens33 label ens33:0                         10.0.0.3/24 dev ens33 label ens33:0     }                                        } }                                                 }
    3. router_id LVS_DEVEL  router_id LVS_DEVEL1
    4. state MASTER            state  BACKUP
    5. priority 100            priority 90
    6.  #vrrp_strict‘’
    7. systemctl start keepalived

注意: c  d  e注意區別,f改行要註釋掉,原配置檔案中沒有註釋,不註釋可能存在問題。這樣就可以實現高可用了。