王鑫鵬+李晗+王俊



【摘 要】移動通信網絡中,EPC核心網服務器作為運行通信關鍵業務的設備,是保障系統安全且有效運作的基礎,服務器的任何故障都有可能導致通信關鍵業務的癱瘓或中斷。為了提高通信系統的穩定性,提出了兩臺服務器共同執行同一任務的雙機熱備架構模式,首先分析了OpenSAF方案的優點,隨后介紹了SCTP備份的具體實現方案,最后實驗結果證明了基于SCTP協議的雙機熱備系統可以有效地防止服務器錯誤的發生,從而保證核心網長期、可靠的服務。
【關鍵詞】流控制傳輸協議 熱備份 雙機熱備
中圖分類號:TN929 文獻標志碼:A 文章編號:1006-1010(2017)19-0034-07
Application and Implementation of SCTP Protocol in EPC Hot Backup System
WANG Xinpeng1, LI Han2, WANG Jun1
[Abstract] In mobile communication networks, as the device for running critical communication services, EPC sever is the basis to guarantee the safe and effective operation of the system. Any failure of the server would lead to paralysis or disruption of critical communications services. In order to improve the stability of communication system, a hot-standby mode that two servers jointly execute the same task was put forward. Firstly, the advantages of the OpenSAF scheme were analyzed. Then, the concrete implementation solution to SCTP backup was introduced. Finally, experimental results demonstrate the dual hot standby system based on SCTP protocol can effectively prevent the occurrence of server errors and guarantee the long-term and reliable service to the core network.
[Key words]SCTP hot backup dual hot backup
1 引言
雙機熱備即通過運行兩臺服務器協作完成一項服務,其中一臺做Active(主設備)提供服務,另一臺做Standby(從設備)實時備份業務數據,保證Standby和Active任意時刻狀態一致,當Active出現故障時,Standby快速接管服務,以此來實現系統備份和冗余,從而保證系統的高可靠性。
EPC作為核心網重要的業務單元,需要非常可靠的通信鏈路保證,SCTP(流控制傳輸協議)是提供基于不可靠傳輸業務的協議之上的可靠的數據報傳輸協議。SCTP是在IP網絡上使用的一種可靠的通用傳輸層協議,它通過借鑒UDP(用戶數據報協議)的優點解決了TCP(傳輸控制協議)的某些局限。SCTP提供的特性使socket(套接字)初始化的可用性、可靠性和安全性都得以提高,同時支持按序傳輸、防止攻擊、路徑監控和路徑冗余等功能。相比之下,TCP是面向字節的,而SCTP是針對成幀的消息。SCTP作為信令通訊協議,被廣泛運用于核心網設備接口中。
2 總體設計方案
在EPC熱備系統中采用的是Active/Standby雙機熱備方式,當Active服務器出現故障的時候,通過心跳診斷診測將Standby機器激活,保證應用在短時間內完全恢復正常使用。在通信系統運行過程中,出現任何網絡或者是主機故障都會自動觸發雙機熱備系統軟件的錯誤判定、故障隔離流程,備份服務器接管被中斷的服務并在最短的時間內通過聯機恢復繼續執行中斷的服務。圖1是熱備系統的結構框圖,EPC熱備系統采用1+1備份模式,由兩臺設備組成,一臺為Active,另一臺為Standby。
Active連接到網絡,對外提供服務,通過SCTP與連接上的eNodeB進行通信;每連接上一個eNodeB,Active內部生成一個SCTP socket,通過這個socket收發數據。
Standby不處理任何業務,設置成不與外網通信,只與Active相連;EPC服務器至少是雙網卡,其中一個網卡用于熱備通信,另外一個用于連接到網絡;Standby和網絡通信的網卡處于down的狀態。
Active將自身狀態備份到Standby,在自身狀態發生改變時都進行備份,包括SCTP socket的狀態,理論上任意時刻Active和Standby保持狀態完全一致。
當發生故障時,Active重啟,Standby將和網絡通信的網卡激活,IP地址設置成原來Active的IP,此時Standby利用備份的狀態重建socket,作為新的Active開始對外提供服務;原來的Active重啟后,將自身狀態改成Standby。
即任意時刻Active和Standby互為鏡像,但只有Active連接網絡發生故障切換時,Standby變成Active,用同樣的IP地址連接網絡,接管服務,對外部而言整個備份切換都是透明的。endprint
本文描述的EPC系統里的SCTP熱備設計方案里Active和Standby的備份以及故障檢測和切換是基于開源的OpenSAF項目。OpenSAF主要有兩個作用:
(1)主從設備之間的通信都通過OpenSAF進行,主設備在需要備份的地方調用OpenSAF的接口,將要備份的數據發送到從設備,從設備收到主設備的消息后更新系統狀態。
(2)當主設備宕機后,OpenSAF立刻重啟主設備,同時為從設備配置和主設備一樣的IP,這樣網絡的數據即會發送到從設備,此時原來的從設備變成主設備提供服務。
為能獲取和備份SCTP socket的狀態,必須使用用戶態的SCTP協議棧。直接調用Linux系統函數創建的SCTP socket使用的是內核態的SCTP協議棧,內核態不能獲取和設置SCTP socket的狀態。用戶態SCTP協議棧有開源的實現。
3 SCTP熱備架構設計
3.1 SCTP在EPC中的實現
核心網EPC主要由MME(Mobility Management Entity,控制面功能)、SGW(Serving Gateway,用戶面功能)、PGW(PDN Gateway,邊界網關)及PCRF(Policy and Charging Rules Function,策略和計費控制)等網元構成。
圖2是EPC的各模塊間接口協議,從圖中可以看出,eNodeB(基站)和EPC間建立UDP鏈接傳輸數據流;建立SCTP鏈接,傳輸信令流(S1/X2信令)。
SCTP是一個面向連接的流傳輸協議,它可以在兩個端點之間提供穩定、有序的數據傳遞服務。SCTP可以看做是TCP協議的改進,它繼承了TCP較為完善的擁塞控制并改進TCP的一些不足之處:
SCTP與TCP的最大不同之處在于它是多宿主連接,而TCP是單地址連接。
一個TCP連接只能支持一個流,一個SCTP連接可以支持多個流。在SCTP協議中,流是指從一個SCTP端點到另一端點之間建立的單向邏輯通路,通常情況下所有用戶消息在流中按序傳遞。
SCTP的上述特性使得SCTP socket有非常多的狀態信息,因此不能直接調用SCTP的系統函數(內核態的SCTP socket無法獲取狀態),必須在用戶態實現SCTP協議棧的功能。且提供下列接口:
(1)獲取SCTP socket的狀態接口:返回指定的SCTP socket的全部狀態數據。
(2)設置SCTP socket的狀態接口:將指定的SCTP socket的狀態設置成指定的狀態。
假定有一個SCTP socket A在網絡上收發SCTP數據,創建一個新的SCTP socket B,使用上述接口獲取socket A的狀態,然后用socket A的狀態數據去設置socket B,那么可以完全用socket B代替socket A收發數據。
EPC的SCTP實現可以分為兩部分:
(1)業務層:主要負責處理和MME等上層應用之間的消息;保存關于SCTP鏈接的相關控制信息(uid、spid、地址等信息);負責打開關閉SCTP鏈接以及處理網絡上收到的數據,實現中由sctp_task線程負責。
(2)傳輸層:負責從網絡上收發數據,這里調用用戶態SCTP協議棧的接口來實現建立SCTP鏈接和從SCTP鏈接上收發數據,由sctp_io_task線程負責。圖3是SCTP實現總體架構。
3.2 OpenSAF在SCTP熱備中的應用
OpenSAF是一個開源的熱備份解決方案,具有心跳檢測、進程監控、主備機通信和故障切換等功能,使用OpenSAF可以很方便實現熱備份功能。
OpenSAF對上層的數據結構透明,不了解備份的具體數據。在OpenSAF內部,用sectionid表示備份的數據,每次備份數據時必須指定對應的sectionid,相同sectionid的備份數據會覆蓋上一次備份的數據。
應用層需要仔細設計備份數據對應的sectionid,確保同一份數據的不同備份使用同樣的sectionid,否則備份到Standby的數據會出現重復或者錯誤。EPC熱備架構圖如圖4所示:
使用OpenSAF后,EPC熱備可以只關注應用層各個模塊的業務:
(1)Active上各個模塊在自己的狀態數據改變時,備份數據到Standby。對于備份功能,各模塊是完全獨立的,直接調用OpenSAF的接口發送到Standby。
(2)Active通過OpenSAF發送給Standby的備份消息類別有3類:新增、更新和刪除。Standby根據收到的消息的類別處理備份信息,分別是將消息內容新增到對應的狀態數據里、更新狀態數據和從狀態數據里刪除消息內容。
(3)當發生故障時,OpenSAF會檢查到故障發生并重啟Active,將Standby切換為Active。此時Standby根據備份的狀態數據還原業務。如果沒有發生錯誤,Active所有狀態的改變都正確地備份,那么此時的Active的狀態和之前發生故障的Active完全一致,業務可以無縫切換。
4 SCTP備份的具體實現
4.1 SCTP備份的數據結構
EPC作為SCTP的server端,在服務啟動后創建server socket監聽來自eNodeB的鏈接。Endpoint結構用于保存server socket業務層的狀態信息,例如監聽地址、SCTP的控制參數等。
當有一個eNodeB連接上后,會創建一個connected socket,用于EPC和此eNodeB的通信,assoc結構用于保存connected socket業務層的狀態信息,例如鏈接狀態、本端和對端的地址、此鏈接的ID等。endprint
對于每個SCTP socket,在傳輸層都有一些狀態信息用于發送消息時組包,以及收消息時校驗,切換后必須保證這些信息一致,否則新建立的socket無法直接通信,收發SCTP數據包時會直接校驗失敗,斷開鏈接。這些狀態信息保存于socketinfo結構中,包括:
(1)本端IP地址;
(2)對端IP地址;
(3)本端驗證標簽(my vtag);
(4)對端驗證標簽(peer vtag);
(5)傳輸順序號(TSN);
(6)對端接收窗口(rwnd);
(7)鏈接ID(associd);
(8)輸入和輸出流的數目;
(9)下一個要發的包的序列號;
(10)最后一次確認過的包的序列號;
(11)流的傳輸順序號(TSN)。
3個數據結構的關系如圖5所示。
4.2 SCTP備份點
SCTP備份的原則是只備份穩態,非穩態的均不備份。即在SCTP四次握手完成鏈接建立后開始備份,之后每次發生改變都要進行備份,在鏈接斷開后刪除。
對于業務層的數據結構,在發生改變時進行備份。
對于傳輸層,用socketinfo結構來存儲每個SCTP socket自身的狀態信息,socketinfo在每個socket每次收發數據后都要進行備份。否則切換后,SCTP鏈接會因為數據包中的字段不匹配而斷開鏈接。
EPC作為SCTP的server端,EPC的SCTP模塊創建一個SCTP server socket,在配置的端口監聽鏈接。由于server socket只監聽,因此server socket不需要備份。
圖6為SCTP的信令流程,根據前文描述的備份點:
(1)EPC打開server socket后備份endpoint結構。
(2)當有eNodeB連接EPC時,4次握手完成,即EPC發出消息COOKIE ACK后備份對應的assoc結構。
(3)之后EPC收到或者發出每一條消息都需要備份socketinfo結構。
(4)EPC在收到SHUTDOWN COMPLETE消息后備份assoc結構和socketinfo結構,備份消息的類型是delete(刪除)。
4.3 Standby的處理
Standby收到備份的業務層數據(endpoint結構和assoc結構)后,對這些數據進行還原,還原后數據和Active保持一致。由于Standby沒有運行業務,也沒有建立鏈接,因此沒有SCTP socket,所有狀態信息里的表示SCTP鏈接的socket字段先置為NULL,等切換為Active的時刻再創建socket結構并賦值。
Standby收到備份的socketinfo結構后,先將其保存到一個hash里。切換為Active時,會利用這些信息創建和恢復SCTP socket。
備份的所有數據,Standby都必須保證其唯一性,因此每次收到備份數據,需要用數據里的key去查找,如果有則更新,沒有才能創建。
當Standby切換為Active的時候,需要恢復全部的socket,處理如下:
(1)對于server socket,用備份的endpoint結構中的參數創建;server socket沒有備份內部的狀態信息,無需還原。
(2)遍歷保存socket狀態信息的hash,對hash里每一個節點創建一個SCTP socket,然后用hash節點里保存的socket狀態信息還原socket的狀態。
5 實驗結果
根據本文設計的SCTP熱備,搭建好熱備環境后,分別啟動Active設備和Standby設備,一旦Active設備發生故障切換到Standby后,系統的業務完全不受影響,和外部網絡建立的SCTP鏈接正常通信,對端感知不到系統的變化。試驗結果如圖7所示。
圖7是一次完整的熱備切換試驗過程中在eNodeB的網口上的SCTP數據包,其中IP 172.16.137.86是EPC,IP 172.16.137.55是eNodeB。
從圖7可以看出,開始時,EPC是機器AdlinkTe_41:e1:39 (00:30:64:41:e1:39),之后發生了切換,EPC變成了機器AdlinkTe_41:e1:45 (00:30:64:41:e1:45),EPC的IP沒變,在這個過程中,SCTP鏈接沒有斷開,心跳正常進行,eNodeB完全感知不到EPC的變化。
6 結束語
本文設計了基于OpenSAF的EPC設備的熱備解決方案,重點描述了EPC中SCTP模塊的熱備解決方案。使用本文描述的SCTP熱備解決方案,可以實現EPC發生故障后,自動切換到從設備,并迅速接管主設備的EPC業務,保證連接的所有eNodeB的SCTP鏈接不中斷,eNodeB對EPC的切換完全無感知。
參考文獻:
[1] 劉曉潔,黃永佳. Linux的雙機熱備系統的實現技術[J]. 計算機應用研究, 2007,24(4): 255-257.
[2] IETF RFC 2960. Stream control transmission protocol[S]. 2000.
[3] 武建鋒.荊文芳. 雙機系統可靠性研究[J]. 微型電腦應用, 2005(12): 13-14.
[4] 王延堯. 以太網技術與應用[M]. 北京: 人民郵電出版社, 2007.
[5] 姜堅華. 雙機熱備系統的技術研究和具體實現[J]. 微型電腦應用, 2004,20(3): 7-9.
[6] 鄭浩. 基于DRBD實現虛擬化系統的雙機熱備[J]. 通化師范學院學報, 2016,37(8): 69-71.
[7] ITU-T X214. Information technology-Open Systems Interconnection-Transport service definition[S]. 2000.
[8] 張鵬. 基于狀態檢測的服務器熱備方案設計與實現[J]. 電腦編程技巧與維護, 2014(14): 76-77.
[9] 岳浩. Linux操作系統教程[M]. 北京: 機械工業出版社, 2005.
[10] 陳劍雄. 基于嵌入式Linux現場總線型開放式數控系統研究[D]. 福州: 福州大學, 2006.endprint