理解 OpenStack 高可用(2):虛擬路由冗余協議

1. 基礎知識

1.1 虛擬路由冗余協議 - VRRP

1.1.1 概念

路由器是整個網絡的核心。一個網絡內的所有主機往往都設置一條缺省路由,這樣,主機發出的目的地址不在本網段的報文將被通過缺省路由發往路由器,從而實現了主機與外部網絡的通信。在通常只使用單路由器來承擔缺省路由的情況下,當該路由器壞掉后,本網段內所有以它為缺省路由下一跳的主機將斷掉與外部的通信。可見,在使用單路由器的情況下,如果路由器發生致命性的故障,將導致本地網絡的癱瘓,如果是骨干路由器,影響的范圍將更大,所造成的損失也是難以估計的。因此,對路由器采用熱備份是提高網絡可靠性的必然選擇。

VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議)是一種可以解決這種問題的容錯協議,其協議文本在 這里 。 它保證當主機的下一跳路由器出現故障時,由另一臺路由器來代替出現故障的路由器進行工作,從而保持網絡通信的連續性和可靠性。一組實現了該協議的路由器向局域網內的主句提供具有高可用性(HA)的虛擬路由器。

1.1.2 VRRP 怎么解決問題

VRRP 將一組物理路由器組織成一個虛擬路由器,稱之為一個備份組。 這個虛擬的路由器擁有自己的 IP 地址,局域網內的機器使用該 IP 地址作為其缺省路由器的地址。

以上圖為例,

  • Device A 和 B 組成一個 VRRP 組,它的虛擬 IP(VIP) 為 10.1.1.10/24。其中,通過選舉機制,A 是 Master Router,B 是 Backup Router。一個 VRRP 組內可以由多個設備,但是只有一個是 Master 設備。
  • Device A 和 B 可以由自己的 IP 地址,VIP 可以和其中的某 IP 相同,也可以不同。
  • 當前,Router A 作為 Master router 向局域網內的機器提供路由服務。
  • 當前,Router B 作為 Backup router。它的任務是周期性地接受 A 發出的心跳。在規定的時間段內,如果都沒有收到 A 發出的心跳,則啟動一個選舉過程,重新選出 Master。
  • 局域網內的機器將虛擬路由器當作默認網關,它們僅僅知道這個虛擬路由器的IP 地址 10.1.1.10,而并不知道具體的 Master 路由器的 IP 地址以及 Backup 路由器的IP 地址。它們將自己的缺省路由下一跳地址設置為10.1.1.10。于是,網絡內的主機就通過這個虛擬的路由器來與其它網絡進行通信。如果 Master 路由器壞掉,Backup 路由器將會通過選舉策略選出一個新的 Master 路由器,繼續向網絡內的主機提供路由服務。從而實現網絡內的主機不間斷地與外部網絡進行通信。

可以看出:

  • VRRP 是一種路由器選擇協議,它可以把一個虛擬路由器的責任動態分配到 VRRP 組內的多個路由器中的一臺。控制虛擬路由器 IP 地址的 VRRP 路由器稱為主路由器,它負責轉發數據包到這些虛擬 IP 地址。一旦主路由器不可用,這種選擇過程就提供了動態的故障轉移機制,這就虛擬允許路由器的 IP 地址可以作為終端主機的默認第一跳路由器。使用 VRRP 的好處是有更高的默認路徑的可用性而無需在每個終端主機上配置動態路由或路由發現協議。
  • VRRP 包封裝在 IP 包中發送,用于 VRRP 組內設備的互相通信比如保持心跳等。它只定義了一種報文即 VRRP 報文,這是一種組播報文,由 Master 路由器定時發出來通告組內的路由器它的存在。
  • VRRP 中定義了三種狀態模型,初始狀態 Initialize,活動狀態 Master 和備份狀態 Backup,其中只有活動狀態的交換機可以為到虛擬IP地址的的轉發請求提供服務。

幾個概念:

  • VIP:VRRP 使用兩種類型的 VIP:一種 VIP 參與 VRRP 通告,使用配置項 virtual_ipaddress 指定;另一種 VIP 不參與 VRRP 通告,使用配置項 virtual_ipaddress_excluded 指定。
  • 優先級(Priority):虛擬路由器中VRRP設備的優先級。虛擬路由器根據優先級選舉出Master設備和Backup設備。
  • 搶占模式:在搶占模式下,如果 Backup 設備的優先級比當前 Master 設備的優先級高,則主動將自己切換成 Master。
  • 非搶占模式:在非搶占模式下,只要 Master 設備沒有出現故障,Backup 設備即使隨后被配置了更高的優先級也不會成為Master設備。
  • VRRP協議報文:封裝在IP報文中,發送到分配給 VRRP 的 IP 組播地址。在IP報文頭中,源地址為發送報文接口的主 IP 地址(不是虛擬IP地址),目的地址是224.0.0.18,TTL是255,協議號是112。目前,VRRP協議包括兩個版本:VRRPv2和VRRPv3,VRRPv2僅適用于IPv4網路,VRRPv3適用于IPv4和IPv6兩種網絡。
  • VRRP 節點三種狀態:初始狀態(Initialize)、活動狀態(Master)、備份狀態(Backup)。其中,只有處于Master狀態的設備才可以轉發那些發送到虛擬IP地址的報文。

Master 路由器的選舉過程:

VRRP根據優先級來確定虛擬路由器中每臺路由器的角色(Master 路由器或 Backup 路由器)。優先級越高,則越有可能成為 Master 路由器。初始創建的 VRRP 交換機工作在 Initialize 狀態,收到接口 Up 的消息后,若此路由器的優先級小于255,則會先切換至 Backup 狀態,待 Master_Down_Interval 定時器超時后再切換至 Master 狀態。首先切換至 Master 狀態的 VRRP 路由器通過 VRRP 通告報文的交互獲知虛擬交換機中其他成員的優先級,進行Master的選舉:

  • 如果 VRRP 報文中 Master 路由器的優先級高于或等于自己的優先級,則 Backup 路由器保持 Backup 狀態;
  • 如果 VRRP 報文中 Master 路由器的優先級低于自己的優先級,采用搶占方式的 Backup 交換機將切換至 Master 狀態,采用非搶占方式的Backup 路由器仍保持Backup狀態。
  • 如果多個 VRRP 路由器同時切換到 Master 狀態,通過 VRRP 通告報文的交互進行協商后,優先級較低的 VRRP 路由器將切換成 Backup 狀態,優先級最高的 VRRP 路由器成為最終的 Master設備;優先級相同時,VRRP 路由器上 VRRP 備份組所在接口主 IP 地址較大的成為 Master 設備。
  • 如果創建的VRRP 路由器為IP地址擁有者,收到接口 Up 的消息后,將會直接切換至Master狀態。

Master交換機狀態的通告:

  • Master 路由器周期性地發送 VRRP 通告報文,在 VRRP 備份組中公布其配置信息(優先級等)和工作狀況。Backup 路由器通過接收到 VRRP 報文的情況來判斷Master 路由器是否工作正常。
    • 當 Master 路由器主動放棄 Master 地位(如 Master 路由器退出備份組)時,會發送優先級為0的通告報文,用來使 Backup 路由器快速切換成 Master 路由器,而不用等到 Master_Down_Interval 定時器超時。
    • 當 Master 路由器發生網絡故障而不能發送通告報文的時候,Backup 路由器并不能立即知道其工作狀況。等到 Master_Down_Interval 定時器超時后,才會認為 Master 路由器無法正常工作,從而將狀態切換為 Master。
    </li> </ul>

    目前,主流的硬件路由器設備都實現了該協議: 這篇文章 介紹了 Broadcom 路由器上 VRRP 的配置, 這篇文章 介紹了一個 Cisco 路由器 VRRP 的配置例子, 這篇文章 是華為的 VRRP 白皮書。

    它的優勢:

    • 操作簡單:它不需要改變組網情況,也不需要在主機上做任何配置,只需要在相關路由器上配置極少的幾條命令,就能實現下一跳網關的備份,并且不會給主機帶來任何負擔。和其他方法比較起來,VRRP更加能夠滿足用戶的需求。
    • 簡化網絡管理:在具有多播或廣播能力的局域網(如以太網)中,借助 VRRP 能在某臺設備出現故障時仍然提供高可靠的缺省鏈路,有效避免單一鏈路發生故障后網絡中斷的問題,而無需修改動態路由協議、路由發現協議等配置信息,也無需修改主機的默認網關配置。
    • 適應性強:VRRP報文封裝在IP報文中,支持各種上層協議。
    • 網絡開銷小:VRRP只定義了一種報文——VRRP通告報文,并且只有處于Master狀態的路由器可以發送VRRP報文。

    更多內容,參見 協議文本 ,以及 VRRP 技術白皮書 - Huawei

    1.2 Keepalived

    1.2.1 概念

    Keepalived 是一個用 C 語言編寫的路由軟件,其主要目的是向 Linux 系統和基礎設施提供簡單可靠的工具來實現負載均衡(Load balancing)和高可用(HA)。其中,

    • 負載均衡框架基于 Linux Virtual Server (IPVS) 內核模塊來提供網絡四層的負載均衡,它實現了一組檢查器(Checkers)來根據它們的健康狀態動態地和自適應地維護和管理被均衡的服務器池。
    • 高可用(HA)是使用 VRRP 來實現的,Keepalived 是 VRRP 的一個非常好的開源實現。它是一個基于 VRRP 協議來實現的 WEB 服務高可用方案,可以利用其來避免單點故障。一個 WEB 服務至少會由兩臺臺物理服務器運行 Keepalived,一臺為主服務器(MASTER),一臺為備份服務器(BACKUP),但是對外表現為一個虛擬 IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬 IP,繼續提供服務,從而保證了高可用性。

    1.2.2 軟件架構和功能

    (本部分內容來自 Keepalived 官網)

    Keepalived 使用三個進程,其中 Watchdog 是控制進程,VRRP Stack and Checkers 是它的兩個子進程。

    • Watchdog 通過心跳機制來確保子進程處于運行狀態。
    • Checkers:負責真實服務器的健康檢測,用于負載均衡。
    • VRRP Stack:實現 VRRP 協議,提供 HA。

    主要模塊:

    • System call : 用于啟動用戶添加的腳本。它可以被 Checkers 和 VRRP Stack 使用。它向 VRRP 框架提供了一種能力,即在 VRRP 協議狀態變化時可以運行用戶指定的腳本。
    • SMTP : 使得 Keepalive 能夠使用郵件來通知管理員。
    • NETLINK Interface: 用于 VRRP。Keepalive 通過它來設置或者刪除 VIP。

    VRRP Stack 模塊:

    VRRP Stack 是獨立于 LVS的,它可以被單獨使用。它主要提供以下功能:

    • Failover:實現 VRRP協議的核心功能,提供故障切換能力。
    • VRRP Instance synchronization:VRRP Group (組)之間的同步,比如保證兩個 VRRP 組直接保持同樣狀態。
    • VRRP 廣播:Master 實例通知 Backup 實例。
    • System call: 在 VRRP 狀態變換時調用外部的腳本或者程序。

    它包括以下組件:

    • Netlink:提供 VIP 操作。
    • Multicast:用于發送 VRRP 協議廣播。
    • SYSLOG:所有 daemon 的通知消息都會通過該組件寫入日志。

    用戶可以使用配置文件 /etc/keepalived/keepalived.conf 來配置 Keepalived。本部分主要講講 keepalived 的概念,使用會在下文談到。更多內容,參見 官網

    作者信息:劉世民(Sammy Liu),IBM 云架構師,十余年IT行業從業經歷,在電信、企業軟件、存儲以及云計算等領域做過研發、管理和架構設計等工作。 2012 年開始學習 OpenStack,對其核心模塊有較深入的了解;帶領過團隊開發OpenStack模塊。

    責編:陳晨 聯系請添加微信:violace95 備注公司 職位 姓名。尋求報道或投稿,請請發送至郵箱:chenchenjs@csdn.net

     

    來自: http://geek.csdn.net/news/detail/74707

     

 本文由用戶 NinaNickel 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!