李 潔,黃婷熙,潘濤濤
(武漢郵電科學研究院;武漢烽火網(wǎng)絡(luò)有限責任公司,湖北 武漢 430074)
現(xiàn)在的通信網(wǎng)絡(luò)中,對于大容量的機架式通信設(shè)備的業(yè)務(wù)可靠性、穩(wěn)定性有很高的要求,提高其設(shè)備運行的穩(wěn)定性、可靠性,是機架式通信設(shè)備必須解決的重要課題。主備倒換技術(shù)是提高通信設(shè)備可運維性的重要解決方案之一。本文提出一種私有的高可靠性通信設(shè)備主備倒換軟件實現(xiàn)方式,優(yōu)化了主備倒換流程,有效提高了主備倒換數(shù)據(jù)的準確性,并縮短了主備倒換的時間。
新主備倒換的方式,從以下兩點進行改進:1)改變了倒換的邏輯,將主備控制卡的數(shù)據(jù)同步過程修改為實時同步,使主備控制卡的狀態(tài)隨時保持一致;2)建立一條私有的二層協(xié)議管理通道,在用套接字保證主備數(shù)據(jù)傳遞準確性的同時,獨立的管理通道也保證了主備狀態(tài)倒換的準確性和及時性。前者是邏輯的改進,后者是通信通道的改進。
新的實現(xiàn)方式是將主備倒換過程中的主備數(shù)據(jù)同步和倒換的過程分離開來,在主備倒換時只需轉(zhuǎn)變主備控制卡的卡狀態(tài)即可。其實現(xiàn)前提是主備控制卡的數(shù)據(jù)和狀態(tài)是實時同步的。下面就介紹其軟件實現(xiàn)原理。
由協(xié)議HA的狀態(tài)機維護主、備控制卡狀態(tài),它們之間的通信不同于控制卡與其業(yè)務(wù)線卡之間的通信方式。HA協(xié)議提供兩條相互獨立的主備卡控制卡通道:一條為主備卡之間的數(shù)據(jù)傳輸通道,將TCP運用在數(shù)據(jù)鏈路層,通過套接字傳送數(shù)據(jù);另一條為主備控制卡之間的HA控制信息傳送通道,建立在數(shù)據(jù)鏈路層上,運用一種可靠的點到點的傳輸方法,可以提供QoS保障。如圖1所示。
圖1 HA通道設(shè)計
數(shù)據(jù)通道采用全雙工方式,采用類似TCP協(xié)議的TCP2來傳輸,擁有TCP通信的特有超時重傳和捎帶確認機制,保證主備控制卡傳送數(shù)據(jù)的準確性。IP2通信協(xié)議中地址分別使用主備雙方的帶外MAC地址取代IP地址,并通過三次握手的方式建立連接。
控制通道是由私有的可靠通信協(xié)議HA提供的。它是一條獨立的專門用來傳輸HA控制報文的通道。用來防止在數(shù)據(jù)傳輸過程中,系統(tǒng)正常的業(yè)務(wù)數(shù)據(jù)通信影響控制報文的通信,避免數(shù)據(jù)擁塞致使控制報文丟失或者延時后導致HA狀態(tài)機發(fā)生錯誤,從而保證主備狀態(tài)準確及時地切換。
基于HA狀態(tài)機,主備數(shù)據(jù)同步分兩種情況,一種是實時同步,一種是批量同步。
1)數(shù)據(jù)的實時同步
主備數(shù)據(jù)的實時同步指的是線卡在業(yè)務(wù)進行中,向主控制卡發(fā)送信息。主控制卡會及時使用套接字轉(zhuǎn)發(fā)數(shù)據(jù)到備用線卡。收到備控制卡回復后,確認備控制線卡收到數(shù)據(jù),才會響應(yīng)業(yè)務(wù)線卡。而備用控制卡會和主控制進行同樣的操作,只是這些操作并不下發(fā)給線卡。這樣可以有效地提高同步的效率,保證主備控制卡的數(shù)據(jù)和狀態(tài)的一致,做到真正的無縫倒換。
2)數(shù)據(jù)的批量同步
數(shù)據(jù)的批量同步發(fā)生在控制卡插入系統(tǒng)初期。主控制卡上的配置文件同步到備控制卡的過程,此時備控制卡只處理來自主控制卡的報文,其他的控制報文全部丟棄,并且從軟件上關(guān)閉了備控制卡向業(yè)務(wù)卡發(fā)送數(shù)據(jù)的通道。該過程數(shù)據(jù)同樣是使用套接字在主備控制線卡間的獨立通道上進行傳輸,保證了數(shù)據(jù)的正確性。
本節(jié)從主備倒換條件、主備倒換流程、主備競爭、異常倒換處理方式這4方面來論述。
沒有了數(shù)據(jù)同步,整個步驟的主備倒換過程簡單了很多,只要滿足主備倒換的條件就可以進行正常的倒換,觸發(fā)條件包括:1)后臺的命令發(fā)起的倒換;2)前臺按鍵倒換;3)網(wǎng)口故障觸發(fā)的倒換;4)插拔卡引發(fā)的倒換[1-3]。
經(jīng)過以上論述可知,在基于HA的倒換系統(tǒng)里,關(guān)鍵步驟——數(shù)據(jù)同步過程是在倒換步驟外進行的,倒換的步驟僅剩下轉(zhuǎn)換主備控制卡標識。
在系統(tǒng)啟動初期,會創(chuàng)建一條控制卡之間消息交互的通道。在滿足倒換條件后,主控制卡會向備控制卡發(fā)起倒換消息,并會通知業(yè)務(wù)線卡和軟件層,且軟件層逐層向上層應(yīng)用發(fā)出倒換通知。最后主控制卡轉(zhuǎn)換自己的狀態(tài)到備控制卡,同時備控制卡轉(zhuǎn)換自己的狀態(tài)到主控制卡,并恢復正常工作。
協(xié)議規(guī)定,控制卡在系統(tǒng)的狀態(tài)有3種,分別為主控制卡狀態(tài)、備控制卡狀態(tài)和候選卡狀態(tài)。在控制卡插入系統(tǒng)的初期,都為候選卡狀態(tài),此狀態(tài)沒有控制系統(tǒng)的權(quán)限。并且協(xié)議規(guī)定系統(tǒng)正常狀態(tài)下的任何時刻只允許一個控制卡控制系統(tǒng),將這個卡稱為主控制卡,其余的控制卡稱為備份控制卡??刂瓶顟B(tài)轉(zhuǎn)移圖如圖2所示。
圖2 控制卡狀態(tài)轉(zhuǎn)移圖
當一塊控制卡插入系統(tǒng)并啟動后,狀態(tài)為候選卡。首先向控制通道廣播發(fā)送hello消息,通告自己的存在,如果系統(tǒng)中已經(jīng)存在主控制卡,那么將對這個卡發(fā)送hello reply,這塊新插入的控制卡收到該消息后就將自己設(shè)置為備份控制卡。
如果插入的控制卡發(fā)送3次hello消息后,沒有收到來自主控制卡的hello reply,也沒有收到主控制卡發(fā)送的周期性的hello消息,那么這塊控制卡就將自己的角色設(shè)置為主控制卡控制系統(tǒng),并周期性地在控制卡使用的控制通道上廣播hello消息。
如果系統(tǒng)上電時就具備兩塊控制卡,由于初始時,兩塊控制卡都不是主控卡,通過發(fā)送hello包通信,知道了對方的存在。此時需要競爭選舉出主控制卡,選舉原則是根據(jù)槽位大小,選槽位號小的控制卡為主控制卡,發(fā)送hello reply包,通知另一塊候選卡狀態(tài)改變?yōu)閭淇刂瓶ǎ缓笤谥骺刂瓶ㄉ蠄?zhí)行正常工作。此時備指控卡只處理來自主控制卡的報文,并且關(guān)閉備控制卡數(shù)據(jù)轉(zhuǎn)發(fā)的通道。
當控制卡成為備份控制卡后,也需要周期地發(fā)送hello消息給主控制卡以通告自己的存在。主控制卡收到備份控制卡發(fā)送的hello消息,不需要回復hello reply。如果主控制卡在一定時間內(nèi)接收不到備份控制卡的hello消息,就認為備份控制卡已經(jīng)工作不正?;蛘卟淮嬖?。
如果主控制卡出現(xiàn)故障而沒有周期性地發(fā)送hello消息,當備份控制卡在設(shè)定時間內(nèi)沒有接收到主控制卡的hello消息時,備份控制卡就將變?yōu)橹骺刂瓶?。這樣的協(xié)商方式,即使在控制卡之間通道故障時,也不會出現(xiàn)雙備控制卡,系統(tǒng)無管理的現(xiàn)象[4]。
如果控制卡之間通道故障,出現(xiàn)雙主控現(xiàn)象。在通道恢復后,主控制卡收到hello消息時,發(fā)現(xiàn)hello消息的角色也是主控制卡,就會進行雙主控卡的選舉。若自己的槽位號比較小,那么發(fā)送hello reply包通知另一塊主控制卡狀態(tài)改變?yōu)閭淇刂瓶?,若自己的槽位號比對方大,那么設(shè)置自己的角色為備份控制卡[3]。
實驗方法:使用Testcenter向高端交換機上的兩張業(yè)務(wù)線卡發(fā)送固定流量的數(shù)據(jù)包,測試卡的吞吐量。測試開始后telent主控制卡,主備倒換,看測試結(jié)果是否產(chǎn)生丟包。
步驟1:Testcenter上4個端口連接高端交換機上的的兩張業(yè)務(wù)線卡以兩兩發(fā)包的模式進行吞吐量的測試。配置如圖3~5所示。
圖3 拓撲圖
圖4 Testcenter配置1(截圖)
圖5 Testcenter配置2(截圖)
步驟2:telent到主控制卡,show主控狀態(tài)。
S4608#show ha statistic
Ha status:
Local ha:slot is 9,state is master
Peer ha:slot is 10,state is slave
步驟3:主備倒換。
S4608#rsp switch
WARNING:Are you sure to switch RSP!Continue?[y/n]
Switch RSP…
%Switch RSP Successfully.
S4608#
2100/01/01 06:26:37:Local status change:from 〈master〉 to 〈slave〉
2100/01/01 06:26:37:Peer status change:from 〈slave〉 to 〈master〉
S4608#show ha statistic
Ha status:
Local ha:slot is 9,state is slave
Peer ha:slot is 10,state is master
步驟4:測試停止后生成測試結(jié)果如圖6所示,查看是否有丟包。
圖6 Testcenter測試結(jié)果(截圖)
由實驗結(jié)果可知,整個過程telent沒有斷開,并可以持續(xù)地下配置命令。查看測試結(jié)果可知并未丟包,且可以完全實現(xiàn)無縫倒換。
本文介紹的主備倒換方式相較于其他方式進行了改進,避免了主備倒換過程數(shù)據(jù)同步所花費的大量時間,確保了主備控制卡間數(shù)據(jù)的準確性,做到了整個系統(tǒng)在倒換前后維護的數(shù)據(jù)和狀態(tài)一致,使得倒換這個復雜的過程高度簡化,并且可靠性大大提高。
[1] 王繼剛,顧國昌,蘆東昕.高可靠性通信設(shè)備主備倒換軟件的設(shè)計[J].電信科學,2003(11):19-22.
[2] 施世華,高西全,靳松杰,等.高可靠性通信設(shè)備的主備倒換設(shè)計[J].電子科技,2007(7):47-50.
[3] 胡天驕,郭旭靜,王祖林.網(wǎng)管軟件主備切換協(xié)議的設(shè)計和驗證[J].電子質(zhì)量,2011(7):26-29.
[4] 何先波,李志蜀,唐寧九,等.面向通信領(lǐng)域的主備倒換與數(shù)據(jù)同步技術(shù)[J].計算機應(yīng)用,2005(10):2312-2314.