VRRP協議簡介
VRRP是一種容錯協議,它通過把幾臺路由設備聯合組成一臺虛擬的路由設備,並通過一定的機制來保證當主機的下一跳設備出現故障時,可以及時將業務切換到其它設備,從而保持通訊的連續性和可靠性。
VRRP將局域網內的一組路由器劃分在一起,稱為一個備份組。備份組由一個Master路由器和多個Backup路由器組成,功能上相當於一臺虛擬路由器。局域網內的主機只需要知道這個虛擬路由器的IP地址,並不需知道具體某臺設備的IP地址,將網絡內主機的缺省網關設置為該虛擬路由器的IP地址,主機就可以利用該虛擬網關與外部網絡進行通信。
VRRP將該虛擬路由器動態關聯到承擔傳輸業務的物理路由器上,當該物理路由器出現故障時,再次選擇新路由器來接替業務傳輸工作,整個過程對用戶完全透明,實現了內部網絡和外部網絡不間斷通信。
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狀態。
VRRP協議簡介