王鑫鹏+李晗+王俊
【摘 要】移动通信网络中,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