CN104468163B - 容灾网络组网的方法、装置及容灾网络 - Google Patents
容灾网络组网的方法、装置及容灾网络 Download PDFInfo
- Publication number
- CN104468163B CN104468163B CN201310426683.2A CN201310426683A CN104468163B CN 104468163 B CN104468163 B CN 104468163B CN 201310426683 A CN201310426683 A CN 201310426683A CN 104468163 B CN104468163 B CN 104468163B
- Authority
- CN
- China
- Prior art keywords
- node
- user data
- write operation
- ident value
- local
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种容灾网络组网的方法、装置及容灾网络,涉及互联网技术领域,能够解决主节点切换过程复杂且效率低下的问题。本发明涉及的方法包括:定期接收其他节点发送的心跳报文;任意一个节点接收客户端发送的写操作指令;根据心跳报文中用户数据标识值的新旧在所有节点中选择一个主节点;将所述写操作指令转发给所述主节点进行写操作处理。本发明主要应用于容灾网络运维的过程中。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种容灾网络组网的方法、装置及容灾网络。
背景技术
随着社交网络(Social Networking Services,简称SNS)的迅猛发展,参与互联网活动的用户规模不断扩大。通常客户端通过写操作将数据上传至网络侧,通过读操作从网络侧获取数据。例如,某用户账号发布了一张照片,该用户客户端通过写操作将该照片上传至网络侧节点(例如网络侧服务器),另一好友账户通过读操作从网络侧节点访问该照片数据,对照片进行浏览。
容灾网络是一种数据冗余网络,通过将相同用户数据备份到多个节点上的方式,消除某个节点发生故障对用户操作带来的影响。通常,容灾网络包括一个主节点和多个副节点,所有节点都负责备份同一份数据,主节点可以处理写操作和读操作,而副节点只能够处理读操作。当主节点通过写操作处理获得一条用户数据后,会将该用户数据同步给其他所有副节点,以便保持各个节点之间数据的强一致性,使得客户端可以通过主节点或任意一个副节点获取到用户数据。例如,将部署在北京的服务器1作为主节点,将部署在天津的服务器2和部署在河北的服务器3作为副节点。服务器1作为主节点可以将京津冀用户通过写操作写入的用户数据同步给服务器2和服务器3。当北京地区因发生地质灾害导致服务器1瘫痪时,京津冀三地的客户端仍可以从服务器2和服务器3中访问用户数据。
通过以上的描述可以看出,容灾网络具有以下几种特征:1)网络由多个节点组成,其中包含一个主节点和多个副节点;2)主节点除能够处理客户端的读操作之外还可以处理客户端的写操作,而副节点只能处理读操作;3)由于副节点无法处理写操作,即无法获取客户端的用户数据,因此主节点需要将获取的用户数据同步给各个副节点,以保证当主节点发生故障时客户端可以从副节点获取用户数据。
基于以上特征,当容灾网络中的主节点发生故障时,虽然客户端可以通过副节点进行读操作,但是无法通过副节点进行写操作,因此为消除无法进行写操作对用户带来的影响,需要从副节点中重新选择主节点,并对原主节点进行故障排除和数据恢复。对于重新选择主节点,目前的实现方式主要有两种:1)网络运维人员手动选择新的主节点:网络运维人员根据每个副节点中用户数据的新旧程度选择出存储了最新用户数据的副节点作为新的主节点,并对该副节点进行手动配置;2)通过投票算法选择新的主节点:每个副节点根据各个副节点中用户数据的新旧投票选举一个副节点作为新的主节点,中心服务器或者仲裁者节点(副节点中的某一个节点)收集各个副节点发送的投票,根据对投票的统计结果确定新的主节点。
在实现上述选择主节点的过程中,发明人发现现有技术中至少存在如下问题:对于方式1)而言,需要人工选取主节点,由于容灾网络涉及的节点数量和用户数据量都非常庞大,因此人工选择的方式效率太低且容易出错。对于方式2)而言,如果副节点的得票数未达到选举条件(例如得票数超过半数),则中心服务器或者仲裁者节点还需重新组织新一轮的投票,直到选举出符合条件的主节点为止。这种选举方式往往需要通过多轮投票才能够选择出新的主节点,实现过程过于复杂并且节点之间的信令开销过大。另外,当由于存在网络故障等原因导致节点之间通信中断时,中心服务器或者仲裁者节点会漏接部分甚至全部副节点的投票,基于不完整投票的节点选举会选举出错误的主节点,选举正确性不高。
发明内容
本发明实施例提供一种容灾网络组网的方法、装置及容灾网络,能够解决主节点切换过程复杂且效率低下的问题。
一方面,本发明实施例提供了一种容灾网络组网的方法,包括:
定期接收其他节点发送的心跳报文,所述心跳报文中携带有本地最新的用户数据标识值;
任意一个节点接收客户端发送的写操作指令;
根据用户数据标识值的新旧在所有节点中选择一个主节点;
将所述写操作指令转发给所述主节点进行写操作处理。
另一方面,本发明实施例还提供了一种容灾网络组网的装置,包括:
报文收发单元,用于定期接收其他节点发送的心跳报文,所述心跳报文中携带有本地最新的用户数据标识值;
指令收发单元,用于接收客户端发送的写操作指令;
处理单元,用于根据所述报文收发单元接收的用户数据标识值的新旧在所有节点中选择一个主节点;
所述指令收发单元还用于将接收的所述写操作指令转发给所述处理单元选择的所述主节点进行写操作处理。
再一方面,本发明实施例还提供了一种容灾网络,所述网络包括至少两个节点;
每个节点定期接收其他节点发送的心跳报文,所述心跳报文中携带有本地最新的用户数据标识值;
当客户端上报写操作指令时,任意一个节点接收该写操作指令,接收所述写操作指令的节点根据其他节点发送的心跳报文中用户数据标识值的新旧,在所有节点中选择一个主节点,并将所述写操作指令转发给所述主节点进行写操作处理。
本发明实施例提供的容灾网络组网的方法、装置及容灾网络,每个节点能够定期接收其他节点发送的携带有本地最新的用户数据标识值的心跳报文,当客户端上报写操作指令时,随机由任意一个节点接收该写操作指令,对于接收写操作指令的节点,根据用户数据标识值的新旧在包括节点自身在内的所有节点中选择一个主节点,最后将该写操作指令转发给主节点进行写操作处理。与现有技术中将某个节点固定作为主节点相比,可以在客户端上报写操作指令时,以每个节点中的最新用户数据标识值为依据,选择出一个主节点进行写操作处理,当主节点发生故障无法写入用户数据时,由于与其他节点相比该主节的最新用户数据标识值已经过时,因此网络内部可以自动将其他节点切换为主节点,由此实现主节点的自动切换。与人工切换主节点相比,可以极大提高节点切换的效率和准确率,而与投票算法切换主节点相比,则能够大大简化节点切换的过程,减少网络内部各个节点之间的信令开销。与此同时,本发明实施例提供的容灾网络组网的方法、装置及容灾网络,还能够仅基于网络内部已有的节点实现主节点切换,无需中心服务器或仲裁者节点等上层逻辑控制设备,因此与现有技术相比还可以降低网络运维的硬件成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所基于的容灾网络的架构示意图;
图2为本发明实施例中容灾网络组网的方法流程图;
图3为本发明实施例中另一个容灾网络组网的方法流程图;
图4为本发明实施例中对数据同步状态表表项进行遍历的方法流程图;
图5为本发明实施例中容灾网络组网的装置的结构示意图;
图6为本发明实施例中另一个容灾网络组网的装置的结构示意图;
图7为本发明实施例中再一个容灾网络组网的装置的结构示意图;
图8为本发明实施例中容灾网络的网络示意图。
具体实施方式
下面将结合本实施例中的附图,对本实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了更好的对本实施例进行说明,首先对本实施例基于的容灾网络架构进行简要介绍。容灾网络由多个部署在不同地域的同质节点组成,这些节点被逻辑划分为主节点和副节点,主节点能够对读写操作进行处理,副节点只能处理读操作。如图1所示,节点1至节点4中以节点1作为主节点,节点2至节点4作为副节点,各个节点两两之间可以进行通信。下面基于图1所示的容灾网络,对本实施例进行说明。
本实施例提供了一种容灾网络组网的方法,如图2所示,该方法包括:
201、定期接收其他节点发送的心跳报文。
每一个节点定期向网络中其他所有节点发送心跳报文。该心跳报文中携带有本地最新的用户数据标识值,该用户数据标识值用于对节点写入用户数据的先后次序进行标识。通常,一条用户数据对应一个用户数据标识值,节点在作为主节点写入一条用户数据,或者作为副节点接收到一条主节点同步的用户数据后,为新获取的用户数据分配用户数据标识值。事例性的,节点中用户数据与用户数据标识值之间的关联关系如下表所示,其中最大的用户数据标识值对应的用户数据为节点最新获取的用户数据。
用户数据 | 用户数据标识值 |
用户数据5 | 1005 |
用户数据4 | 1004 |
用户数据3 | 1003 |
用户数据2 | 1002 |
用户数据1 | 1001 |
在发送心跳报文时,节点将本地最新的用户数据标识值,即节点最新写入的用户数据所对应的标识值添加到心跳报文中进行发送,对应上表,节点将用户数据5的用户数据标识值1005添加到心跳报文中发送给其他节点。通过心跳报文发送本地最新的用户数据标识值的目的在于,为后续选择主节点提供判断依据。在容灾网络中,通常将拥有最新用户数据的节点选择为主节点,由于节点在写入用户数据后会将该用户数据同步给其他节点,除新写入的用户数据外,该节点也保存有其他副节点中的相对较旧的用户数据,因此拥有最新用户数据的节点用户数据更加完善,适宜被选择为主节点。
本实施例中,节点发送心跳报文的方式包括但不限于下述两种方式:1)在容灾网络中,向其他所有节点广播发送心跳报文;2)通过单播的方式分别向其他节点发送心跳报文。本实施例对发送心跳报文的实现方式不做过多限定。
对于容灾网络来说,用户数据的写入通常在时间轴上是延续不断且随机的,由此导致节点之间的用户数据同步过程不断发生,因此在本实施例中,节点定期发送心跳报文,而非仅在网络初始设置时一次性发送心跳报文。所谓定期发送具体可以是按照预设时间间隔进行发送,或者按照单位时间内的预设发送次数进行发送,本实施例对此不做限制。
202、任意一个节点接收客户端发送的写操作指令。
当客户端上报写操作指令时,现有技术中是由主节点,即具有写操作处理能力的节点接收并处理该写操作指令。与现有技术不同的是,在本实施例中,包括主节点和副节点在内的所有节点均可以接收客户端上报的写操作指令,容灾网络可以通过随机算法将客户端上报的写操作指令随机分配给某个节点,或者根据节点的设备物理标识为所有节点轮询分配写操作指令,再或者可以按照指令上报时刻处理资源最闲原则选择节点进行分配。
对于图1所示的容灾网络,本实施例以将写操作指令分配给节点4为例进行说明。需要强调的是,在分配写操作指令时,容灾网络是以上述规则进行分配,而非一定分配给前次写操作处理所选择出的主节点。此外,作为本实施例的另一种实现方式,容灾网络也可以优先将写操作指令分配给前次写操作处理所选择出的主节点,然后按照图2所示的流程,通过该主节点将写操作指令转发给本次写操作处理选择出的实际主节点(也可能还是原来的主节点)。对于这种实现方式,网络运维人员可以在网络初始化设置时指定一个主节点,或者通过上述随机、轮询或“最闲”规则选择主节点,本实施例对第一次分配写操作指令的具体实现方式不做限定。
203、根据用户数据标识值的新旧在所有节点中选择一个主节点。
在图1所示的容灾网络中,节点4接收到写操作指令后,从最近一次接收的3条心跳报文(节点1至节点3分别发送的心跳报文)中,分别获取节点1至节点3的本地最新的用户数据标识值。所谓“本地”限定的范围为节点内,不同节点的本地最新用户数据标识值可能存在不同。例如主节点的本地最新用户数据标识值为1005,副节点的本地最新用户数据标识值为1004。需要说明的是,由于容灾网络中存在数据同步机制,因此从原理上讲,各节点的本地最新用户数据标识值应当相同,但是实际应用中节点间的本地最新用户数据标识值确有不同,其原因是从主节点写入用户数据到用户数据同步到副节点之间存在延时,并且节点间发送心跳报文的机制与用户数据同步机制相互独立。例如节点1写入用户数据5后发送心跳报文,此时节点1尚未将用户数据5同步给其他节点,节点1发送给节点4的心跳报文中的本地最新用户数据标识值为对应用户数据5的1005,而节点2由于其本地最新的用户数据为用户数据4,因此发送给节点4的心跳报文中的本地最新用户数据标识值为对应用户数据4的1004,由此可以看出,不同节点心跳报文中的本地最新用户数据标识值可能存在不同。
事例性的,节点1至节点3发送的本地最新的用户数据标识值分别1004(1)、1003(2)和1005(3),其中为描述清楚,将节点标号添加到用户数据标识值后的括号内。
节点4将上述3个本地最新用户数据标识值以及自身的本地最新用户数据标识值1004(4)一同进行比较,选择出本地最新用户数据标识值最大的节点作为主节点,即选择节点3作为新的主节点。
本实施例中,作为被分配写操作指令的节点,节点4也有可能将自身选择为主节点,在前次写操作处理过程中作为主节点的节点在本次写操作处理时也有可能被再次选择作为主节点。实际上,选择主节点的依据为各个节点的本地最新用户数据标识值,而与其他因素无关。
204、将写操作指令转发给主节点进行写操作处理。
节点4将被分配的写操作指令转发给节点3,节点3接收到该写操作指令后,对该写操作进行处理,写入新的用户数据(例如用户数据6),并将新写入的用户数据同步给其他节点。
本发明实施例提供的容灾网络组网的方法,将客户端上报的写操作指令随机分配给某个节点,该节点根据包含节点自身在内的各个节点的本地最新用户数据标识值,选择出一个用户数据最新的节点作为主节点,并将写操作指令转发给选择出的主节点进行处理。各节点之间通过定期发送心跳报文的方式相互通知本地的最新用户数据标识值,由此提供选择主节点的支持依据。与现有技术中人工切换主节点相比,能够实现主节点切换的完全自动化,节省人工成本,提高切换效率和准确率。并且与多次轮询选举主节点相比,能够仅依据本地最新用户数据标识值一项参数,一次性选择出新的主节点,大大减少容灾网络中的信令开销,同时能够准确选择出正确的主节点。此外,本实施例提供的容灾网络组网的方法,无需在容灾网络中增加上层中心服务器或仲裁者节点,能够节省网络运维的硬件成本。
作为对图2所示方法的详细说明及进一步扩展,本实施例还提供了一种容灾网络组网的方法。在目前的社交网络中,常常需要对统一资源定位符(Uniform ResourceLocator,简称URL)地址进行缩短。通常,网络中涉及的URL地址字符串过长,能够达到几十甚至一百多位字符。当用户需要在文本输入框中添加URL地址时,受文本输入框的字符数量限制,过长的URL地址会挤占用户可输入的字符数量。因此,可以通过哈希(HASH)算法将URL地址缩短为字符数较少的关键字KEY,通过关键字KEY替代URL地址进行相关的数据通信。本实施例主要基于URL地址缩短技术,以关键字KEY作为写操作的写入对象为例,对图2所示的方法进行详细说明及进一步扩展。如图3所示,所述方法包括:
301、按照预设周期,接收其他节点发送的携带有本地最大序列号的心跳报文。
节点按照预设周期,例如1秒/次或500毫秒/次的周期接收其他节点发送的携带有本地最大序列号(Sequence)的心跳报文。本实施例中以序列号作为用户数据KEY的标识值进行说明,该序列号用于对节点接收KEY的先后顺序进行标识,序列号越大其对应接收的KEY越新。例如节点先后依次接收了KEY1、KEY2和KEY3,则节点顺序为KEY1、KEY2和KEY3分配的序列号为01、02及03。
在发送心跳报文时,各个节点将本地最大的序列号添加到心跳报文中,即将本地最新获取的KEY所对应的序列号添加到心跳报文中。
302、根据包括节点自身在内的本地最大序列号在内的所有节点的本地最大序列号,构建数据同步状态表。
以图1中网络包含4个节点为例,每一个节点在接收到其他3个节点的心跳报文后,构建节点自身的数据同步状态表。以节点4为例,节点4构建的数据同步状态表如下表所示:
节点标识 | 最大序列号 |
节点1 | 04 |
节点2 | 03 |
节点3 | 05 |
节点4 | 04 |
本实施例中各节点按照预设周期发送心跳报文,因此每个节点在接收到新的心跳报文后,根据该报文中的最大序列号更新数据同步状态表中对应节点的最大序列号值。
303、任意一个节点接收客户端发送的写操作指令。
本步骤的实现方式与图2中步骤202的实现方式相同,此处不再赘述。
304、根据最大序列号的大小在所有节点中选择一个主节点。
由于步骤302中构建数据同步状态表里包含节点自身(节点4)的最大序列号,因此在选择主节点时,节点4同样为备选节点之一。
具体的:
304a、对数据同步状态表中的本地最大序列号进行遍历,选择出全网最大序列号。
如图4所示:
401、从数据同步状态表中的第一条表项开始进行遍历;
402、将第一条表项中的最大序列号值赋值到预定义的空变量last_q中;
403、遍历下一条表项,如果遍历到下一条表项则执行步骤404,如果遍历完成则结束;
404、判断当前遍历的表项中的最大序列号值是否小于last_q中的变量值,得出判断结果,若结果为是则重复执行步骤403,若结果为否则执行步骤405;
405、将当前遍历的最大序列号值赋值到last_q中,然后重复执行步骤403。
举例来说,对于节点4而言,首先将第一条表项中节点1的最大序列号值“04”赋值到last_q。然后遍历第二条表项中节点2的最大序列号值,将遍历得到的节点2的最大序列号值“03”与last_q中的“04”相比较,丢弃掉遍历的最大序列号值“03”,接着遍历第三条表项中节点3的最大序列号值,将遍历得到的节点3的最大序列号值“05”与last_q中的“04”相比较,将最大序列号值“05”赋值到last_q中。节点4继续遍历第四条表项中节点4的最大序列号值,将遍历得到的节点4的最大序列号值“04”与last_q中的“05”相比较,丢弃掉遍历的最大序列号值“04”,由此得到容灾网络中的最大列号值为节点3的“05”。
304b、将全网最大序列号对应的节点确定为主节点。
根据遍历后的结果,节点4将对应最大序列号“05”的节点3确定为主节点。
305、将写操作指令转发给主节点进行写操作处理。
在确定节点3为主节点后,节点4将写操作指令通过单播的方式转发给节点3,由节点3对该写操作指令进行写入处理。
为进一步保障选择主节点的准确性,本实施例中还可以由接收转发写操作指令的节点对最大序列号进行遍历,二次确定自身是否应被选择为主节点。具体的,节点3在接收到写操作指令后,顺序按照步骤301、步骤302以及步骤304的实现方式,根据自身构建的数据同步状态表确定主节点。如果节点3的确定结果与节点4的确定结果相同,则节点3向节点4发送接收响应消息,并对该写操作指令进行写入处理,如果节点3的确定结果与节点4的确定结果不同,则节点3按照自身的确定结果将节点4转发的写操作指令再次转发给其他的节点。
此外,当节点4确定的主节点数量多于一个时,可以从确定的多个备选主节点中选择一个节点作为主节点进行转发,也可以将写操作指令转发给每一个备选主节点,由备选主节点分别根据上述实现方式进行二次遍历,重新确定自身是否能够作为主节点对该写操作指令进行处理。
由于容灾网络中节点之间存在数据同步时延,因此每个节点所构建的数据同步状态表并不严格相同,由此会产生不同节点确定的主节点不一致的问题。例如,节点4确定节点3为主节点,将写操作指令转发给节点3,节点3确定节点2为主节点,又转发给节点2,节点2最后又将写操作指令转发给节点4,由此产生网络内部震荡。
为解决可能导致的网络震荡对网络资源的消耗,在本实施例的一个优选技术方案中,网络内部可以控制写操作指令的转发次数,例如将在转发次数控制在3次以内。节点在转发写操作指令时(包括第一次转发以及接收后的二次转发),首先判断写操作指令的转发次数是否超过预设转发次数,该预设转发次数可以为由网络运维人员设置的一个大于或等于0的整数。若写操作指令的转发次数超过预设转发次数,则节点取消对写操作指令的转发,并向客户端提示写操作失败,若写操作指令的转发次数未超过预设转发次数,则节点根据实际需要对写操作指令再次进行转发。在转发过程中,节点可以在写操作指令添加一个几比特的标志位,用于标识该写操作指令已被转发的次数,其他节点接收到写操作指令后,根据该标志位判断是否可以再次进行转发,如果可以转发,则通过自身内部设置的计数器对该标志位进行加1修改操作,然后转发出去。优选的,可以将预设转发次数设置为0,即当节点3接收到节点4转发的写操作指令后,如果节点3对主节点的选择结果不认可,则直接向客户端返回写操作失败提示并不再进行转发。
306、在下一次心跳报文中,接收主节点发送的本地最大序列号。
主节点在写入新的KEY后,对自身的数据同步状态表进行更新,添加新的KEY所对应的序列号,并且将新添加的序列号作为更新后的本地最大序列号,在下一次心跳报文中发送给其他节点。
例如节点3在写入KEY后,将数据同步状态表中对应节点3的最大序列号更新为06,然后通过下一次的心跳报文发送给节点1、节点2和节点4.
307、根据主节点发送的本地最大序列号更新数据同步状态表。
在接收到下一次心跳报文后,节点4(以及节点1和节点2)对本地数据同步状态表进行更新,将对应节点3的最大序列号修改为06。
在节点3写入新KEY后,除了需要将新的最大序列号发送给其他节点之外,还需要将新写入的数据KEY同步给其他各个节点,其他节点在数据同步完成后,还需要将本地数据同步状态表中对应自身的最大序列号进行修改。
在本实施例的步骤301中,如果当前节点在预设时长内或者预设接收次数内未接收到某个节点发送的心跳报文,则在本地的数据同步状态表中将该节点对应的本地最大序列号修改为0,即相当于将未发送心跳报文的节点从容灾网络中删除。将节点的本地最大序列号修改为0的目的在于,使该节点不会被其他节点选择为主节点参与到写操作处理过程中(因为其本地最大序列号必定总将小于其他节点的本地最大序列号)。对于节点发生故障瘫痪的情况,该种机制可以自动实现故障节点的剔除,与图3所示的实现方式相结合,实现主节点的自动切换。
以上实施例是以接收写操作指令的节点(例如节点4)选择其他节点作为主节点为例进行的说明,当接收写操作指令的节点选择自身作为主节点时,需要自行对写操作指令进行写操作处理,并且与步骤306相似,将写操作处理对应的序列号更新为本地最大序列号,并在下一次心跳报文中将更新后的本地最大序列号发送给其他节点。
本实施例提供的容灾网络组网的方法,除可以实现主节点的自动化切换以外,还可以通过限制转发次数的方式避免网络内部产生震荡;通过对心跳报文消失的节点进行最大序列号清零的方式自动剔除故障节点;同时,由本节点切换机制所致,对于恢复故障的节点,其他节点还可以通过定期发送心跳报文的方式,向恢复故障的节点通知最新的序列号,由此能够通过最新的序列号为故障恢复节点同步缺失的用户数据,与现有技术中需要网络运维人员手动为故障恢复节点导入镜像文件、重做流水数据相比,可以实现故障节点的自动重载,节省人工成本并且提高运维效率。
参考图3所示方法的实现,本实施例还提供了一种容灾网络组网的装置,该装置位于诸如服务器等网络侧节点内部,用以对图3所示的方法进行实现。如图5所示,所述装置包括:报文收发单元51、指令收发单元52以及处理单元53,其中,
所述报文收发单元51,用于定期接收其他节点发送的心跳报文,所述心跳报文中携带有本地最新的用户数据标识值;
所述指令收发单元52,用于接收客户端发送的写操作指令;
所述处理单元53,用于根据所述报文收发单元51接收的用户数据标识值的新旧在所有节点中选择一个主节点;
所述指令收发单元52还用于将接收的所述写操作指令转发给所述处理单元53选择的所述主节点进行写操作处理。
进一步的,如图6所示,所述装置还包括:数据维护单元61;
所述报文收发单元51用于按照预设周期,接收其他节点发送的携带有本地最大序列号(Sequence)的心跳报文,所述序列号用于对节点接收用户数据的顺序进行标识,序列号越大其对应接收的用户数据越新;
所述数据维护单元61,用于根据包括节点自身在内的本地最大序列号在内的所有节点的本地最大序列号,构建数据同步状态表。
进一步的,如图7所示,所述处理单元53,包括:
遍历子单元71,用于对所述数据同步状态表中的本地最大序列号进行遍历,选择出全网最大序列号;
确定子单元72,用于将所述遍历子单元71选择的所述全网最大序列号对应的节点确定为所述主节点。
进一步的,如图6所示,所述装置还包括:判断单元62;
所述判断单元62,用于在所述指令收发单元52将所述写操作指令转发给所述主节点进行写操作处理之前,判断所述写操作指令的转发次数是否超过预设转发次数,所述预设转发次数为大于或等于0的整数;
所述指令收发单元52还用于当所述判断单元62判断所述写操作指令的转发次数超过所述预设转发次数时,取消对所述写操作指令的转发,并向客户端提示写操作失败。
进一步的,所述报文收发单元51还用于在所述指令收发单元52将所述写操作指令转发给所述主节点进行写操作处理之后,在下一次心跳报文中,接收所述主节点发送的本地最大序列号,所述本地最大序列号为所述写操作处理对应的序列号;
所述数据维护单元61还用于根据所述报文收发单元51接收的所述主节点发送的本地最大序列号更新所述数据同步状态表。
进一步的,如图7所示,所述处理单元53还包括:写操作子单元73;
所述写操作子单元73,用于当所述遍历子单元71将节点自身的本地最大序列号选择为全网最大序列号时,对所述写操作指令进行写操作处理;
所述数据维护单元61还用于将所述写操作子单元73写操作处理对应的序列号更新为所述本地最大序列号;
所述报文收发单元51还用于在下一次心跳报文中,将所述数据维护单元61更新后的本地最大序列号发送给其他节点。
进一步的,所述数据维护单元61还用于当所述报文收发单元51在预设时长或预设接收次数内未接收到某个节点发送的心跳报文时,在所述数据同步状态表中将该节点对应的本地最大序列号修改为0。
本发明实施例提供的容灾网络组网的装置,每个节点能够定期接收其他节点发送的携带有本地最新的用户数据标识值的心跳报文,当客户端上报写操作指令时,随机由任意一个节点接收该写操作指令,对于接收写操作指令的节点,根据用户数据标识值的新旧在包括节点自身在内的所有节点中选择一个主节点,最后将该写操作指令转发给主节点进行写操作处理。与现有技术中将某个节点固定作为主节点相比,可以在客户端上报写操作指令时,以每个节点中的最新用户数据标识值为依据,选择出一个主节点进行写操作处理,当主节点发生故障无法写入用户数据时,由于与其他节点相比该主节的最新用户数据标识值已经过时,因此网络内部可以自动将其他节点切换为主节点,由此实现主节点的自动切换。与人工切换主节点相比,可以极大提高节点切换的效率和准确率,而与投票算法切换主节点相比,则能够大大简化节点切换的过程,减少网络内部各个节点之间的信令开销。与此同时,本发明实施例提供的容灾网络组网的装置,还能够仅基于网络内部已有的节点实现主节点切换,无需中心服务器或仲裁者节点等上层逻辑控制设备,因此与现有技术相比还可以降低网络运维的硬件成本。
另外,本实施例提供的容灾网络组网的装置,除可以实现主节点的自动化切换以外,还可以通过限制转发次数的方式避免网络内部产生震荡;通过对心跳报文消失的节点进行最大序列号清零的方式自动剔除故障节点;同时,由本节点切换机制所致,对于恢复故障的节点,其他节点还可以通过定期发送心跳报文的方式,向恢复故障的节点通知最新的序列号,由此能够通过最新的序列号为故障恢复节点同步缺失的用户数据,与现有技术中需要网络运维人员手动为故障恢复节点导入镜像文件、重做流水数据相比,可以实现故障节点的自动重载,节省人工成本并且提高运维效率。
参考图5至图7中任一幅所示的装置,本实施例还提供了一种容灾网络。如图8所示,所述容灾网络由至少两个节点组成,每个节点中都包含有如图5至图7中任一幅所示的装置。所述至少两个节点两两之间能够进行数据通信,每个节点定期接收其他节点发送的心跳报文,所述心跳报文中携带有本地最新的用户数据标识值。当客户端上报写操作指令时,任意一个节点接收该写操作指令,接收所述写操作指令的节点根据其他节点发送的心跳报文中用户数据标识值的新旧,在所有节点中选择一个主节点,并将所述写操作指令转发给所述主节点进行写操作处理。
本发明实施例提供的容灾网络,每个节点能够定期接收其他节点发送的携带有本地最新的用户数据标识值的心跳报文,当客户端上报写操作指令时,随机由任意一个节点接收该写操作指令,对于接收写操作指令的节点,根据用户数据标识值的新旧在包括节点自身在内的所有节点中选择一个主节点,最后将该写操作指令转发给主节点进行写操作处理。与现有技术中将某个节点固定作为主节点相比,可以在客户端上报写操作指令时,以每个节点中的最新用户数据标识值为依据,选择出一个主节点进行写操作处理,当主节点发生故障无法写入用户数据时,由于与其他节点相比该主节的最新用户数据标识值已经过时,因此网络内部可以自动将其他节点切换为主节点,由此实现主节点的自动切换。与人工切换主节点相比,可以极大提高节点切换的效率和准确率,而与投票算法切换主节点相比,则能够大大简化节点切换的过程,减少网络内部各个节点之间的信令开销。与此同时,本发明实施例提供的容灾网络,还能够仅基于网络内部已有的节点实现主节点切换,无需中心服务器或仲裁者节点等上层逻辑控制设备,因此与现有技术相比还可以降低网络运维的硬件成本。
另外,本实施例提供的容灾网络,除可以实现主节点的自动化切换以外,还可以通过限制转发次数的方式避免网络内部产生震荡;通过对心跳报文消失的节点进行最大序列号清零的方式自动剔除故障节点;同时,由本节点切换机制所致,对于恢复故障的节点,其他节点还可以通过定期发送心跳报文的方式,向恢复故障的节点通知最新的序列号,由此能够通过最新的序列号为故障恢复节点同步缺失的用户数据,与现有技术中需要网络运维人员手动为故障恢复节点导入镜像文件、重做流水数据相比,可以实现故障节点的自动重载,节省人工成本并且提高运维效率。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (11)
1.一种容灾网络组网的方法,其特征在于,包括:
每个节点定期接收其他节点发送的心跳报文,所述心跳报文中携带有所述其他节点的本地最新的用户数据标识值;
任意一个节点接收客户端发送的写操作指令;
根据用户数据标识值的新旧在所有节点中选择一个主节点;
将所述写操作指令转发给所述主节点进行写操作处理;
其中,所述每个节点定期接收其他节点发送的心跳报文的步骤,包括:按照预设周期,接收其他节点发送的携带有本地最新的用户数据标识值的心跳报文,所述用户数据标识值用于对节点接收用户数据的顺序进行标识,用户数据标识值越大其对应接收的用户数据越新;根据包括节点自身在内的本地最新的用户数据标识值在内的所有节点的本地最新的用户数据标识值,构建数据同步状态表;
其中,所述根据用户数据标识值的新旧在所有节点中选择一个主节点的步骤,包括:对所述数据同步状态表中的本地最新的用户数据标识值进行遍历,选择出全网最新的用户数据标识值;将所述全网最新的用户数据标识值对应的节点确定为所述主节点。
2.根据权利要求1所述的方法,其特征在于,在所述将所述写操作指令转发给所述主节点进行写操作处理的步骤之前,所述方法进一步包括:
判断所述写操作指令的转发次数是否超过预设转发次数,所述预设转发次数为大于或等于0的整数;
若所述写操作指令的转发次数超过所述预设转发次数,则取消对所述写操作指令的转发,并向客户端提示写操作失败。
3.根据权利要求2所述的方法,其特征在于,在所述将所述写操作指令转发给所述主节点进行写操作处理的步骤之后,所述方法进一步包括:
在下一次心跳报文中,接收所述主节点发送的本地最新的用户数据标识值,所述本地最新的用户数据标识值为所述写操作处理对应的用户数据标识值;
根据所述主节点发送的本地最新的用户数据标识值更新所述数据同步状态表。
4.根据权利要求3所述的方法,其特征在于,当节点自身的本地最新的用户数据标识值为全网最新的用户数据标识值时,所述将所述写操作指令转发给所述主节点进行写操作处理的步骤,包括:
对所述写操作指令进行写操作处理;
将所述写操作处理对应的用户数据标识值更新为所述本地最新的用户数据标识值;
在下一次心跳报文中,将更新后的本地最新的用户数据标识值发送给其他节点。
5.根据权利要求4所述的方法,其特征在于,所述定期接收其他节点发送的心跳报文的步骤,包括:
若在预设时长或预设接收次数内未接收到某个节点发送的心跳报文,则在所述数据同步状态表中将该节点对应的本地最新的用户数据标识值修改为0。
6.一种容灾网络组网的装置,其特征在于,包括:
报文收发单元,用于定期接收其他节点发送的心跳报文,所述心跳报文中携带有所述其他节点的本地最新的用户数据标识值;
指令收发单元,用于接收客户端发送的写操作指令;
处理单元,用于根据所述报文收发单元接收的用户数据标识值的新旧在所有节点中选择一个主节点;
所述指令收发单元还用于将接收的所述写操作指令转发给所述处理单元选择的所述主节点进行写操作处理;
其中,所述装置还包括:数据维护单元;所述报文收发单元用于按照预设周期,接收其他节点发送的携带有本地最新的用户数据标识值的心跳报文,所述用户数据标识值用于对节点接收用户数据的顺序进行标识,用户数据标识值越大其对应接收的用户数据越新;所述数据维护单元,用于根据包括节点自身在内的本地最新的用户数据标识值在内的所有节点的本地最新的用户数据标识值,构建数据同步状态表;
其中,所述处理单元,包括:遍历子单元,用于对所述数据同步状态表中的本地最新的用户数据标识值进行遍历,选择出全网最新的用户数据标识值;确定子单元,用于将所述遍历子单元选择的所述全网最新的用户数据标识值对应的节点确定为所述主节点。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:判断单元;
所述判断单元,用于在所述指令收发单元将所述写操作指令转发给所述主节点进行写操作处理之前,判断所述写操作指令的转发次数是否超过预设转发次数,所述预设转发次数为大于或等于0的整数;
所述指令收发单元还用于当所述判断单元判断所述写操作指令的转发次数超过所述预设转发次数时,取消对所述写操作指令的转发,并向客户端提示写操作失败。
8.根据权利要求7所述的装置,其特征在于,所述报文收发单元还用于在所述指令收发单元将所述写操作指令转发给所述主节点进行写操作处理之后,在下一次心跳报文中,接收所述主节点发送的本地最新的用户数据标识值,所述本地最新的用户数据标识值为所述写操作处理对应的用户数据标识值;
所述数据维护单元还用于根据所述报文收发单元接收的所述主节点发送的本地最新的用户数据标识值更新所述数据同步状态表。
9.根据权利要求8所述的装置,其特征在于,所述处理单元还包括:写操作子单元;
所述写操作子单元,用于当所述遍历子单元将节点自身的本地最新的用户数据标识值选择为全网最新的用户数据标识值时,对所述写操作指令进行写操作处理;
所述数据维护单元还用于将所述写操作子单元写操作处理对应的用户数据标识值更新为所述本地最新的用户数据标识值;
所述报文收发单元还用于在下一次心跳报文中,将所述数据维护单元更新后的本地最新的用户数据标识值发送给其他节点。
10.根据权利要求9所述的装置,其特征在于,所述数据维护单元还用于当所述报文收发单元在预设时长或预设接收次数内未接收到某个节点发送的心跳报文时,在所述数据同步状态表中将该节点对应的本地最新的用户数据标识值修改为0。
11.一种容灾网络,其特征在于,所述网络包括至少两个节点;
每个节点定期接收其他节点发送的心跳报文,所述心跳报文中携带有所述其他节点的本地最新的用户数据标识值;
当客户端上报写操作指令时,任意一个节点接收该写操作指令,接收所述写操作指令的节点根据其他节点发送的心跳报文中用户数据标识值的新旧,在所有节点中选择一个主节点,并将所述写操作指令转发给所述主节点进行写操作处理;
其中,所述每个节点定期接收其他节点发送的心跳报文的步骤,包括:按照预设周期,接收其他节点发送的携带有本地最新的用户数据标识值的心跳报文,所述用户数据标识值用于对节点接收用户数据的顺序进行标识,用户数据标识值越大其对应接收的用户数据越新;根据包括节点自身在内的本地最新的用户数据标识值在内的所有节点的本地最新的用户数据标识值,构建数据同步状态表;其中,所述根据用户数据标识值的新旧在所有节点中选择一个主节点的步骤,包括:对所述数据同步状态表中的本地最新的用户数据标识值进行遍历,选择出全网最新的用户数据标识值;将所述全网最新的用户数据标识值对应的节点确定为所述主节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310426683.2A CN104468163B (zh) | 2013-09-18 | 2013-09-18 | 容灾网络组网的方法、装置及容灾网络 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310426683.2A CN104468163B (zh) | 2013-09-18 | 2013-09-18 | 容灾网络组网的方法、装置及容灾网络 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104468163A CN104468163A (zh) | 2015-03-25 |
CN104468163B true CN104468163B (zh) | 2018-11-09 |
Family
ID=52913587
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310426683.2A Active CN104468163B (zh) | 2013-09-18 | 2013-09-18 | 容灾网络组网的方法、装置及容灾网络 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104468163B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105306566A (zh) * | 2015-10-22 | 2016-02-03 | 创新科存储技术(深圳)有限公司 | 一种云存储系统中选举主控节点的方法及系统 |
CN106911728B (zh) * | 2015-12-22 | 2019-11-29 | 华为技术服务有限公司 | 分布式系统中主节点的选取方法和装置 |
CN105812191A (zh) * | 2016-04-28 | 2016-07-27 | 杭州华三通信技术有限公司 | 一种容灾切换方法及装置 |
CN106452836B (zh) * | 2016-08-31 | 2019-12-13 | 北京小米移动软件有限公司 | 主节点设置方法及装置 |
CN107038192B (zh) * | 2016-11-17 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 数据库容灾方法和装置 |
CN106817250B (zh) * | 2016-12-23 | 2020-07-10 | 东软集团股份有限公司 | 一种动态选举方法及系统 |
CN108616566B (zh) * | 2018-03-14 | 2021-02-23 | 华为技术有限公司 | raft分布式系统选主方法、相关设备及系统 |
CN108769118B (zh) * | 2018-04-23 | 2022-01-21 | 网宿科技股份有限公司 | 一种分布式系统中主节点的选取方法及装置 |
CN109167690A (zh) * | 2018-09-25 | 2019-01-08 | 郑州云海信息技术有限公司 | 一种分布式系统中节点服务的恢复方法、装置及相关设备 |
WO2019072296A2 (en) * | 2018-12-13 | 2019-04-18 | Alibaba Group Holding Limited | REALIZING A CHANGE OF A PRIMARY NODE IN A DISTRIBUTED SYSTEM |
CN113783916B (zh) * | 2020-10-16 | 2022-12-27 | 北京沃东天骏信息技术有限公司 | 信息同步方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101309167A (zh) * | 2008-06-27 | 2008-11-19 | 华中科技大学 | 基于集群备份的容灾系统及方法 |
CN102929696A (zh) * | 2012-09-28 | 2013-02-13 | 北京搜狐新媒体信息技术有限公司 | 一种分布式系统中心节点构建、提交、监控方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110258481A1 (en) * | 2010-04-14 | 2011-10-20 | International Business Machines Corporation | Deploying A Virtual Machine For Disaster Recovery In A Cloud Computing Environment |
-
2013
- 2013-09-18 CN CN201310426683.2A patent/CN104468163B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101309167A (zh) * | 2008-06-27 | 2008-11-19 | 华中科技大学 | 基于集群备份的容灾系统及方法 |
CN102929696A (zh) * | 2012-09-28 | 2013-02-13 | 北京搜狐新媒体信息技术有限公司 | 一种分布式系统中心节点构建、提交、监控方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104468163A (zh) | 2015-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104468163B (zh) | 容灾网络组网的方法、装置及容灾网络 | |
US9479432B2 (en) | DHT-based control network implementation method and system, and network controller | |
Helder et al. | End-host multicast communication using switch-trees protocols | |
CN106911728B (zh) | 分布式系统中主节点的选取方法和装置 | |
CN103207867B (zh) | 处理数据块的方法、发起恢复操作的方法和节点 | |
US7864769B1 (en) | Multicast packet replication | |
CN106487558B (zh) | 一种实现接入设备扩缩容的方法和装置 | |
CN106254094A (zh) | 一种数据同步方法及系统 | |
CN106878473A (zh) | 一种消息处理方法、服务器集群及系统 | |
CN104915353B (zh) | 分布式数据库下全局主键生成方法和系统 | |
CN108551765A (zh) | 输入/输出隔离优化 | |
JP2017534133A (ja) | 分散ストレージ及びレプリケーションシステム、並びに方法 | |
CN108123976B (zh) | 集群间的数据备份方法、装置及系统 | |
CN109949160A (zh) | 一种区块链的分片方法及装置 | |
JPH1049507A (ja) | 並列計算機 | |
CN102142970A (zh) | 二层以太网络的组播树构建方法和网络节点设备 | |
CN104113609B (zh) | 一种mac地址发布的方法和设备 | |
EP2658172A1 (en) | Multicast method and multicast device | |
CN106878382A (zh) | 一种分布式仲裁集群中动态改变集群规模的方法及装置 | |
JP2011239382A (ja) | リングネットワークにおけるリングマネジャー選出方法及びノード | |
CN109062727B (zh) | 一种数据同步系统及方法 | |
JP2017220141A (ja) | 情報管理プログラム、情報管理方法、及び情報管理装置 | |
CN110213359A (zh) | 一种基于d2d的车联网组网数据推送系统和方法 | |
CN106712997A (zh) | 表项恢复的方法、设备及系统 | |
CN112328685A (zh) | 一种全对等分布式数据库数据同步方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |