山東勞動職業技術學院機械工程系 杜秀芳
?
ISSU過程中的不兼容升級
山東勞動職業技術學院機械工程系杜秀芳
【摘要】本文介紹了一種高端路由器的在服務升級方案,同時還提出了消息不兼容場景下的在服務升級方案,使運營商客戶在版本升級切換時的業務中斷時間盡可能短,具有商業價值。
【關鍵詞】ISSU;高可靠性;路由器;軟件升級
隨著通信技術的發展,4K、LTE等技術對帶寬的要求越來越高,廣大的網絡用戶對帶寬的需求量越來越大,運行商為了滿足用戶的需要,從而進行新一輪的技術革新和設備升級,以滿足帶寬和新業務特性的需求。在更新設備軟件的方式上,越來越多的公司都開始支持ISSU技術(In-Service Software Upgrade),利用ISSU技術可以實現在軟件升級的過程中,大大減少業務的恢復時間,提高設備的無故障運行時間,從而降低了升級的成本,提高了網絡設備的可靠性。本文涉及的設備形態主要是路由器。
1.1HA技術
不間斷業務升級技術是在高可靠性技術(HA)的技術上發展起來的,不得不提一下HA技術的實現。如圖1所示,在硬件上,HA技術需要系統有兩塊主控板,用于做1:1的互為備份,處理實際路由事務和轉發的板子稱為主板(Master),處于備份等待并且可以隨時接管主板工作的板子稱為備板(Slave)。在主板上部署的進程稱為主進程,在備板上部署的進程稱為備進程。主進程和備進程是一一對應的,每對主備進程稱為一個保護組。HA技術解決的是主備進程和主備板之間的可靠性問題,主要技術點包括系統批量備份、系統實時備份和主備倒換技術。

圖1 HA原理
(1)批量備份
系統批量備份的過程如圖2所示,在整個設備啟動之初,主板先啟動,備板向主板注冊后,開始做第一次主備板之間的數據同步,具體是通過每個保護組之中的主備進程之間的數據同步來完成。目的是批量獲取主板的配置數據和狀態數據,以便能夠隨時恢復主板的業務。批量備份的發起者是HA管理模塊,HA管理模塊通知主板“備板已經啟動成功,可以發起批量備份”,然后主板HA管理模塊通知他說管理的各個業務模塊向自己的備模塊發起備份,所有模塊備份結束后,HA管理模塊認為整個批量備份過程結束,記錄狀態。批量備份的實現是通過主板各個進程與備板各個進程的消息實現的。

圖2 批量備份過程
(2)實時備份
批量備份完成后,所有主進程進入運行態,處于運行態的主進程還是會不斷處理業務(路由更新、拓撲變化等),備進程的數據還是會與主進程不同。如果主進程發生異常,那么備進程升主后還是有一段時間需要恢復數據,而這個過程也是會影響業務處理的。為了減少這個時間,使設備盡快能恢復業務,備進程需要經常性的同步主進程新生成的數據,這個過程稱為實時備份。實時備份是由業務的主進程發起的,當主進程的狀態數據發生變化的時候,會同時通知備進程接收這部分新數據。這部分數據的同步也是有主備進程之間的消息通信完成的。
(3)主備倒換
當主進程發生異常的時候,可以通過主板重啟,同時備板所有進程由備身份升為主身份完成業務的平滑切換,這個過程稱為主備倒換。
1.2ISSU實現過程
ISSU的完整過程包括上傳升級包、升級前環境檢查、運行包替換、升級確認四個過程。
(1)上傳升級包
這個過程中由用戶通過ftp協議上傳升級包到設備的存儲空間中,以便升級需要,這個過程需要確保主控板有足夠的空間。
(2)升級前環境檢查
升級前檢查為了檢測當前運行環境是否滿足升級條件,包括主備板的磁盤空間、各個接口板的磁盤空間、CPU占用率、各個板子的內存剩余空間。只有所有條件都滿足升級的最低標準才能正常進行下一步的升級過程。
(3)運行包替換
運行包替換過程的目標是真正把系統中運行的進程以新版本的程序啟動,這個過程分為主控板替換過程和接口板替換過程,先進行主控板的替換過程。具體過程如下:
第一步:將升級包解壓縮(這個時候升級包只在主控板磁盤上);
第二步:將解壓縮后的軟件實體(包括可運行程序、腳本和lib等)分發到各個單板;
第三步:主控板的備板以升級包中的程序啟動,啟動完成后,進行主備程序之間的數據備份,進行主備倒換;
第四步:接口板以新版本程序創建備進程,進行主備程序之間的數據備份,然后進行主備倒換,至此,完成整個系統的主用平面的程序替換,也就是說功能上整個設備已經替換成新版本的程序,后面的就是驗證過程。
(4)升級確認
該過程的是目的是驗證升級的結果,在這個過程中還是可以回退到老版本的程序。升級確認過程中,需要查看設備運行狀態、轉發和路由狀態、CPU和各個業務功能是否正常,如果一切都正常,那么就可以確認升級。確認升級之后,系統的備平面也會整體替換成新版本的程序,從而整個設備的所有程序都完成了新版本軟件的替換。
基于HA技術實現的ISSU的完成依賴于HA技術的可靠,HA技術的主要環節就是數據備份,而數據備份能否成功的關鍵點是主備模塊之間的備份消息能否正確處理。參考上面運行包替換過程中提到的第三步,在備板程序以新版本啟動后,開始的備份過程發生的主備雙方的版本分別是:主程序舊版本,備程序新版本,所以這個通信過程就是兩個版本之間的通信。一般情況下,版本升級的周期是半年以上(通常是一年到兩年),版本之間總會有一定的差距,這就會導致新版本的程序在收取老版本消息的時候處理出錯。
舉例來說,如圖3所示,新版本數據包結構發生變化,數據報文新版本相對舊版本增加一個c字段,并且c字段加入的位置放在了a和b之間,這會導致新版本在解析數據包時,會錯誤的把原來報文中的b當成c來解析,從而導致業務邏輯的錯誤。這種由新舊版本消息格式變更導致的消息無法正確解析稱作消息不兼容,把新版本程序對于舊版本程序的這種差異稱作不兼容變更。當在ISSU過程里面的新舊雙方發生了消息不兼容,就是新啟動的備程序從舊的主程序那邊獲取了錯誤的數據(通過備份消息),會導致業務本身的錯誤,最終導致整個ISSU過程失敗。ISSU最容易發生的失敗就在于此。

圖3 消息格式變化
要解決消息不兼容的問題,分為兩個部分:一是基于運行程序的版本號管理,從而能夠在ISSU開始之前就能夠判斷出該次升級的ISSU過程中是否包含著消息不兼容的程序;二是支持在消息不兼容的場景下進行ISSU。
3.1基于運行程序的版本號管理
在大包版本的基礎上,對程序本身的文件進行版本編號管理,采用兩級版本號管理:X.Y。其中X 和Y為整數,當版本變化時,X和Y的數值依次增大。規定當發生不兼容變更時,X增加1,當版本的程序的變化與之前的版本兼容時,Y增加1。
舉例來說,對于程序librm.so,初始版本為1.0,發生了三次版本變更,第一次變更為兼容變更,第二次變更為不兼容變更,第三次變更為兼容變更,則這三次該程序的版本號分別為:librm.so 1.1,librm.so 2.0,librm.so 2.1。
3.2支持消息不兼容下的ISSU
當存在消息不兼容的程序時,采用不備份的方式完成主備程序替換的過程。ISSU過程中的運行包替換過程改進為如下步驟:
第一步:將升級包解壓縮(這個時候升級包只在主控板磁盤上);
第二步:將解壓縮后的軟件實體(包括可運行程序、腳本和lib等)分發到各個單板;
第三步:主控板的備板以升級包中的程序啟動,啟動完成到初始化階段完成后,不進行備份,以新版本程序復位不兼容的主進程。對于兼容的進程還是按照之前的方式操作,讓不兼容造成的影響降低到進程級別;
第四步:接口板以新版本程序啟動程序。
在這種方式下的實現的ISSU是有損的,但是也能保證以最小的損失進行。
本文介紹的技術方案解決了路由器ISSU升級中,消息不兼容場景下的升級問題,縮短了業務中斷的時間,能夠給電信客服帶來實際的商業價值。
參考文獻
[1]馮強.金融城域網外聯路由器軟件版本升級中的關鍵環節[J].中國金融電腦,2015(10):53-55.
[2]王麗梅.網絡路由器升級改造中的技術和管理障礙及其排除[J].電子世界,2014(4):70-71.
[3]周麗平,張亞君.基于Linux系統交換機的進程升級研究[J].杭州電子科技大學學報,2012,32(5):29-32.
[4]張敏狄,郭裕順.分布式網絡設備的業務不中斷軟件升級系統設計[J].計算機系統應用,2010,19(6): 40-43.
[5]張玉峰,孫知信.基于熱備份的主備倒換在高端路由器中的應用[J].計算機技術與發展,2010,20(3): 172-179.
杜秀芳(1982—),女,碩士研究生,初級職稱,山東勞動職業技術學院機械工程系專任教師。
作者簡介: