增量同步约束条件下的多节点间主节点选举算法

时间:2022-09-02 01:46:09

增量同步约束条件下的多节点间主节点选举算法

摘 要: 为了满足在异地分布多中心的数据服务系统中,选取一个节点作为主节点,提供数据写服务,其他节点作为备节点提供读服务,主节点与备节点之间采用增量同步方式同步数据系统运行模式的需要。在此列举了在数据增量同步条件下进行主备选举时,需要遵循约束条件,提出一个基于数据版本作为主要约束条件的主备选举算法。描述了在选举过程中,节点的状态定义,各个状态转换关系,以及在各个状态下需要进行的相关处理。通过实际工程运用,验证了算法满足使用要求,同时总结了目前不足和后续改进要点。

关键词: 增量同步; 选举算法; 状态转换; 数据服务系统

中图分类号: TN911?34 文献标识码: A 文章编号: 1004?373X(2013)14?0051?04

Algorithm for primary?node election in multi nodes under condition of data incremental synchronization constraint

TAN Xing?qiu

( The 28th Research Institute of China Electronics Technology Group Corporation, Nanjng 210007, China)

Abstract: In order to meet the demands of selecting a node as the master node in the multi?center data service systems distributed in allopatry to provide data writing services, other nodes as backup nodes to provide reading services, and adopting the synchronous data system operating pattern of incremental synchronization mode between the master node and the backup node, the constraint conditions which should be abided when the main and preparation elections are performed under the condition of data incremental synchronization are listed in this paper. The main and preparation election algorithm on the basis of data version as the main constraint is put forward. The state definition of the node, the conversion relation between various states and the related processing in different situations are described. The algorithm was verified in the actual engineering application. The insufficiency and the future improvement points are pointed out in this paper.

Keywords: incremental synchronization; election algorithm; state transformation; data service system

0 引 言

在系统进行设计时,考虑到容灾备份[1]和负载均衡[2],需要在广域网上设置多个服务节点。多个服务节点之间,常需要选举出一个服务节点作为工作节点,完成系统的控制以及对数据进行更新,称此节点为“主”节点;其他节点作为“主”节点的备份,在“主”服务点失效的情况下接替“主”节点的工作,称这些节点为“备”节点。系统软件通过算法确定节点的工作状态的过程,称为“主备选择”过程。一般“主备选择”过程需要遵循以下原则:

(1)在网络状态良好的情况下,同一时刻系统内只应该有一个主节点;

(2)新节点的加入,不影响处于稳定状态主备关系;

(3)在节点集合失去主节点时或没有主节点时,启动主备选择过程;

(4)在网络故障,由于出现多个连通网络,而出现多个主节点时,可以自动冲突消解[3],保留一个节点作为主节点,其他节点降为备节点。

在实际的系统设计中,常需要考虑到网络带宽的限制,服务节点之间的数据同步,采用基于数据版本的增量同步[4]的方法时,这给节点之间的主备选择增加了以下两个约束条件:

(5)为了尽可能地减少数据丢失,在主节点失效后,需要选举数据版本最新的备节点接替主节点的工作。

(6)为了保证数据的一致性,在系统的工作过程中不能容忍双主情况的存在,即使双主处于不同的连通网络时,系统也不可恢复。

基于以上原因,本文提出在数据基于版本的增量同步下,在多节点间进行主备选择的算法。

1 相关名词说明

锁服务:相对于参与选举的节点而言,作为选举的外部的裁判,主要解决选举过程中可能出现的冲突而依靠节点自身状态无法判断的问题,如两个节点参加选举,而节点之间网络断线,从而自身无法选举出主节点地情况。只在选举时,特定的情况下起作用,平时节点的工作状态不依赖锁服务的存在。锁服务采用先申请、先获得的原则。申请成功后,申请的节点向锁服务发送心跳报[5],来维持对锁服务的拥有。

数据版本:数据每次更新形成一个数据版本,数据版本由节点与序列组合成的版本号和更新日志组成,在原主备节点间数据同步的情况下,备节点可以依据更新日志在本地完成相应版本的增量同步。

全同步:在备节点与主节点不能继续进行增量同步的情况下,将所有数据同步到备节点的情况,一般在节点之间的版本差异超过更新日志存储的范围时发生。

连接数:一个节点可以正常与其他节点之间进行双向通信的节点数目,称为连接数[6]。

2 节点状态定义

未同步:包括节点不可探测或未能与主节点进行联系的状态,新节点加入系统,先从未同步状态开始进行处理,未同步状态为常态。

初始化:为节点与主节点取得联系后,进行初始化全同步的工作,以达到可以作为备运行的状态,为暂态[7]。

备:正常工作,可以与主节点之间进行增量同步,可以作为备选节点接替主节点工作的状态,为常态。

选主:备节点在发现失去主节点时,申请作为主节点的工作状态,为暂态。

升主:选主节点在初步判断后,并经过收敛时间,认为自身能够作为候选主节点的状态,是选主节点转换为主节点的中间状态,为暂态。

主:当前系统的主工作节点,为稳态[7]。

降备:主工作节点在收到主节点切换命令后降为备节点的过渡状态,此状态是一个人工触发而出现的状态,在软件自动选举的过程中不会出现,为暂态。

数据处理在各个状态下需要遵循的约束如表1所示。

3 节点状态转换关系及状态处理

节点加入系统从“未同步”状态开始,根据触发条件进行相应的状态转换从而融入系统进行工作。图1给出节点状态转换关系。

图1 节点状态转换关系

表1 各状态数据处理模块需要遵循的约束

第3.1~3.7节,以伪代码的方式,给出节点处于各状态下,主备选择可能预见的各种触发条件和在此触发条件下需要进行的相关处理。

3.1 未同步状态的处理

if(收到其他节点的心跳探测报文)

then{ 上报自身为“未同步”状态

if(节点心跳探测报文表明节点为“主”状态) then向主节点发送同步申请报文;}

if(收到主节点的同步应答报文)

then{ 记录下主节点的地址

if(应答报文为“增量同步”) then设置自身的状态为“备”;

if(应答的报文为“全同步”) then设置自身的状态为“初始化”;

立即向其他节点报告自身状态;}

if(收到升主命令) then设置自身为“主”;应答控制节点;向其他节点报告;

if(周期探测时控到) then 向地址列表内的所有节点发送状态探寻心跳报文;

3.2 初始化状态的处理

if(收到其他节点的心跳探测报文)

then {if(节点心跳探测报文表明节点为非“主”状态) then上报自身为“初始化”状态

if(节点心跳探测报文表明节点为“主”状态)。

then{ if(节点地址==当前记录的主节点地址) then上报自身为“初始化”状态;

if(节点地址!= 当前记录的主节点地址)

then 删除主节点地址,更改自身状态为“未同步”,广播“未同步”;

}

}

if(收到主节点的同步应答报文) then{

if(应答报文为“增量同步”) then 设置自身的状态为“备”,广播自身为“备”;}

if(应答报文非“增量同步”) then继续进行全同步的过程;

}

if(周期探测时控到)

then { 向地址列表内的所有节点发送状态探寻心跳报文;

计算自身当前的连接数;

if(节点的连接数小于N/2) then { 删除主节点地址,更改自身状态为“未同步”;

广播自身为“未同步”;}

}

3.3 备状态的处理

if(收到其他节点的心跳探测报文) then

{

if(节点心跳探测报文表明节点为“主”状态) &&(节点地址!= 当前主节点地址)

then {记录新主节点地址,广播自身为“备”状态;}

}

if(收到主节点的同步应答报文) then

{

if(应答报文为不可“增量同步”) then{更改自身状态为“未同步”,广播 “未同步”;}

if(应答报文“增量同步”) then 进行同步的过程;

}

if(收到设置主节点命令) then { 更改自身状态为“主”;

应答设置主的命令,广播自身为“主”;}

if(周期探测时控到) then

{

向地址列表内的所有节点发送状态探寻心跳报文;

if(主节点不在线) then { 删除主节点地址;

更改自身状态为“选主”,广播状态 “选主”;;

设置选主超时;

}

计算自身当前的连接数;

if(节点的连接数小于) then {删除主节点的地址;

更改自身状态为“未同步”,并广播 “未同步”;}

}

3.4 选主状态的处理

if(收到其他节点的心跳探测报文)then{

if(节点心跳探测报文表明节点为非“主”状态) then上报自身为“选主”状态

if(节点心跳探测报文表明节点为“主”状态) then

记录主节点地址,更改自身状态为“备”,并广播自身状态;

}

if(选主超时时间到达) then {

if(节点均为“选主”或者“未知”,且自身数据版本最高) then {

设置自身的状态为“升主”,并设置升主超时,广播自身为“升主”;}

else{ 设置选主超时;}

if{周期探测时控到} then {

向地址列表内的所有节点发送状态探寻心跳报文;

计算自身当前的连接数;

if(节点的连接数小于) then 更改自身状态为“未同步”,并广播;

}

3.5 升主状态的处理

if(节点的连接数大于等于) then {

向锁服务申请锁

if(获得锁)then 更改自身状态为“主”,并广播;

if(被锁服务拒绝)then 更改自身状态为“选主”,并广播;

}

if(升主状态超时)then更改自身状态为“选主”,并广播;

if(节点连接数小于)then更改自身状态为“未同步”,并广播;

3.6 主状态的处理

if(收到其他节点的心跳探测报文) then 应答自身为“主”状态;

if(收到降备的控制报文)then 设置自身的状态为“降备”,并设置降备超时;

if(周期探测时控到)then {

向地址列表内的所有节点发送状态探寻心跳报文;

计算自身当前的连接数;

if(连接数小于) then更改自身状态为“未同步”,并广播;

}

3.7 降备状态的处理

if(收到其他节点的心跳探测报文) then 应答自身为“主”状态;

if(降备状态超时)then {

设置自身的状态为“主”;

删除降备的目标主机节点;

回答降备过程失败

}

if(目标主机节点的同步完成) then{

则设置自身的状态为“备”;

向目标主机节点发送升主命令,并广播自身为“备”;

if(周期探测时控到)then {

向地址列表内的所有节点发送状态探寻心跳报文;

计算自身当前的连接数;

if(节点的连接数小于)then 更改自身状态为“未同步”,并广播;

}

4 结 语

本文给出一个基于数据版本作为主要选择条件的主备选择算法,描述了在主备选择过程中,节点的状态定义,各个状态转换关系,以及在各个状态下需要进行的相关处理。此算法已在实际使用中得到验证。但还存在以下问题,需要进一步优化:锁服务本身在切换时,会变成关键节点[8],异地主备[9]不能很好地解决,需要进一步研究;由于过程控制过于严格,本算法在网络振荡[10]的情况下,会产生假全同步需求,会浪费一定的资源,可以考虑设计检查点,进一步研究在节点重新入网时人工参与从而解决全同步问题。

参考文献

[1] 范建华,赵文.容灾备份异地架构在“不可抗力因素”下的应用研究[J].陕西理工学院学报:自然科学版,2011,27(1):54?59.

[2] 杨锦,李肯立,吴帆.异构分布式系统的负载均衡调度算法[J]. 计算机工程,2012,38(2):166?168.

[3] 陈立杉,段莉莉.基于相关度的同步协同设计冲突消解策略[J].武汉大学学报:工学版,2012,45(2):268?272.

[4] 王玉标,饶锡如,何盼.异构环境下数据库增量同步更新机制[J].计算机工程与设计,2011,32(3):948?951.

[5] 田锦.GPRS数据分包长度和心跳包间隔性能分析[J].电讯技术,2012,52(4):576?580.

[6] 孟辉,张东戈,陶九阳.基于感知信息共享的C2网络特征分析[J].指挥控制与仿真,2009,31(1):26?29.

[7] 刘卫民,樊越甫,刘方.基于磁通补偿的新型有源电力滤波器的暂态特性分析[J].高压电器,2012,48(6):65?69.

[8] 陈燕.分布式虚拟实验系统关键节点设计[J].电脑编程技巧与维护,2011(12):88?89.

[9] 王红熳.智能网容灾系统设计的关键技术研究[D].北京:北京邮电大学,2009.

[10] 李新乐.军队计算机网络安全防护探析[J].电脑知识与技术, 2012(8):5312?5313.

[11] 景慎艳.分布式数据库同步技术及其应用[J].现代电子技术,2008,31(12):48?45.

上一篇:基于小波变换的高精度旋转变压器信号数字转换... 下一篇:基于局部和整体特征的飞机识别方法