分布式系统成员变更方法和分布式系统与流程

文档序号:19631473发布日期:2020-01-07 11:32阅读:251来源:国知局
分布式系统成员变更方法和分布式系统与流程

本申请涉及计算机领域,特别涉及分布式系统。



背景技术:

分布式系统包括多个成员,分布式系统中的成员增加(或者减少)后,需要把成员的增加(或者减少)这一信息通知到各个成员,以便让集群中的成员可以获知集群中最新的成员情况。例如,成员可以通过在自己记录的成员列表中新增新的成员(或者删除原有成员)进行成员变更。

在业界,主要通过日志(log)同步技术实现成员变更,在成员发生增加(或者减少)后,集群的主节点获得成员发生增加(或者减少)的信息,把进行成员变更指令以操作日志的方式同步给各个从节点,从节点收到成员变更指令后按照操作日志更新自己记录的成员列表。

在现有技术中,假设成员变更前集群成员集合为c1,成员变更后集群成员为c2,下面对两阶段提交来执行成员变更进行介绍。第一阶段:主节点通知所有原有成员执行日志,将集群成员集合更新为{c1,c2}(也就是说集群成员既保存了c1又保存了c2)。在此期间每个原有成员的成员列表为c1(还没收到更新通知或者更新尚未完成)或者{c1,c2}(已经收到更新通知,并且完成了更新)。对于{c1,c2}列表来说,主节点必须同时满足c1集合的大多数和c2集合的大多数。换句话说需要满足一个原则:对于拥有c1列表的成员所认可的主节点、和对于拥有c2列表的成员所认可的主节点,是同一个节点。这样就保证了在成员变更过程中不会存在双主节点的场景。第二阶段:第一阶段成功(大多数成员或者所有成员成功的更新为{c1,c2}就可以认为第一阶段成功)后,主节点通知所有成员将通过执行日志把成员集合更新为c2。在更新完成前,每个成员的成员列表为{c1,c2}(更新完成前)或者c2(更新完成后)。

由上可以看出,上述使用日志的方案过于复杂,既要花费大量的时间又要耗费节点大量的资源,而且必须人工参与,增加了运维人员的工作量。



技术实现要素:

第一方面,提供一种分布式系统成员变更方法,包括:第一目标节点向管理服务器请求节点地址集合,其中,所述节点地址集合中包括所述分布式系统中所有节点的地址,所述分布式系统主节点和多个从节点;当第一目标节点的地址不在所述节点地址集合中,所述第一目标节点向分布式系统的所述主节点发送加入请求,所述加入请求中包括所述第一目标节点的地址;在收到所述加入请求后,把所述成员增加指令中的所述第一目标节点的地址增加到所述主节点的本地成员列表中,所述主节点指令所述分布式系统中每个节点把所述第一目标节点的地址增加到本地成员列表。应用该方法,第一目标节点可以主动自发加入分布式系统,不再需要依赖运维人员手动配置主节点。而且不再使用日志作为技术手段,整个过程简洁高效,资源占用率低。

在所述第一方面的第一种可能实现中,所述第一目标节点创建所述第一目标节点的本地成员列表,所述第一目标节点的本地成员列表包括:所述分布式系统中所有节点的地址,以及所述第一目标节点的地址。该方案用于进行所述第一目标节点的配置,使所述第一目标节点认可自己成为所述分布式系统的成员。

在所述第一方面的第二种可能实现中,所述主节点指令所述分布式系统中的所述多个从节点中的每个从节点把所述第一目标节点的地址增加到所述本地成员列表,具体包括:所述主节点发送成员增加指令给所述每个从节点,其中,所述成员增加指令中包括所述第一目标节点的地址;所述主节点接收所述从节点对发送的成员增加响应,所述成员增加响应是所述成员增加指令的响应消息;所述主节点把所述第一目标节点的地址增加到本地成员列表,以及所述主节点发送成员增加生效指令给所有从节点,指示所有从节点在收到所述成员增加生效指令后,按照所述成员增加响应把所述第一目标节点的地址增加到本地成员列表。该方案介绍了在增加从节点的过程中,主节点和从节点直接的交互流程。

在所述第一方面的第三种可能实现中,所述第一目标节点向所述主节点发送所述加入请求,包括:所述第一目标节点通过向所述节点地址集合中的所有地址广播所述加入请求的方式,从而把所述加入请求发送给所述主节点。使用广播的方法,可以确保所述加入请求能够被的发送给主节点,避免主节点收不到加入请求。

在所述第一方面的第四种可能实现中,所述第一目标节点向所述主节点发送所述加入请求,包括:所述第一目标节点通过向第一目标节点向管理服务器请求节点地址集合之后,所述方法还包括下述步骤之一:所述主节点缓存收到的下一个加入请求;或者所述主节点缓存收到的离开请求。该方案可以避免多个成员变更请求并行处理所引起的冲突故障,并且避免其他加入/离开请求被丢失。

在所述第一方面的第五种可能实现中,所述成员增加生效指令具体包括commit指令。该方案介绍了成员增加生效指令的具体内容。

在所述第一方面的第六种可能实现中,所述地址包括:节点id,节点ip地址和节点端口号中的至少一种或者多种的组合。该方案介绍了地址的可能形式,地址还可以是其他形式,可以作为节点的唯一标记即可。

在所述第一方面的第七种可能实现中,在所述主节点收到另一个加入请求后,所述主节点记录成员变更标记,所述成员变更标记包括:变更类型和所述第三目标节点的地址;当在所述主节点按照另一个加入请求,指令所述分布式系统中的所述多个从节点中的每个从节点把所述第一目标节点的地址增加到本地成员列表之前,所述主节点故障;所述分布式系统中的从节点选举出新的主节点;所述新的主节点读取所述变更标记后,按照所述变更类型,指令所述分布式系统中的从节点把所述第三目标节点的地址增加到本地成员列表。该方案使得:在主节点故障后,新选出的主节点可以重新执行成员增加/删除操作。从而保证了成员增加/删除请求的可靠执行。

在所述第一方面的第八种可能实现中,在所述第一方面的第二种可能实现的基础上,所述方法还可以包括:第二目标节点发送离开请求给所述主节点;在收到所述离开请求后,所述主节点发送成员删除指令给所有从节点,其中,成员离开指令包括所述第二目标节点的地址;每个从节点在收到所述成员删除指令后,发送成员删除响应给所述主节点;所述主节点在收到所述从节点的成员删除响应后,把所述第二目标节点的地址从所述节点地址集合中删除;所述主节点把所述第二目标节点地址从本地成员列表中删除,所述主节点发送成员删除生效指令给所述每个从节点;所述每个从节点从所述本地成员列表中删除所述第二目标节点的地址。该方案介绍了如何从所述分布式系统中删除一个节点。

第二方面,提供一种节点集合,所述节点集合包括第一目标节点和分布式系统,所述分布式系统包括多个节点,所述分布式系统可以执行上述第一方面的方法,或者执行第一方面的各个可能实现。

第三方面,提供一种分布式系统成员变更方法,包括:第二目标节点向管理服务器请求节点地址集合,其中,所述分布式系统包括主节点和多个从节点,所述节点地址集合中包括所述分布式系统中所有节点的地址;当所述第二目标节点的地址在所述节点地址集合中,所述第二目标节点向所述分布式系统的所述主节点发送离开请求,所述离开请求中包括所述第二目标节点的地址;在收到所有所述从节点的所述离开请求后,所述主节点把所述第二目标节点的地址从所述主节点的本地成员列表中删除,以及指令所述分布式系统中的所述多个从节点中的每个从节点把所述第二目标节点的地址从本地成员列表中删除。删除流程可以由需要被删除的节点自行发起,不需要依赖运维人员手动配置主节点。并且删除流程未涉及日志,简洁高效、减少了系统资源的占用。

第三方面的第一种可能实现方式,所述主节点指令所述分布式系统中的所有从节点把所述第二目标节点的地址从本地成员列表中删除,具体包括:所述主节点发送成员删除指令给所述分布式系统中的所有从节点,其中,所述成员增加指令中包括所述第二目标节点的地址;收到所述成员删除指令的从节点发送成员删除响应给所述主节点;主节点确定收到所有从节点的所述成员删除响应后,把所述第二目标节点的地址从所述管理服务器的节点地址集合中删除,以及发送成员删除生效指令给所有从节点;所述从节点,在收到所述成员增加生效指令后,把所述第二目标节点的地址从本地成员列表中删除。该方案介绍了删除的具体流程,例如从节点和主节点的具体操作。

第四方面,提供一种分布式系统,所述分布式系统包括多个节点,所述分布式系统可以执行上述的第三方面的方法,或者执行第三方面的各个可能实现。

附图说明

图1是本发明分布式系统实施例拓扑图;

图2是在现有分布式系统中增加新成员的示意图;

图3是从现有分布式系统中删除已有成员的示意图;

图4是分布式系统成员变更方法流程图。

具体实施方式

分布式系统(也可以称为集群)包括多个节点,节点拥有计算能力,例如是计算机或者服务器。或者,节点是存储阵列的控制器。组成分布式系统的节点也被称为分布式系统的成员。按照节点的功能进行划分,可以把分布式系统的节点区分为主节点和从节点,主节点对从节点具有一定的管理功能。

参见附图1,分布式系统1包括:节点11、节点12、节点13、节点14以及节点15。其中节点11是主节点,其余节点是从节点。分布式系统2和管理服务器2通信。

本专利实施例中的分布式系统1可以是自选主的分布式系统。例如基于paxos算法的分布式系统,或者基于zab算法,或者基于raft算法的分布式系统。所谓自选主,是指在主节点11故障后,不用依靠分布式系统外部的节点,依靠分布式系统内部的节点(也就是从节点12、从节点13、从节点14),可在这些从节点中自行选举出新的主节点。

由于分布式系统拥有多个(有时候甚至是数据巨大的)成员,因此涉及到节点上线和下线的问题。例如,分布式系统中的成员总数不足以满足业务的需求,那么就需要增加给分布式系统中增加新的成员,也就是上线新的成员;如果某个节点的可靠性降低或者出现了故障,或者节点总数远远大于需要的数量,就需要减少分布式系统中节点的数量,也就是下线已有成员。增加或者减少分布式系统中成员的数量,统称为分布式系统成员变更。参见附图2,节点16是所述分布式系统1之外的节点,需要增加到所述分布式系统1中,所述节点15和所述分布式系统1的整体可以称为节点集合。参见附图3,节点15是所述分布式系统1之外的节点,需要从所述分布式系统1中删除。

通常的两阶段日志法复杂度太高,而且必须由管理员手动在主节点上触发,既耗费了分布式系统大量的资源,又增加了管理员的负担。

如图4所示,本发明实施例提供一种分布式系统成员变更方法。

步骤11,第一目标节点(例如图2中的节点16)向管理服务器(管理服务器2)请求节点地址集合,其中,所述节点地址集合中包括了分布式系统中所有节点的地址。

第一目标节点是需要增加到分布式系统的节点。本步骤中,在不需要管理员参与的情况下,第一目标节点主动向管理服务器请求节点地址集合。

管理服务器可以是在分布式系统之外,也可以是分布式系统中具有存储功能的节点,只要拥有非易失性存储功能即可。例如,所述管理服务器也可以是所述第一目标节点。

节点地址集合中包括了分布式系统中所有节点的地址,节点地址用于区分不同的

节点,可以视为节点的标签。例如,节点地址是节点id,节点ip地址中的一种或

者二者的组合,还可以是节点id,节点ip地址和节点端口号的组合。

步骤12,第一目标节点在获取所述地址集合后,判断所述第一目标节点的地址是否在所述地址集合之中,从而确定所述第一目标节点是否是所述分布式系统已有的节点。

当第一目标节点的地址在所述节点地址集合中,意味着第一目标节点已经加入了所述分布式系统,退出本流程。

当所述第一目标节点的地址不在所述节点地址集合中,所述第一目标节点向分布式系统的主节点发送加入请求。所述加入请求包括所述第一目标节点的地址。

需要说明的是,所述第一目标节点向所述主节点发送加入请求的方式可以有多种,下面进行举例。

当所述第一目标节点无法获知所述主节点的地址,那么难以建立与所述主节点之间的点对点通信连接,那么可以通过使用节点地址集合向所述分布式系统中的所有节点发送广播的方式,把所述加入请求发送给所述主节点。还有另外一种方案,所述第一目标节点把加入请求发给所述分布式系统中的一个或者多个节点,如果收到加入请求的节点不是主节点,就继续往下传递所述加入请求,直至主节点收到所述加入请求为止。

当所述第一目标节点可以获得所述主节点的地址(例如把所述主节点的地址预存在某服务器中,所述第一目标节点可以从这个服务器获得主节点的地址),那么在获得所述主节点的地址之后,可以直接发送所述加入请求给所述主节点。

步骤13,所述主节点收到所述加入请求后,发送成员增加指令给所述分布式系统中的所有从节点,以便把所述第一目标节点加入所述分布式系统。其中,所述成员增加指令中包括所述第一目标节点的地址。

所述分布式系统中的每个节点(包括主节点和成员节点)都拥有成员列表,成员列表用于记录所述分布式系统中的所有成员(或者记录除了本节点外的所有成员),记录的具体信息可以是成员地址。

所述主节点使用成员列表中的成员地址,可以把所述成员增加指令发送给所有成员。

步骤14,收到所述成员增加指令的从节点,在收到所述成员增加指令后,发送成员增加响应给所述主节点。所述成员增加响应是所述成员增加指令的响应消息,用于告知所述主节点自己已经成功接收到所述成员增加指令。本步骤中,成员增加操作并不会被执行(也就是说,此时第一目标节点还不会被“增加”),在步骤16中才会执行成员的增加。收到成员增加指令的从节点,可以对成员增加指令进行缓存,在缓存成功后再发送所述成员增加指令响应。

步骤15,主节点接收到所有从节点发送的所述成员增加指令响应后,,根据所述成员增加指令中包括的所述第一目标节点的地址,把第一目标节点的地址增加到位于主节点的成员列表。

另外,主节点确定接收所有从节点发送的所述成员增加指令响应后,还可以向从节点发送成员增加生效指令,该指令用于指示从节点执行在步骤14中所缓存的成员增加指令。具体的,所述成员增加生效指令可以是执行(commit)指令。

此外,所述主节点还可以把所述第一目标节点的地址发送给所述管理服务器,使得所述管理服务器将所述第一目标节点的地址写入所述节点地址集合中。所述第一目标节点的地址增加到所述管理服务器的节点地址集合中,也就是对所述节点地址集合进行更新。在所述节点地址集合更新后,如果后续有新的阶段需要加入或者离开所述分布式集群,可以通过查询更新后的成员地址集合来判断自己是否属于所述分布式集群。

步骤16,所述从节点,在收到所述成员增加生效指令后,执行第一目标节点的增加操作(例如执行缓存中缓存的所述成员增加指令),也就是把所述第一目标节点的地址增加到从节点自己的本地成员列表。

对于所述分布式系统中的某个节点来说,增加第一目标节点的地址到本地成员列表,意味着承认第一目标节点成为所述分布式系统的成员。

需要说明的是,本发明各个实施例中的“本地”是针对节点而言。例如:以任意一个命名为a节点的节点举例。a节点的本地成员列表归属于a节点,a节点的处理器通过读取自己的成员列表可以获知a节点所在的分布式系统中除了a节点之外,还有哪些成员。这个成员列表可以存储在a节点上,某些情况下也可以存储在a节点外部。

步骤17,所述第一目标节点创建本地成员列表,所述第一目标节点创建的本地成员列表中包括:所述分布式系统中所有原有节点的地址。可选的,还可以进一步包括所述第一目标节点的地址。

在完成步骤15、16和17之后,所述第一目标节点创建了自己的本地成员列表,所述分布式系统中原有节点在内的所有节点更新了自己的本地成员列表,实现了所述第一目标节点加入所述分布式系统。由以上步骤可以看出,本发明实施例的方案提供了形成了一种成员“自动发现”的节点添加技术。新节点可以主动的添加分布式存储系统中,并且,原有分布式系统可以感知到新节点的加入。简化了运维人员在成员变更中的参与行为,使得整个成员变更过程更加自动化,智能化。

下面步骤18-23对从所述分布式系统中删除第二目标节点的过程进行介绍,删除所述第二目标节点的原因可以有多种,例如所述第二节点可靠性降低、所述分布式系统中资源过多、需要对所述第二目标节点进行更换等等。所述第二目标节点可以是所述分布式系统中除主节点外的任意节点(例如图3中的节点15)。例如可以是所述第一目标节点(节点16),当所述第二目标节点不是所述第一目标节点的情况下,删除节点的流程可以在增加节点的流程之前(或者之后)执行。也就是说,步骤11-17的流程和步骤18-23的流程是相对独立的,二者可以先后执行或者只执行任意一个,不并行执行即可。

步骤18,第二目标节点向管理服务器请求节点地址集合,其中,所述节点地址集合中包括了分布式系统中所有节点的地址。

第二目标节点是所述分布式系统中的需要下线的节点。本步骤中,在不需要管理员参与的情况下,第二目标节点主动向管理服务器请求节点地址集合。

步骤19,第二目标节点在获取所述地址集合后,判断所述第二目标节点的地址是否在所述地址集合之中。本步骤是可选的。

当第二目标节点的地址不在所述节点地址集合中,意味着第二目标节点已经不属于所述分布式系统,退出本流程。

当所述第二目标节点的地址在所述节点地址集合中,所述第二目标节点向分布式系统的主节点发送离开请求。所述离开请求中包括所述第二目标节点的地址。需要说明的是,在其他实施例中,也可以不经过步骤19的判断步骤,所述第二目标节点向分布式系统的主节点发送离开请求。在其他实施例中,判断是可选的,第二目标节点可以直接发送离开请求给主节点。

需要说明的是,所述第二目标节点向所述主节点发送离开请求的方式可以有多种,例如单播、组播、广播,只要能够把离开请求发送到主节点即可。

步骤20,所述主节点收到所述离开请求后,发送成员删除指令给所述分布式系统中的所有从节点,以便把所述第二目标节点离开所述分布式系统。其中,所述成员删除指令中包括所述第二目标节点的地址。

所述主节点使用成员列表中的成员地址,可以把所述成员删除指令发送给所有成员。

步骤21,收到所述成员删除指令的从节点,在收到所述成员删除指令后,发送成员删除响应给所述主节点,以便告知所述主节点自己已经成功接收到所述成员删除指令。所述成员删除响应是所述成员删除指令的响应消息,用于告知所述主节点自己已经成功接收到所述成员删除指令。本步骤中,成员删除指令可以缓存在从节点的内存中,删除操作在本步骤中并不会被执行(也就是说,此时所述第二目标成员还不会被“删除”),在步骤23中才会被执行。

收到成员删除指令的从节点,可以对成员删除指令进行缓存,在缓存成功后再发送所述成员删除指令。

步骤22,主节点收到所有从节点的所述成员删除响应后:发送成员删除生效指令给所有从节点。

此外,所述主节点还把所述第二目标节点的地址从主节点的成员列表中删除。

所述主节点还可以指示所述管理服务器把所述第二目标节点的地址从所述管理服务器的节点地址集合中删除。在所述节点地址集合更新后,如果后续有新的阶段需要离开或者离开所述分布式集群,可以通过查询更新后的成员地址集合来判断自己是否属于所述分布式集群。

其中,所述成员删除生效指令可以是执行(commit)指令,发送成员删除生效指令是用于指示从节点执行在步骤14中所缓存的成员删除指令。

步骤23,所述从节点,在收到所述成员删除生效指令后,执行读第二目标节点的删除操作(例如执行缓存中缓存的所述成员删除指令),也就是把所述第二目标节点的地址从各个从节点的本地成员列表中删除。

对于所述分布式系统中的某个节点来说,把第二目标节点的地址从本地成员列表中删除,意味着第二目标节点退出所述分布式系统,不再是所述分布式系统的成员。

执行完步骤22、23之后,所述第二目标节点不再是所述分布式系统的成员。

步骤24,可选的所述第二目标节点可以删除其本地成员列表。

由以上步骤18-24可以看出,本发明实施例的方案提供了了一种成员“主动删除自己”的节点删除技术。分布式系统中的节点可以主动把自己排除在所述分布式存储系统之外。并且,所述分布式系统可以感知到节点的删除请求并进行响应。简化了运维人员在成员变更中的参与行为,使得整个成员变更过程更加自动化,智能化。

可选的,在所述主节点收到所述加入请求后,且所述主节点发送成员增加生效指令给所有成员节点之前;或者,在所述主节点收到所述离开请求后,且所述主节点发送成员删除生效指令给所有成员节点之前,如果所述主节点收到新的加入请求或者新的离开请求,可以进行缓存。以避免同时执行两个成员变更请求。

可选的,在所述主节点收到某个加入请求后,且所述主节点发送成员增加生效指令给所有成员节点之前;或者,在所述主节点收到所述某个离开请求后,且所述主节点发送成员删除生效指令给所有成员节点之前,还可以在所述管理服务器中设置成员变更标记。成员变更标记用于记录变更的类型(增加或者删除),以及需要变更的节点的地址。如果在上述过程中主节点故障后,依靠成员变更标记所记录的变更类型和需要变更的节点的地址,新选出的主节点可以重新执行成员变更。换言之:在所述主节点收到加入/删除请求后,所述主节点记录成员变更标记。所述成员变更标记包括:变更类型(加入类型/删除类型)和需要增加的成员的地址(例如第三目标节点的地址);当在指令所述分布式系统中的所有从节点把所述第三目标节点的地址增加到本地成员列表之前,所述主节点故障;所述分布式系统选举出新的主节点;所述新的主节点读取所述变更标记后重新把所述第一目标节点的地址增加到所述的节点地址集合中,以及指令所述分布式系统中的所有从节点把所述第三目标节点的地址增加到本地成员列表。在主节点故障后,可以依据从节点之间的协商,选举出新的主节点,例如选择负载最小的从节点作为新的主节点,或者选择加入集群最早的从节点作为新的主节点。

根据以上原理,例如:在执行步骤13-17之中任一步骤时,出现主节点故障后,那么,根据成员变更标记所记录的信息,所述新的主节点可以重新从步骤13开始执行(发送成员增加指令给所述分布式系统中的所有从节点),以便重新执行步骤13-17,从而实现把所述第一目标节点增加到所述分布式系统。类似的,在执行步骤18-23的过程中,如果出现主节点故障,那么,依靠成员变更标记,新的主节点可以重新从步骤18开始执行(发送成员增加指令给所述分布式系统中的所有从节点),从而重新执行步骤18-23。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1