keepalived

Zncoro發表於2024-11-14

VRRP協議簡介

隨著Internet的迅猛發展,基於網路的應用逐漸增多。這就對網路的可靠性提出了越來越高的要求。斥資對所有網路裝置進行更新當然是一種很好的可靠性解決方案;但本著保護現有投資的角度考慮,可以採用廉價冗餘的思路,在可靠性和經濟性方面找到平衡點。

虛擬路由冗餘協議就是一種很好的解決方案。在該協議中,對共享多存取訪問介質(如乙太網)上終端IP裝置的預設閘道器(Default Gateway)進行冗餘備份,從而在其中一臺路由裝置當機時,備份路由裝置及時接管轉發工作,向使用者提供透明的切換,提高了網路服務質量。

協議概述

在基於TCP/IP協議的網路中,為了保證不直接物理連線的裝置之間的通訊,必須指定路由。目前常用的指定路由的方法有兩種:一種是透過路由協議(比如:內部路由協議RIP和OSPF)動態學習;另一種是靜態配置。在每一個終端都執行動態路由協議是不現實的,大多客戶端作業系統平臺都不支援動態路由協議,即使支援也受到管理開銷、收斂度、安全性等許多問題的限制。因此普遍採用對終端IP裝置靜態路由配置,一般是給終端裝置指定一個或者多個預設閘道器(Default Gateway)。靜態路由的方法簡化了網路管理的複雜度和減輕了終端裝置的通訊開銷,但是它仍然有一個缺點:如果作為預設閘道器的路由器損壞,所有使用該閘道器為下一跳主機的通訊必然要中斷。即便配置了多個預設閘道器,如不重新啟動終端裝置,也不能切換到新的閘道器。採用虛擬路由冗餘協議 (Virtual Router Redundancy Protocol,簡稱VRRP)可以很好的避免靜態指定閘道器的缺陷。

在VRRP協議中,有兩組重要的概念:VRRP路由器虛擬路由器主控路由器備份路由器

VRRP路由器是指執行VRRP的路由器,是物理實體;
虛擬路由器是指VRRP協議建立的,是邏輯概念。

一組VRRP路由器協同工作,共同構成一臺虛擬路由器。該虛擬路由器對外表現為一個具有唯一固定IP地址和MAC地址的邏輯路由器。

處於同一個VRRP組中的路由器具有兩種互斥的角色:主控路由器備份路由器。一個VRRP組中有且只有一臺處於主控角色的路由器,可以有一個或者多個處於備份角色的路由器。

VRRP協議使用選擇策略從路由器組中選出一臺作為主控,負責ARP相應和轉發IP資料包,組中的其它路由器作為備份的角色處於待命狀態。當由於某種原因主控路由器發生故障時,備份路由器能在幾秒鐘的時延後升級為主路由器。由於此切換非常迅速而且不用改變IP地址和MAC地址,故對終端使用者系統是透明的。

工作原理

一個VRRP路由器有唯一的標識:VRID,範圍為0—255。該路由器對外表現為唯一的虛擬MAC地址,地址的格式為00-00-5E-00-01-[VRID]

主控路由器負責對ARP請求用該MAC地址做應答。這樣,無論如何切換,保證給終端裝置的是唯一一致的IP和MAC地址,減少了切換對終端裝置的影響。

VRRP控制報文只有一種:VRRP通告(advertisement)。它使用IP多播資料包進行封裝,組地址為224.0.0.18釋出範圍只限於同一區域網內,這保證了VRID在不同網路中可以重複使用。為了減少網路頻寬消耗,只有主控路由器才可以週期性的傳送VRRP通告報文。備份路由器在連續三個通告間隔內收不到VRRP或收到優先順序為0的通告後啟動新的一輪VRRP選舉

主路由器選舉

在VRRP路由器組中,按優先順序選舉主控路由器,VRRP協議中優先順序範圍是0—255

若VRRP路由器的IP地址和虛擬路由器的介面IP地址相同,則稱該虛擬路由器作VRRP組中的IP地址所有者;IP地址所有者自動具有最高優先順序:255。優先順序0一般用在IP地址所有者主動放棄主控者角色時使用。可配置的優先順序範圍為1—254

優先順序的配置原則可以依據鏈路的速度和成本、路由器效能和可靠性以及其它管理策略設定。主控路由器的選舉中,高優先順序的虛擬路由器獲勝,因此,如果在VRRP組中有IP地址所有者,則它總是作為主控路由的角色出現。

對於相同優先順序的候選路由器,按照IP地址大小順序選舉

VRRP還提供了優先順序搶佔策略,如果配置了該策略,高優先順序的備份路由器便會剝奪當前低優先順序的主控路由器而成為新的主控路由器。

安全認證

為了保證VRRP協議的安全性,提供了兩種安全認證措施:明文認證IP頭認證

明文認證方式要求:在加入一個VRRP路由器組時,必須同時提供相同的VRID和明文密碼。適合於避免在區域網內的配置錯誤,但不能防止透過網路監聽方式獲得密碼。

IP頭認證的方式提供了更高的安全性,能夠防止報文重放和修改等攻擊。

**keepalived的腦裂 **

1、什麼是腦裂

在高可用系統中,作為主備節點的兩臺伺服器,可能因為一些比如說網路斷開,兩臺機器的心跳檢測會認為主掛了,但是主其實是正常的,只是網路斷開了,心跳檢測沒法檢查到主還活著,由於主從之間失去了聯絡,都以為是對方發生了故障,所以兩個節點都會主動的搶佔資源,爭搶應用服務,爭搶VIP,這樣就發發生一些嚴重的後果,或者資源被瓜分了、或者是兩邊的節點都啟動不起來了、或者是都起來了,但是同時讀寫共享儲存,導致資料損壞。

2、腦裂產生的原因

  • 高可用伺服器對之間心跳線鏈路發生故障,導致無法正常通訊
  1. 因心跳線斷開(包括網線斷裂、水晶頭鬆動等物理原因)
  2. 因網路卡及相關驅動壞了,ip配置及衝突問題(網路卡直連)
  3. 因心跳線間連線的裝置故障(網路卡及交換機)
  4. 因仲裁的機器出問題(採用仲裁的方案)
  • 高可用伺服器上開啟了 iptables防火牆阻擋了心跳訊息傳輸
  • 高可用伺服器上心跳網路卡地址等資訊配置不正確,導致傳送心跳失敗
  • 其他服務配置不當等原因,如心跳方式不同,心跳廣插衝突、軟體Bug等

3、腦裂常見的解決方案

在實際生產環境中,我們可以從以下幾個方面來防止裂腦問題的發生:

  • 同時使用序列電纜和乙太網電纜連線,同時用兩條心跳線路,這樣一條線路壞了,另一個還是好的,依然能傳送心跳訊息
  • 當檢測到裂腦時強行關閉一個心跳節點(這個功能需特殊裝置支援,如Stonith、feyce)。相當於備節點接收不到心跳消患,透過單獨的線路傳送關機命令關閉主節點的電源
  • 做好對裂腦的監控報警(如郵件及手機簡訊等或值班).在問題發生時人為第一時間介入仲裁,降低損失。例如,百度的監控報警短倍就有上行和下行的區別。報警訊息傳送到管理員手機上,管理員可以透過手機回覆對應數字或簡單的字串操作返回給伺服器.讓伺服器根據指令自動處理相應故障,這樣解決故障的時間更短.

當然,在實施高可用方案時,要根據業務實際需求確定是否能容忍這樣的損失。對於一般的網站常規業務。這個損失是可容忍的。

相關文章