VRRP協議簡介

VRRP協議是什麼

     VRRP是一種容錯協議,它通過把幾臺路由設備聯合組成一臺虛擬的路由設備,並通過一定的機制來保證當主機的下一跳設備出現故障時,可以及時將業務切換到其它設備,從而保持通訊的連續性和可靠性。

     VRRP將局域網內的一組路由器劃分在一起,稱爲一個備份組。備份組由一個Master路由器和多個Backup路由器組成,功能上相當於一臺虛擬路由器。局域網內的主機只需要知道這個虛擬路由器的IP地址,並不需知道具體某臺設備的IP地址,將網絡內主機的缺省網關設置爲該虛擬路由器的IP地址,主機就可以利用該虛擬網關與外部網絡進行通信。

     VRRP將該虛擬路由器動態關聯到承擔傳輸業務的物理路由器上,當該物理路由器出現故障時,再次選擇新路由器來接替業務傳輸工作,整個過程對用戶完全透明,實現了內部網絡和外部網絡不間斷通信。

image.png


VRRP基本概念

概念

解釋

VRRP路由器(VRRP Router)運行VRRP的設備,它可能屬於一個或多個虛擬路由器。
虛擬路由器(Virtual Router)由VRRP管理的抽象設備,又稱爲VRRP備份組,被當作一個共享局域網內主機的缺省網關。 
它包括了一個虛擬路由器標識符和一組虛擬IP地址。
虛擬IP地址(Virtual IP Address)虛擬路由器的IP地址,一個虛擬路由器可以有一個或多個IP地址,由用戶配置。
IP地址擁有者(IP Address Owner)如果一個VRRP路由器將虛擬路由器的IP地址作爲真實的接口地址,則該設備是IP地址擁有者。 
當這臺設備正常工作時,它會響應目的地址是虛擬IP地址的報文,如ping、TCP連接等。
虛擬MAC地址是虛擬路由器根據虛擬路由器ID生成的MAC地址。 
一個虛擬路由器擁有一個虛擬MAC地址,格式爲:00-00-5E-00-01-{VRID}。 
當虛擬路由器迴應ARP請求時,使用虛擬MAC地址,而不是接口的真實MAC地址。
主IP地址(Primary IP Address)從接口的真實IP地址中選出來的一個主用IP地址,通常選擇配置的第一個IP地址。 
VRRP廣播報文使用主IP地址作爲IP報文的源地址。
Master路由器(Virtual Router Master)是承擔轉發報文或者應答ARP請求的VRRP路由器,轉發報文都是發送到虛擬IP地址的。 
如果IP地址擁有者是可用的,通常它將成爲Master。
Backup路由器(Virtual Router Backup)一組沒有承擔轉發任務的VRRP路由器,當Master設備出現故障時,它們將通過競選成爲新的Master。
搶佔模式

在搶佔模式下,如果Backup的優先級比當前Master的優先級高,將主動將自己升級成Master。


VRRP報文

VRRP控制報文只有一種:VRRP通告(advertisement)。它使用IP多播數據包進行封裝,組地址爲224.0.0.18,發佈範圍只限於同一局域網內。這保證了VRID在不同網絡中可以重複使用。
因爲這份筆記的主要目的是理解keepalived的原理,所以只介紹部分相關字段。

Virtual Rtr ID(VRID):虛擬路由器ID,取值範圍是1~255。

Priority:發送報文的VRRP路由器在虛擬路由器中的優先級。取值範圍是0~255,其中可用的範圍是1~254。0表示設備停止參與VRRP,用來使備份路由器儘快成爲主路由器,而不必等到計時器超時;255則保留給IP地址擁有者。缺省值是100。


Count IP Addrs:VRRP廣播中包含的虛擬IP地址個數。


IP Address(es):虛擬路由器IP地址,地址個數是Count IP Addrs的值。


Master路由的選舉

備份組中路由器的優先級:

  • VRRP根據優先級來確定備份組中每臺路由器的角色(Master路由器或Backup路由器)。優先級越高,則越有可能成爲Master路由器。

  • 當兩臺優先級相同的路由器同時競爭Master時,比較接口IP地址大小。接口地址大者當選爲Master。

VRRP優先級的取值範圍爲0到255(數值越大表明優先級越高),可配置的範圍是1到254,優先級0爲系統保留給路由器主動放棄Master位置時候使用,255則是系統保留給IP地址擁有者使用。若VRRP路由器的IP地址和虛擬路由器的接口IP地址相同,則該VRRP路由器被稱爲該IP地址的所有者;IP地址所有者自動具有最高優先級:255。因此,當備份組內存在IP地址擁有者時,只要其工作正常,則爲Master路由器。

備份組中路由器的工作方式:

  • 非搶佔方式:如果備份組中的路由器工作在非搶佔方式下,則只要Master路由器沒有出現故障,Backup路由器即使隨後被配置了更高的優先級也不會成爲Master路由器。

  • 搶佔方式:如果備份組中的路由器工作在搶佔方式下,它一旦發現自己的優先級比當前的Master路由器的優先級高,就會對外發送VRRP通告報文。導致備份組內路由器重新選舉Master路由器,並最終取代原有的Master路由器。相應地,原來的Master路由器將會變成Backup路由器。Backup路由器接收到VRRP通告報文後,只會將自己的優先級與通告報文中的優先級進行比較,不會比較IP地址,只有自己的優先級大於通告報文中的優先級時,纔會搶佔成爲Master。

初始創建的路由器工作在Backup狀態,通過VRRP報文的交互獲知虛擬路由器中其他成員的優先級:

  • 如果VRRP報文中Master路由器的優先級高於自己的優先級,則路由器保持在Backup狀態;

  • 如果VRRP報文中Master路由器的優先級低於自己的優先級,採用搶佔工作方式的路由器將搶佔成爲Master狀態,週期性地發送VRRP報文,採用非搶佔工作方式的路由器仍保持Backup狀態;

  • 如果在一定時間內沒有收到VRRP報文,則路由器切換爲Master狀態。

     由於路由器上備份組的配置不一致、網絡故障等原因造成備份組中存在多個Master路由器時,這些Master路由器會根據優先級和IP地址選舉出一個Master:優先級高的路由器成爲Master;優先級低的成爲Backup;如果優先級相同,則IP地址大的成爲Master。


VRRP定時器
VRRP定時器分爲兩種:VRRP通告報文間隔時間定時器和VRRP搶佔延遲時間定時器。
1)VRRP通告報文時間間隔定時器
VRRP備份組中的Master路由器會定時發送VRRP通告報文,通知備份組內的路由器自己工作正常。
用戶可以通過設置VRRP定時器來調整Master路由器發送VRRP通告報文的時間間隔。如果Backup路由器在等待了3個間隔時間後,依然沒有收到VRRP通告報文,則認爲自己是Master路由器,並對外發送VRRP通告報文,重新進行Master路由器的選舉。


2)VRRP搶佔延遲時間定時器
爲了避免備份組內的成員頻繁進行主備狀態轉換,讓Backup路由器有足夠的時間蒐集必要的信息(如路由信息),Backup路由器接收到優先級低於本地優先級的通告報文後,不會立即搶佔成爲Master,而是等待一定時間——搶佔延遲時間後,纔會對外發送VRRP通告報文取代原來的Master路由器。


Master路由器狀態的通告
Master路由器週期性地發送VRRP報文,在虛擬路由器中公佈其配置信息(優先級等)和工作狀況。Backup路由器通過接收到VRRP報文的情況來判斷Master路由器是否工作正常。
     Master路由器主動放棄Master地位(如Master路由器退出虛擬路由器)時,會發送優先級爲0的VRRP報文,致使Backup路由器快速切換變成Master路由器。這個切換的時間稱爲Skew time,計算方式爲:(256-Backup路由器的優先級)/256,單位爲秒。
     當Master路由器發生網絡故障而不能發送VRRP報文的時候,Backup路由器並不能立即知道其工作狀況。Backup路由器等待一段時間之後,如果還沒有接收到VRRP報文,那麼會認爲Master路由器無法正常工作,而把自己升級爲Master路由器,週期性發送VRRP報文。如果此時多個Backup路由器競爭Master路由器的位置,將通過優先級來選舉Master路由器。Backup路由器默認等待的時間稱爲Master_Down_Interval,取值爲:(3×VRRP報文的發送時間間隔)+Skew time,單位爲秒。
     在性能不夠穩定的網絡中,Backup路由器可能因爲網絡堵塞而在Master_Down_Interval期間沒有收到Master路由器的報文,而主動搶佔爲Master位置,如果此時原Master路由器的報文又到達了,就會出現虛擬路由器的成員頻繁的進行Master搶佔現象。爲了緩解這種現象的發生,特制定了延遲等待定時器。它可以使得Backup路由器在等待了Master_Down_Interval後,再等待延遲等待時間。如在此期間仍然沒有收到VRRP報文,則此Backup路由器纔會切換爲Master路由器,對外發送VRRP報文。

     如果Backup路由器監視Master路由器採用的是具有快速檢測功能的BFD技術。在Backup設備上使用該技術監視Master路由器的狀態,一旦Master路由器發生故障,Backup就可以自動切換成爲新的Master路由器,將切換時間縮短到毫秒級。


VRRP工作原理
參與虛擬路由器的每一臺VRRP路由器,都只有3種VRRP狀態:初始狀態(Initialize)、主控狀態(Master)、備份狀態(Backup)。

VRRP的工作過程爲:

1)路由器使能VRRP功能後,會根據優先級確定自己在備份組中的角色。優先級高的路由器成爲Master路由器,優先級低的成爲Backup路由器。Master路由器定期發送VRRP通告報文,通知備份組內的其他路由器自己工作正常;Backup路由器則啓動定時器等待通告報文的到來。
2)在搶佔方式下,當Backup路由器收到VRRP通告報文後,會將自己的優先級與通告報文中的優先級進行比較。如果大於通告報文中的優先級,則成爲Master路由器;否則將保持Backup狀態。
3)在非搶佔方式下,只要Master路由器沒有出現故障,備份組中的路由器始終保持Master或Backup狀態,Backup路由器即使隨後被配置了更高的優先級也不會成爲Master路由器。
4)如果Backup路由器的定時器超時後仍未收到Master路由器發送來的VRRP通告報文,則認爲Master路由器已經無法正常工作,此時Backup路由器會認爲自己是Master路由器,並對外發送VRRP通告報文。備份組內的路由器根據優先級選舉出Master路由器,承擔報文的轉發功能。


VRRP協議狀態機-初始狀態(Initialize)
如果本地優先級爲255,也就是說自己是IP擁有者路由器,那麼接下來它會:
1)發送VRRP通告報文
2)廣播免費ARP請求報文,內部封裝是虛擬MAC和虛擬IP的對應,有幾個虛擬IP地址,那麼就發送幾個免費ARP請求報文。
3)啓動一個Adver_Timer計時器,初始值爲Advertisement_Interval(缺省是1秒),當該計時器超時後,會發送下一個VRRP通告報文
4)本地VRRP進程將自己切換爲Master路由器

如果本地優先級不是255,,那麼接下來它會:

1)設置Master_Down_Timer計時器等於Master_Down_Interval,也就是主路由器死亡時間間隔,如果此計時器超時,那麼Backup路由器就會宣佈主路由器死亡。其中Master_Down_Interval = (3*Advertisement_Interval)+ Skew_time舉例來說,一個VRRP實例(也就是一個VRRP虛擬器)的優先級是100,報文發送間隔是1秒,那麼Master_Down_Interval = 3*1s + (256-100)/256s = 3.609秒。

2)本地VRRP進程將自己切換爲Backup路由器。


VRRP協議狀態機-備份狀態(Backup)
備份路由器是爲了監控Master路由器的狀態,如果一個VRRP路由器處於此狀態,那麼它會:
1)不響應對虛擬IP地址的ARP請求報文。
2)丟棄幀頭目的MAC地址是虛擬MAC的幀。
3)丟棄IP頭中目的IP地址是虛擬IP的IP包。

如果此時該VRRP路由器收到了一個shutdown事件,那麼它會:
1)取消Master_Down_Timer。
2)轉換爲初始狀態(Initialize state)。

如果Master_Down_Timer超時,那麼該VRRP路由器會執行:
1)發送一個VRRP通告報文。
2)廣播免費ARP請求報文,內部封裝是虛擬MAC和虛擬IP的對應,有幾個虛擬IP地址,那麼就發送幾個免費ARP請求報文。
3)設置Adver_Timer計時器爲Advertisement_Interval(缺省爲1秒)。
4)切換到Master狀態。

如果該Backup狀態的VRRP路由器收到了一個VRRP通告報文:

  • 當該VRRP通告報文的優先級字段爲0時,那麼路由器會將當前的Master_Down_Timer 設置爲Skew_Time。

  • 如果優先級不爲0,並且大於或等於本地優先級,那麼本地路由器會重置Master_Down_Timer計時器並保持Backup狀態。

  • 如果優先級不爲0,並且小於本地優先級,如果開啓了搶佔模式(Preempt mode),那麼該Backup路由器等待指定的搶佔延遲時間後將自己切換爲Master路由器;並執行Master路由器的所有動作;例如:vrrp 1 preempt delay minimum 10,表示等待10秒後切換自己爲Master。

  • 如果優先級不爲0,並且小於本地優先級,如果沒有開啓搶佔模式(Preempt mode),那麼本地路由器保持Backup狀態。


VRRP協議狀態機-主控狀態(Master)

當路由器處於Master狀態時,會進行下面的動作:

  • 響應對虛擬IP地址的ARP請求。

  • 轉發目的MAC地址是虛擬MAC的數據幀。

  • 拒絕目的IP地址是虛擬IP的數據包,除非它是IP地址擁有者(也就是優先級是255的那個路由器)。

如果處於Master狀態的VRRP進程收到了一個shutdown事件,那麼它會:
1)取消Adver_Timer計時器。
2)發送一個優先級字段置零的VRRP通告報文。
3)切換爲初始狀態(Intialize state)。

如果Adver_Timer計時器超時,那麼:
1)發送一個VRRP通告報文。
2)重置Adver_Timer計時器。

如果收到了一個VRRP報文且其優先級爲0,那麼:
1)發送一個VRRP通告報文。
2)重置Adver_Timer計時器。

如果收到了一個VRRP報文且其優先級高於本地優先級,或者收到的VRRP報文優先級等於本地優先級但是主IP地址高於本地的主IP地址,那麼:
1)取消Adver_Timer計時器。
2)設置Master_Down_Timer計時器爲Master_Down_Interval。
3)切換爲Backup狀態。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章