李 洁,黄婷熙,潘涛涛
(武汉邮电科学研究院;武汉烽火网络有限责任公司,湖北 武汉 430074)
现在的通信网络中,对于大容量的机架式通信设备的业务可靠性、稳定性有很高的要求,提高其设备运行的稳定性、可靠性,是机架式通信设备必须解决的重要课题。主备倒换技术是提高通信设备可运维性的重要解决方案之一。本文提出一种私有的高可靠性通信设备主备倒换软件实现方式,优化了主备倒换流程,有效提高了主备倒换数据的准确性,并缩短了主备倒换的时间。
新主备倒换的方式,从以下两点进行改进:1)改变了倒换的逻辑,将主备控制卡的数据同步过程修改为实时同步,使主备控制卡的状态随时保持一致;2)建立一条私有的二层协议管理通道,在用套接字保证主备数据传递准确性的同时,独立的管理通道也保证了主备状态倒换的准确性和及时性。前者是逻辑的改进,后者是通信通道的改进。
新的实现方式是将主备倒换过程中的主备数据同步和倒换的过程分离开来,在主备倒换时只需转变主备控制卡的卡状态即可。其实现前提是主备控制卡的数据和状态是实时同步的。下面就介绍其软件实现原理。
由协议HA的状态机维护主、备控制卡状态,它们之间的通信不同于控制卡与其业务线卡之间的通信方式。HA协议提供两条相互独立的主备卡控制卡通道:一条为主备卡之间的数据传输通道,将TCP运用在数据链路层,通过套接字传送数据;另一条为主备控制卡之间的HA控制信息传送通道,建立在数据链路层上,运用一种可靠的点到点的传输方法,可以提供QoS保障。如图1所示。
图1 HA通道设计
数据通道采用全双工方式,采用类似TCP协议的TCP2来传输,拥有TCP通信的特有超时重传和捎带确认机制,保证主备控制卡传送数据的准确性。IP2通信协议中地址分别使用主备双方的带外MAC地址取代IP地址,并通过三次握手的方式建立连接。
控制通道是由私有的可靠通信协议HA提供的。它是一条独立的专门用来传输HA控制报文的通道。用来防止在数据传输过程中,系统正常的业务数据通信影响控制报文的通信,避免数据拥塞致使控制报文丢失或者延时后导致HA状态机发生错误,从而保证主备状态准确及时地切换。
基于HA状态机,主备数据同步分两种情况,一种是实时同步,一种是批量同步。
1)数据的实时同步
主备数据的实时同步指的是线卡在业务进行中,向主控制卡发送信息。主控制卡会及时使用套接字转发数据到备用线卡。收到备控制卡回复后,确认备控制线卡收到数据,才会响应业务线卡。而备用控制卡会和主控制进行同样的操作,只是这些操作并不下发给线卡。这样可以有效地提高同步的效率,保证主备控制卡的数据和状态的一致,做到真正的无缝倒换。
2)数据的批量同步
数据的批量同步发生在控制卡插入系统初期。主控制卡上的配置文件同步到备控制卡的过程,此时备控制卡只处理来自主控制卡的报文,其他的控制报文全部丢弃,并且从软件上关闭了备控制卡向业务卡发送数据的通道。该过程数据同样是使用套接字在主备控制线卡间的独立通道上进行传输,保证了数据的正确性。
本节从主备倒换条件、主备倒换流程、主备竞争、异常倒换处理方式这4方面来论述。
没有了数据同步,整个步骤的主备倒换过程简单了很多,只要满足主备倒换的条件就可以进行正常的倒换,触发条件包括:1)后台的命令发起的倒换;2)前台按键倒换;3)网口故障触发的倒换;4)插拔卡引发的倒换[1-3]。
经过以上论述可知,在基于HA的倒换系统里,关键步骤——数据同步过程是在倒换步骤外进行的,倒换的步骤仅剩下转换主备控制卡标识。
在系统启动初期,会创建一条控制卡之间消息交互的通道。在满足倒换条件后,主控制卡会向备控制卡发起倒换消息,并会通知业务线卡和软件层,且软件层逐层向上层应用发出倒换通知。最后主控制卡转换自己的状态到备控制卡,同时备控制卡转换自己的状态到主控制卡,并恢复正常工作。
协议规定,控制卡在系统的状态有3种,分别为主控制卡状态、备控制卡状态和候选卡状态。在控制卡插入系统的初期,都为候选卡状态,此状态没有控制系统的权限。并且协议规定系统正常状态下的任何时刻只允许一个控制卡控制系统,将这个卡称为主控制卡,其余的控制卡称为备份控制卡。控制卡状态转移图如图2所示。
图2 控制卡状态转移图
当一块控制卡插入系统并启动后,状态为候选卡。首先向控制通道广播发送hello消息,通告自己的存在,如果系统中已经存在主控制卡,那么将对这个卡发送hello reply,这块新插入的控制卡收到该消息后就将自己设置为备份控制卡。
如果插入的控制卡发送3次hello消息后,没有收到来自主控制卡的hello reply,也没有收到主控制卡发送的周期性的hello消息,那么这块控制卡就将自己的角色设置为主控制卡控制系统,并周期性地在控制卡使用的控制通道上广播hello消息。
如果系统上电时就具备两块控制卡,由于初始时,两块控制卡都不是主控卡,通过发送hello包通信,知道了对方的存在。此时需要竞争选举出主控制卡,选举原则是根据槽位大小,选槽位号小的控制卡为主控制卡,发送hello reply包,通知另一块候选卡状态改变为备控制卡,然后在主控制卡上执行正常工作。此时备指控卡只处理来自主控制卡的报文,并且关闭备控制卡数据转发的通道。
当控制卡成为备份控制卡后,也需要周期地发送hello消息给主控制卡以通告自己的存在。主控制卡收到备份控制卡发送的hello消息,不需要回复hello reply。如果主控制卡在一定时间内接收不到备份控制卡的hello消息,就认为备份控制卡已经工作不正常或者不存在。
如果主控制卡出现故障而没有周期性地发送hello消息,当备份控制卡在设定时间内没有接收到主控制卡的hello消息时,备份控制卡就将变为主控制卡。这样的协商方式,即使在控制卡之间通道故障时,也不会出现双备控制卡,系统无管理的现象[4]。
如果控制卡之间通道故障,出现双主控现象。在通道恢复后,主控制卡收到hello消息时,发现hello消息的角色也是主控制卡,就会进行双主控卡的选举。若自己的槽位号比较小,那么发送hello reply包通知另一块主控制卡状态改变为备控制卡,若自己的槽位号比对方大,那么设置自己的角色为备份控制卡[3]。
实验方法:使用Testcenter向高端交换机上的两张业务线卡发送固定流量的数据包,测试卡的吞吐量。测试开始后telent主控制卡,主备倒换,看测试结果是否产生丢包。
步骤1:Testcenter上4个端口连接高端交换机上的的两张业务线卡以两两发包的模式进行吞吐量的测试。配置如图3~5所示。
图3 拓扑图
图4 Testcenter配置1(截图)
图5 Testcenter配置2(截图)
步骤2:telent到主控制卡,show主控状态。
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:测试停止后生成测试结果如图6所示,查看是否有丢包。
图6 Testcenter测试结果(截图)
由实验结果可知,整个过程telent没有断开,并可以持续地下配置命令。查看测试结果可知并未丢包,且可以完全实现无缝倒换。
本文介绍的主备倒换方式相较于其他方式进行了改进,避免了主备倒换过程数据同步所花费的大量时间,确保了主备控制卡间数据的准确性,做到了整个系统在倒换前后维护的数据和状态一致,使得倒换这个复杂的过程高度简化,并且可靠性大大提高。
[1] 王继刚,顾国昌,芦东昕.高可靠性通信设备主备倒换软件的设计[J].电信科学,2003(11):19-22.
[2] 施世华,高西全,靳松杰,等.高可靠性通信设备的主备倒换设计[J].电子科技,2007(7):47-50.
[3] 胡天骄,郭旭静,王祖林.网管软件主备切换协议的设计和验证[J].电子质量,2011(7):26-29.
[4] 何先波,李志蜀,唐宁九,等.面向通信领域的主备倒换与数据同步技术[J].计算机应用,2005(10):2312-2314.