H04L12/24 H04L29/08
1.一种服务集,其特征在于,所述服务集包括:多个主名字节点和至少一个备用名 字节点,每个名字节点维护有主名字节点列表、备用名字节点列表以及故障名字节点列表;
所述备用名字节点,按预设的周期向各个主名字节点发送测试信息以测试所述各个主 名字节点是否正常工作,当一主名字节点发生故障时,将所述主名字节点列表中第n个正常 工作的主名字节点作为目标主名字节点,向所述目标主名字节点发送选主申请,所述选主 申请用于申请自身成为主名字节点,其中,n的取值为1…N,N为所述主名字节点列表中正常 工作的主名字节点的个数;
所述目标主名字节点,接收到所述备用名字节点发送的选主申请之后,触发各个主名 字节点不再接收客户端的数据操作请求,将所述备用名字节点添加至自身的主名字节点列 表中,并将所述备用名字节点从自身的备用名字节点列表中删除,将所述发生故障的主名 字节点从所述自身的主名字节点列表中删除,并将所述发生故障的主名字节点添加至自身 的故障名字节点列表中,将所述主名字节点发生故障以及所述备用名字节点成为主名字节 点的信息同步给所述服务集中的其它名字节点,以使所述其它名字节点基于所述信息更 新自身的列表。
2.根据权利要求1所述服务集,其特征在于,每个主名字节点还维护有元数据;
所述目标主名字节点,在将所述备用名字节点添加至所述自身的主名字节点列表中之 后,将自身维护的元数据发送给成为主名字节点的所述备用名字节点。
3.根据权利要求2所述的服务集,其特征在于,所述目标主名字节点,在所述服务集 中其它名字节点更新完列表,并且将所述自身维护的元数据发送给成为主名字节点的所 述备用名字节点之后,触发所述服务集中的各个主名字节点接收客户端的数据操作请 求。
4.根据权利要求1所述的服务集,其特征在于,所述备用名字节点为多个;
所述目标主名字节点,在多个备用名字节点同时发送选主申请时,将第一个接收到的 选主申请所对应的备用名字节点作为主名字节点添加至所述自身的主名字节点列表中。
5.根据权利要求1所述的服务集,其特征在于,每个主名字节点,周期性的向所述服 务集中的各个备用名字节点发送测试信息以测试各个备用名字节点是否正常工作,当目 标备用名字节点发生故障时,将所述目标备用名字节点从自身的备用名字节点列表中删 除,并将所述目标备用名字节点添加至自身的故障名字节点列表中,同时,将所述目标备用 名字节点发生故障的信息同步给所述服务集中的其它名字节点。
6.根据权利要求1所述的服务集,其特征在于,所述服务集提供扩展名字节点的接 口,所述服务集通过所述接口接收新增名字节点的申请;
所述目标主名字节点,接收所述新增名字节点的申请,将所述新增的名字节点添加至 所述自身的备用名字节点列表中,将新增的名字节点成为备用名字节点的信息同步给所述 服务集中的其它名字节点;
或者,
所述目标主名字节点,接收所述新增名字节点的申请,向新增的名字节点发送测试信 息,以测试所述新增的名字节点是否正常工作,以及,当所述新增的名字节点正常工作时, 将所述新增的名字节点添加至所述自身的备用名字节点列表中,将新增的名字节点成为备 用名字节点的信息同步给所述服务集中的其它名字节点。
7.根据权利要求1或5所述的服务集,其特征在于,所述目标主名字节点,按预设时间 间隔向故障名字节点列表中的故障名字节点发送测试信息,以测试所述故障名字节点是否 恢复正常,当所述故障名字节点恢复正常时,将恢复正常的故障名字节点从所述自身的故 障名字列表中删除,并将所述恢复正常的故障名字节点添加至所述自身的备用名字节点列 表中,将所述故障名字节点恢复正常的信息同步给所述服务集中的其它名字节点。
8.一种服务集,其特征在于,所述服务集包括:至少一个主名字节点和多个备用名 字节点,每个名字节点均存储有元数据,每个名字节点均具有节点信息,所述节点信息包括 节点标识值、元数据标识值和选举值;
所述多个备用名字节点中的第一备用名字节点,按预设的周期向所述至少一个主名字 节点发送测试信息以测试所述至少一个主名字节点是否正常工作,当至少一主名字节点发 生故障时,向其它备用名字节点发送自身的节点信息以及选举自身成为主名字节点的信 息;
所述其它备用名字节点中的第二备用名字节点,在所述第一备用名字节点的选举值大 于自身的选举值时,如果所述第一备用名字节点的元数据标识值大于自身的元数据标识 值,则将选举所述第一备用名字节点成为主名字节点的信息作为选举结果发送给其它备用 名字节点,如果所述第一备用名字节点的元数据标识值等于自身的元数据标识,则在所述 第一备用名字节点的节点标识值大于或者小于自身的节点标识值时,将选举第一备用名字 节点成为主名字节点的选举结果发送给其它备用名字节点;
所述第一备用名字节点,在接收到的选举结果表明大于预设数量的名字节点选举自身 成为主名字节点时,将自身设置为主名字节点。
9.根据权利要求8所述的服务集,其特征在于,所述第二备用名字节点,在所述第一 备用名字节点的选举值等于自身的选举值时,判断自身的元数据标识值是否大于所述第一 备用名字节点的元数据标识值,如果是,则将选举值加1,并将选举自身成为主名字节点的 信息作为选举结果发送给其它备用名字节点。
10.根据权利要求9所述的服务集,其特征在于,所述第二备用名字节点,在所述第一 备用名字节点的选举值小于自身的选举值时,将自身的节点信息发送给所述第一备用名字 节点。
本发明涉及大数据技术领域,尤其涉及一种服务集。
现如今,Hadoop HDFS已成为大数据领域最主流的分布式文件存储系统,而名字节 点(NameNode)是HDFS中最重要的管理节点,它的作用主要体现在以下几个方面:负责维护 着整个文件系统的文件目录树;存储文件系统的元数据信息;负责接收用户的操作请求。可 见,名字节点的稳定运行对于HDFS来说是至关重要的。
在Hadoop 1.X中,HDFS存在名字节点单点故障(SPOF,Single Points Of Failure)问题,所谓单点故障,即单个点发生故障的时候会波及到整个系统或者网络,从而 导致整个系统或者网络的瘫痪。在Hadoop2.x版本中,Hadoop提出了基于Zookeeper的HDFS HA方案,在该方案中,采用一个主名字节点和一个备用名字节点,同时引入了Zookeeper集 和主备切换控制器,主备切换控制器用于检测主名字节点和一个备用名字节点的状态信 息,当主名字节点发生故障时,借助Zookeeper集的leader选举功能实现主备切换。
基于Zookeeper的HDFS HA方案中,采用一个主名字节点和一个备用名字节点的方 案虽然在一定程度上缓解了HDFS的单点故障问题,但在该方案中需要引入Zookeeper集, 该集最少需要3台服务器,对于只想单独使用HDFS的场景而言,显得非常冗余,且增加了 运维成本。
有鉴于此,本发明提供了一种服务集,用以解决现有技术中的于Zookeeper的 HDFS HA方案中,需要引入Zookeeper集,对于只想单独使用HDFS的场景而言,显得非常冗 余,且增加了运维成本的问题,其技术方案如下:
一种服务集,所述服务集包括:多个主名字节点和至少一个备用名字节点,每 个名字节点维护有主名字节点列表、备用名字节点列表以及故障名字节点列表;
所述备用名字节点,按预设的周期性的向各个主名字节点发送测试信息以测试所 述各个主名字节点是否正常工作,当一主名字节点发生故障时,将所述主名字节点列表中 第n个正常工作的主名字节点作为目标主名字节点,向所述目标主名字节点发送选主申请, 所述选主申请用于申请自身成为主名字节点,其中,n的取值为1…N,N为所述主名字节点列 表中正常工作的主名字节点的个数;
所述目标主名字节点,接收到所述备用名字节点发送的选主申请之后,触发各个 主名字节点不再接收客户端的数据操作请求,将所述备用名字节点添加至自身的主名字节 点列表中,并将所述备用名字节点从自身的备用名字节点列表中删除,将所述发生故障的 主名字节点从所述自身的主名字节点列表中删除,并将所述发生故障的主名字节点添加至 自身的故障名字节点列表中,将所述主名字节点发生故障以及所述备用名字节点成为主名 字节点的信息同步给所述服务集中的其它名字节点,以使所述其它名字节点基于所述信 息更新自身的列表。
其中,每个主名字节点还维护有元数据;
所述目标主名字节点,在将所述备用名字节点添加至所述自身的主名字节点列表 中之后,将自身维护的元数据发送给成为主名字节点的所述备用名字节点。
其中,所述目标主名字节点,在所述服务集中其它名字节点更新完列表,并且将 所述自身维护的元数据发送给成为主名字节点的所述备用名字节点之后,触发所述服务集 中的各个主名字节点接收客户端的数据操作请求。
其中,所述备用名字节点为多个;
所述目标主名字节点,在多个备用名字节点同时发送选主申请时,将第一个接收 到的选主申请所对应的备用名字节点作为主名字节点添加至所述自身的主名字节点列表 中。
其中,每个主名字节点,周期性的向所述服务集中的各个备用名字节点发送测 试信息以测试各个备用名字节点是否正常工作,当目标备用名字节点发生故障时,将所述 目标备用名字节点从自身的备用名字节点列表中删除,并将所述目标备用名字节点添加至 自身的故障名字节点列表中,同时,将所述目标备用名字节点发生故障的信息同步给所述 服务集中的其它名字节点。
其中,所述服务集提供扩展名字节点的接口,所述服务集通过所述接口接收 新增名字节点的申请;
所述目标主名字节点,接收所述新增名字节点的申请,将所述新增的名字节点添 加至所述自身的备用名字节点列表中,将新增的名字节点成为备用名字节点的信息同步给 所述服务集中的其它名字节点;
或者,
所述目标主名字节点,接收所述新增名字节点的申请,向新增的名字节点发送测 试信息,以测试所述新增的名字节点是否正常工作,以及,当所述新增的名字节点正常工作 时,将所述新增的名字节点添加至所述自身的备用名字节点列表中,将新增的名字节点成 为备用名字节点的信息同步给所述服务集中的其它名字节点。
其中,所述目标主名字节点,按预设时间间隔向故障名字节点列表中的故障名字 节点发送测试信息,以测试所述故障名字节点是否恢复正常,当所述故障名字节点恢复正 常时,将恢复正常的故障名字节点从所述自身的故障名字列表中删除,并将所述恢复正常 的故障名字节点添加至所述自身的备用名字节点列表中,将所述故障名字节点恢复正常的 信息同步给所述服务集中的其它名字节点。
一种服务集,包括:至少一个主名字节点和多个备用名字节点,每个名字节点均 存储有元数据,每个名字节点均具有节点信息,所述节点信息包括节点标识值、元数据标识 值和选举值;
所述多个备用名字节点中的第一备用名字节点,按预设的周期向所述至少一个主 名字节点发送测试信息以测试所述至少一个主名字节点是否正常工作,当至少一主名字节 点发生故障时,向其它备用名字节点发送自身的节点信息以及选举自身成为主名字节点的 信息;
所述其它备用名字节点中的第二备用名字节点,在所述第一备用名字节点的选举 值大于自身的选举值时,如果所述第一备用名字节点的元数据标识值大于自身的元数据标 识值,则将选举所述第一备用名字节点成为主名字节点的信息作为选举结果发送给其它备 用名字节点,如果所述第一备用名字节点的元数据标识值等于自身的元数据标识,则在所 述第一备用名字节点的节点标识值大于或小于自身的节点标识值时,将选举第一备用名字 节点成为主名字节点的选举结果发送给其它备用名字节点;
所述第一备用名字节点,在接收到的选举结果表明大于预设数量的名字节点选举 自身成为主名字节点时,将自身设置为主名字节点。
其中,所述第二备用名字节点,在所述第一备用名字节点的选举值等于自身的选 举值时,判断自身的元数据标识值是否大于第一备用名字节点的元数据标识值,如果是,则 将选举值加1,并将选举自身成为主名字节点的信息作为选举结果发送给其它备用名字节 点。
其中,所述第二备用名字节点,在所述第一备用名字节点的选举值小于自身的选 举值时,将自身的节点信息发送给所述第一备用名字节点。
上述技术方案具有如下有益效果:
本发明提供的服务集,备用名字节点可通过向各个主名字节点发送测试信息来 获知主名字节点是否发生故障,并在发生故障时能向目标主名字节点发送选主申请以申请 自身成为主名字节点,目标主名字节点可将备用名字节点添加至主名字节点列表中,或者, 多个备用节点通过选举策略选举出主名字节点。即本发明提供的服务集及HDFS集可自 主发现名字节点的故障信息,并在某一主名字节点发生故障时,使备用名字节点成为主名 字节点添加至主名字节点的列表中,而不再依赖于Zookeeper集,系统架构简化,运维成 本大大降低。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据 提供的附图获得其他的附图。
图1为本发明实施例提供的服务集的一结构示意图;
图2为本发明实施例提供的服务集的一具体实例的结构示意图;
图3为图2示出的服务集中一主名字节点发生故障,备用名字节点成为主名字节 点后的服务集示意图;
图4为图3示出的服务集中扩展一名字节点后的服务集示意图;
图5为图4示出的服务集中的故障名字节点恢复正常后的服务集示意图;
图6a-图6d为本发明实施例提供的服务集中,备用名字节点选举主名字节点的 过程示意图。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
本发明实施例提供了一种服务集,该服务集应用于HDFS集,请参阅图1,示 出了该服务集的一结构示意图,可以包括:多个主名字节点和至少一个备用名字节点。每 个名字节点均维护有三个列表,分别为主名字节点列表、备用名字节点列表以及故障名字 节点列表。
其中,主名字节点列表为服务集中当前所有主名字节点的列表,备用名字节点 列表为服务集中当前所有备用名字节点的列表,故障名字节点列表为服务集中当前所 有故障名字节点的列表。
备用名字节点,周期性的向服务器中的各个主名字节点发送测试信息以测试各 个主名字节点是否正常工作,当多个主名字节点中的一主名字节点发生故障时,将主名字 节点列表中的第n个正常工作的主名字节点作为目标主名字节点,向目标主名字节点发送 选主申请。
其中,n的取值为1,…,N,N为主名字节点列表中正常工作的主名字节点的个数。需 要说明的是,将主名字节点列表中的哪个正常工作的主名字节点作为目标主名字节点为预 先指定的,示例性的,可预先指定主名字节点列表中第1个正常工作的主名字节点作为目标 主名字节点,即n的取值为1,当多个主名字节点中的一主名字节点发生故障时,备用名字节 点向主名字节点列表中第1个正常工作的主名字节点发送选主申请。其中,选主申请用于申 请自身成为主名字节点。
目标主名字节点,接收到备用名字节点发送的选主申请之后,触发各个主名字节 点不再接收客户端的数据操作请求,将备用名字节点添加至自身的主名字节点列表中,并 将备用名字节点从自身的备用名字节点列表中删除,将发生故障的主名字节点从自身的主 名字节点列表中删除,并将发生故障的主名字节点添加至自身的故障名字节点列表中,同 时,将主名字节点发生故障以及备用名字节点成为主名字节点的信息同步给服务集中的 其它名字节点,以使其它名字节点基于该信息更新自身的列表。
需要说明的是,当服务集中存在多个备用名字节点时,可能存在多个备用名字 节点同时发现某一主名字节点发生故障,且同时向目标主名字节点发送选主申请的情况, 因此,目标集可将第一个接收到的选主申请所对应的备用名字节点作为主名字节点添加 至自身的主名字节点列表中。
在本实施例中,服务集中的主名字节点为多个,多个主名字节点可同时接收并 处理来自用户的操作请求,这使得,当HDFS集规模较庞大,能够实现客户端的负载均衡。
需要说明的是,服务集中的每个主名字节点还维护有元数据,主名字节点基于 该元数据处理客户端的数据操作请求。可以理解的是,备用名字节点在成为主名字节点之 后,为了实现对数据操作请求的处理,需要获得主名字节点的元数据,因此,在本实例中,目 标主名字节点在将备用名字节点添加至自身的主名字节点列表中之后,将自身维护的元数 据发送给该成为主名字节点的备用名字节点。
可以理解的是,目标主节点在接收到备用名字节点的选主申请之后,由于需要更 新服务集中的主名字节点,因此,触发各个主名字节点不再接收客户端的数据操作请求, 即,将HDFS集锁住,当服务集中正常工作的各个名字节点均更新完自身的列表,且目标 主名字节点将自身的元数据同步给成为主名字节点的备用名字节点时,还要触发服务集 中的各个主名字节点重新接收并处理客户端的数据操作请求,即,将HDFS集解锁。
本发明提供的服务集,包括了多个主名字节点和至少一个备用名字节点,备用 名字节点可通过向各个主名字节点发送测试信息来获知主名字节点是否发生故障,并在主 名字节点发生故障时能向目标主名字节点发送选主申请以申请自身成为主名字节点,目标 主名字节点可将备用名字节点添加至主名字节点列表中。即,本发明实施例提供的服务集 可自主发现名字节点的故障信息,并在某一主名字节点发生故障时,使备用名字节点成 为主名字节点添加至主名字节点的列表中,而不再依赖于Zookeeper集,系统架构简化, 运维成本大大降低。
另外,由于集中同时存在多个主名字节点,因此可同时接收并处理来自客户端 的多个数据操作请求,因此,实现了客户端的负载均衡,再者,由于主名字节点为多个,备用 名字节点也可以为多个,因此,所有名字节点均发生故障的几率较小,即大大降低了HDFS集 中单点故障问题发生的几率。
在一种可能的实现方式中,上述实施例提供的服务集中,备用名字节可周期性 的向服务器中的各个主名字节点发送PING命令(或者心跳数据包),对于每次发送的PING 命令,如果在预设时间内接收到主名字节点对于PING命令(或者心跳数据包)的响应,则表 明主名字节点正常工作,如果在预设时间内未接收到主名字节点对于PING命令(或者心跳 数据包)的响应,则表明该主名字节点发生故障。
在上述实施例提供的服务集中,每个备用名字节点均可向服务集中的各个主 名字节点发送测试信息,以测试主名字节点是否正常工作,然而,在某些时候,备用名字节 点也可能发生故障,如果备用名字节点发生故障,将影响整个服务集的性能,为了能够发 现备用名字节点的故障,上述实施例提供的服务集中,每个主名字节点,周期性的向服务 集中的各个备用名字节点发送测试信息以测试各个备用名字节点是否正常工作,当目标 备用名字节点发生故障时,将目标备用名字节点从自身的备用名字节点列表中删除,并将 目标备用名字节点添加至自身的故障名字节点列表中,同时,将目标备用名字节点发生故 障的信息同步给服务集中的其它名字节点。
在某些情况下,例如HDFS集规模扩大时,当前服务集中名字节点的数量已经 无法满足需求,或者,当前服务集中的多个名字节点发生故障,此时可能需要扩展服务集 的规模,即在服务集中增加新的名字节点,基于此,上述实施例提供的服务集可提供 扩展名字节点的接口,服务集通过该接口接收新增名字节点的申请,具体地,服务集具 有集名称,新增名字节点的申请基于集名称提出,服务集接收到基于集名称提出 的新增名字节点的申请时,由目标主名字节点(例如,主名字节点列表中第一个正常工作的 主名字节点)进行处理。
在一种可能的实现方式中,目标主名字节点,在接收到新增名字节点的申请时,将 新增的名字节点作为备用名字节点添加至自身的备用名字节点列表中,然后将新增的名字 节点成为备用名字节点的信息同步给服务集中的其它名字节点。
考虑到新增的名字节点也可能由于某种原因发生故障,为了确保新添加至服务集 中的名字节点为能够正常工作的名字节点,在另一种可能的实现方式中,目标主名字节 点在接收新增名字节点的申请时,首先向新增的名字节点发送测试信息,以测试新增的名 字节点是否正常工作,当新增的名字节点正常工作时,再将新增的名字节点添加至自身的 备用名字节点列表中,同时,将新增的名字节点成为备用名字节点的信息同步给服务集 中的其它名字节点。
需要说明的是,在上述的实现方式中,目标主节点将新增名字节点添加至自身的 备用名字节点列表中,然后,将新增的名字节点成为备用名字节点的信息同步给服务集 中的其它名字节点,除了这种方式外,目标主节点还可将新增名字节点添加至自身的主名 字节点列表中,然后将新增名字节点成为主名字节点的信息同步给服务集中的其它名字 节点,并且,将自身维护的元数据发送给该新增名字节点。
在某些情况下,集中发生故障的名字节点可能会重新恢复正常,为了重新利用 这些重新恢复正常的名字节点,上述实施例提供的服务集中,目标主名字节点,可按预设 的时间间隔向故障名字节点列表中的故障名字节点发送测试信息,以测试故障名字节点是 否恢复正常。当故障名字节点恢复正常时,在一种可能的实现方式中,将恢复正常的故障名 字节点添加至自身的备用名字节点列表中,并将恢复正常的故障名字节点从自身的故障名 字列表中删除,同时,将故障名字节点恢复正常且成为备用名字节点的信息同步给服务集 中的其它名字节点。在另一种可能的实现方式中,如果恢复正常的故障名字节点之前为 主名字节点,则目标主名字节点可将其添加至自身的主名字节点中,并且,将其从自身的故 障名字列表中删除,然后将该故障名字节点恢复正常且成为主名字节点的信息同步给服务 集中的其它名字节点,另外,目标主名字节点还需要将自身维护的元数据同步给该恢复 正常的故障名字节点;如果恢复正常的故障名字节点之前为备用名字节点,则目标主名字 节点可将其添加至自身的备用名字节点中,并且,将其从自身的故障名字列表中删除,然后 将该故障名字节点恢复正常且成为备用名字节点的信息同步给服务集中的其它名字节 点。
上述实施例提供的服务集还可包括:同步节点。服务集中的主名字节点通过 该同步节点将名字节点状态发生变化的信息发送给其它名字节点,以使其它名字节点基于 信息更新自身的列表。
在上述本发明实施例的基础上,现列举一具体实例进行说明:
请参阅图2,示出了一服务集一具体实例的结构示意图,其包括:两个主名字节 点(Active NameNode,简称Active NN),分别为NN1和NN2,以及两个备用名字节点(Standby NameNode,简称Standby NN),分别为NN3和NN4。其中,两个主名字节点NN1和NN2可同时接收 并处理来自客户端的数据操作请求,实现了客户端的负载均衡。
NN1、NN2、NN3和NN4均维护主名字节点列表、备用名字节点列表以及故障名字节点 列表,即,主名字节点列表中包括NN1和NN2,备用名字节点列表中包括NN3和NN4,故障名字 节点列表中暂时没有NN。
(1)备用名字节点检测主名字节点的故障:
NN3周期性的分别向NN1和NN2发送测试信息(如ping命令)以测试NN1和NN2是否正 常工作,假设NN3在向NN2发送ping命令之后,在预设时间内未接收到ping命令的响应,则表 明NN2发生故障,则此时,NN3向主名字节点列表中第一个正常工作的主名字节点NN1发送选 主申请,NN1接收到选主申请后,会立即触发将HDFS集锁住(HDFS集不接收任何的数据 操作请求),将NN3作为主名字节点添加至主名字节点列表中,将NN3从备用名字节点列表中 删除,并且,将NN2从主名字节点列表中删除,将NN2添加至故障名字节点列表中,然后,将 NN2发生故障、NN3成为主名字节点的信息同步给NN3和NN4,NN3和NN4通过该信息更新自身 列表。另外,每个主名字节点均维护有元数据,主名字节点基于元数据处理数据操作请求, 由于NN3成为了主名字节点,为了使其能处理数据操作请求,NN1需要将自身的元数据同步 给NN3。在列表和元数据更新完成后,NN1触发HDFS集解锁,使其接收数据操作请求。
需要说明的是,对于NN4而言,其也会执行与NN3相同的操作,在此不作赘述。在NN2 发生故障时,NN3和NN4可能会同时向NN1发送选主申请,如果NN1先接收到NN3发送的选主申 请,则将NN3作为主名字节点添加至主名字节点列表中,反之,如果NN1先接收到NN4发送的 选主申请,则将NN4作为主名字节点添加至主名字节点列表中。假设NN3成为了主名字节点, 则请参阅图3,此时的服务集中的主名字节点为NN1和NN3,备用名字节点为NN4,故障名字 节点为NN2,即主名字节点列表中包括NN1和NN3,备用名字节点列表中包括NN4,故障名字节 点列表中包括NN2。
(2)主名字节点检测备用名字节点的故障:
图3中的主名字节点NN1向备用名字节点NN4发送测试信息(如心跳数据包),如果 在预设时间内未接收到测试信息的响应,则表明NN4发生故障,否则,表明NN4正常工作。如 果NN4发生故障,则将NN4从备用名字节点列表中删除,将NN4添加至故障名字节点列表中, 同时将NN4发生故障的信息同步给NN3,NN3基于该信息更新自身列表。对于NN3而言,其也会 执行与NN1同样的操作,在此不作赘述。
(3)名字节点的扩展:
服务集提供用于扩展名字节点的接口(如rest API),服务集通过该接口接收 新增名字节点的请求,当服务集接收到新增名字节点的请求时,主名字节点列表中第一 个正常工作的主名字节点会向新增名字节点发送测试信息(如ping命令)以测试新增名字 节点是否能够正常工作,以图3为例,主名字节点列表中第一个正常工作的主名字节点为 NN1,即NN1会向新增名字节点NN5发送ping命令,如果新增名字节点NN5能够正常工作,则将 新增名字节点NN5作为备用名字节点添加至备用名字节点列表中,并将新增名字节点NN5成 为备用名字节点的信息同步给NN3和NN4,NN3和NN4基于该信息同步自身列表。另外,由于 NN5为新增名字节点,因此,NN1需要将当前的列表信息均同步给NN5。请参阅图4,为新增NN5 后的服务集,此时服务集中的主名字节点为NN1和NN3,备用名字节点为NN4和NN5,故障 名字节点为NN2,即主名字节点列表中包括NN1和NN3,备用名字节点列表中包括NN4和NN5, 故障名字节点列表中包括NN2。
需要说明的是,除了上述实现方式外,主名字节点为NN1也可将新增名字节点NN5 添加至主名字节点列表中,并将新增名字节点NN5成为主名字节点的信息同步给NN3和NN4, NN3和NN4基于该信息同步自身列表。另外,由于新增名字节点NN5成为主节点,其需要处理 来自客户端数据操作请求,因此,主名字节点NN1需要将自身的元数据同步给NN5。
(4)故障名字节点的自检测:
以图4为例,主名字节点列表中的第一个正常工作的主名字节点NN1会按预设时间 间隔向故障名字节点NN2发送测试信息(如ping命令)以测试NN2是否恢复正常,如果NN2恢 复正常,则将NN2添加至备用名字节点列表中,并将其从故障名字节点列表中删除,然后,将 NN2恢复正常的信息同步给NN3、NN4和NN5,NN3、NN4和NN5基于该信息更新自身列表。另外, NN1还需要将自身当前的列表信息同步给NN2。图5示出了更新NN2状态后的服务集,此时 服务集中的主名字节点为NN1和NN3,备用名字节点为NN4、NN5和NN2,即主名字节点列表 中包括NN1和NN3,备用名字节点列表中包括NN4、NN5和NN2,故障名字节点列表中没有名字 节点。
需要说明的是,当NN2恢复正常时,由于其之前为主名字节点,因此,也可将其添加 至主名字节点列表中,并将其从故障名字节点列表中删除,然后,将NN2恢复正常且成为主 名字节点的信息同步给NN3、NN4和NN5,NN3、NN4和NN5基于该信息更新自身列表,另外,由于 NN2成为主节点需要处理来自客户端数据操作请求,因此,NN1需要将自身的元数据同步给 NN2。
本发明实施例还提供了另一种服务集,该服务集可以包括:至少一个主名字 节点和多个备用名字节点,每个名字节点均存储有元数据,每个名字节点均具有节点信息, 节点信息包括节点标识值(NNID)、元数据标识值(MetaID)和选举值(TransNumber)。
其中,各个备用节点的元数据标识值从主名字节点获得,理论上各个备用节点的 元数据标识是相同的,然而,由于主名字节点可能发生故障,当主名字节点发生故障时,其 可能只将元数据标识值同步给了部分备用名字节点,而另外一部分备用名字节点由于未接 收到主名字节点发送的元数据标识而未进行更新,这就导致多个备用名字节点的元数据标 识值可能不同。备用节点的元数据标识值越大,表明元数据越新,因此,本实施例基于元数 据标识值从备用节点中选举主节点。各个备用名字节点的节点标识值不变,其一方面用于 标识并区分各个备用名字节点,另一方面,在备用名字节点的元数据标识值相同时,用于作 为进一步选举主节点的依据。对于选举值而言,其是递增的,例如,当某一备用名字节点接 收到其它备用名字节点发送的选举信息及节点信息时,如果发现自身的元数据标识值大于 其接收的节点信息中的元数据标识值,则其可发起新的一轮选举,将选举值加1,选举值可 以反映备用名字节点当前所处的选举轮数。
多个备用名字节点中的第一备用名字节点,按预设的周期向至少一个主名字节点 发送测试信息以测试至少一个主名字节点是否正常工作,当至少一主名字节点发生故障 时,向其它备用名字节点发送自身的节点信息和选举自身成为主名字节点的信息。
其它备用名字节点中的第二备用名字节点,在第一备用名字节点的选举值大于自 身的选举值时,如果第一备用名字节点的元数据标识值大于自身的元数据标识值,则将选 举第一备用名字节点成为主名字节点的信息作为选举结果发送给其它备用名字节点。
需要说明的是,在第一备用名字节点的选举值大于自身的选举值时,可能存在第 一备用名字节点的元数据标识值等于自身的元数据标识值的情况,此时,可进一步基于节 点标识值确定是否同意选举第一备用名字节点成为主名字节点。在一种可能的实现方式 中,可预先设定当第一备用名字节点的节点标识大于第二备用名字节点时,第二备用名字 节点同意选举第一备用名字节点成为主名字节点,在另一种可能的实现方式中,可预先设 定当第一备用名字节点的节点标识小于第二备用名字节点时,第二备用名字节点同意选举 第一备用名字节点成为主名字节点。
第一备用名字节点,在接收到的选举结果表明大于预设数量的名字节点选举自身 成为主名字节点时,将自身设置为主名字节点。
第二备用名字节点,在第一备用名字节点的选举值等于自身的选举值时,判断自 身的元数据标识值是否大于第一备用名字节点的元数据标识值,如果是,则更新选举值,将 选举值加1,并将选举自身成为主名字节点的信息作为选举结果发送给其它备用名字节点。
需要说明的是,各个备用名字节点在发送选举结果时,可将自身的节点信息一并 发送,以便其它备用名字节点发现自身的节点信息较旧时进行更新。
第二备用名字节点,在第一备用名字节点的选举值小于自身的选举值时,将自身 的节点信息发送给第一备用名字节点,以使第一备用名字节点基于第二备用名字节点的节 点信息更新自身的节点信息。
需要说明的是,在一种可能的实现方式中,第一备用名字会判断是否接收到所有 备用名字节点的选举结果,如果是,则直接基于选举结果设置自身的角,具体的,如果选 举结果中有大于预设数量的名字节点选举自身成为主名字节点,则设置自身的角为主名 字节点,否则,设置自身的角为备用名字节点。在另一种可能的实现方式中,第一备用名 字节点不用等到接收到所有备用名字节点的选举结果之后再设置自身的角,而是基于接 收的选举结果实时统计当前选举自身成为主名字节点的备用名字节点的数量,如果当前选 举自身成为主名字节点的备用名字节点的数量大于预设数量,则等待预设时长,如果预设 时长内没有收到其它备用节点发送的优于自身的节点信息(例如没有收到元数据标识值大 于自身的元数据标识值的节点信息),则设置自身成为主名字节点,否则进行下一次选举。 第一备用节点在将自身的角设置为主名字节点之后,将自身成为主名字节点的信息同步 给其它名字节点。
对于每个备用名字节点而言,其在当前选举过程中会存在三种状态,LOOKING(选 举状态)、FOLLOWING(备用节点状态)、LEADING(主节点状态),上述第二备用名字节点执行 的操作均是第一备用名字节点处于LOOKING状态时的操作。
当第一备用名字节点为FOLLOWING或LEADING状态时,对于第二备用名字节点而 言,如果自身的选举值与第一备用名字节点的选举值相同,且第一备用名字节点的状态为 LEADING状态,那么判断是否有大于预设数量的备用名字节点选举了第一备用名字节点成 为主名字节点,如果是,则退出选举,如果否,则等待预设时长,若预设时长后,并未有大于 预设数量的备用名字节点选举第一备用名字节点成为主名字节点,则发起下一轮选举。如 果第二备用名字节点的选举值与第一备用名字节点的选举值不相同,此时存在两种情况, 第一种情况是第二备用名字节点的选举值大于第一备用名字节点,此时,需基于元数据标 识值重新选举,第二种情况是第二备用名字节点的选举值小于第一备用名字节点,此时第 二备用名字节点需更新自身的节点信息。
下面通过一具体实例对上述备用名字节点选举主名字节点的过程进行说明:
(1)假设备用名字节点包括NN1、NN2和NN3,NN2首先发现一主名字节点故障了,NN2 选举自身作为主名字节点,将自身的节点信息及选举自身成为主名字节点的信息广播给 NN1和NN3,如图6a所示。
(2)对于NN1而言,其在接收到NN2的数据后,发现自身的MetaID为3,而NN2的 MetaID为2,即自身的MetaID更新一些,则其对选举NN2作为主名字节点提出异议,将 TransNumber的值加1,将自身的节点信息以及选举自身作为主名字节点的信息广播给NN2 和NN3。对于NN3而言,其在接收到NN2的数据后发现自身的MetaID较旧,则更新自身的节点 信息,然后广播自身节点信息及选举NN2成为主名字节点的信息给NN1与NN2,数据传送过程 如图6b所示。
(3)如上图6b,NN2接收到来自NN1的数据,由于NN2的TransNumber小于NN1的节点 信息中的TransNumber,因此,此次是一次更新了的选举,将NN2的TransNumber值设为2,由 于NN2的MetaID小于NN1的节点信息中的MetaID,因此,NN2更新自身的MetaID,接受NN1成为 主名字节点,并将更新后自身的节点信息以及选举NN1成为主名字节点的信息广播给NN1和 NN3。
此时,NN2接收到了来自NN3的数据,NN2此时的TransNumber值为2,而收到的数据 中的TransNumber为1,说明NN3在一次较早的选举中,则NN2将自身的信息发送给NN3,同时, NN1也接收到了来自NN3的数据,NN1的TransNumber为2,大于收到数据的TransNumber,因此 NN1将自身的信息发送给NN3。
假设此时NN3收到了来自NN1的数据,收到数据的TransNumber为2大于NN3自身的 TransNumber,因此,是更新了的选举,NN3的MetaID为2小于收到数据的MetaID,因此NN3更 新自身的信息,并向NN1与NN2发送信息同意NN1成为主名字节点,此时的数据传送过程各节 点的数据如图6c所示。
(4)NN1接收到来自NN2的数据,此时它的列表中已经有大于一半的节点选择自身 成为主名字节点,因此,它将自己的角变为主名字节点,并将自身成为主名字节点的信息 广播给NN2和NN3,如图6d所示,退出选举过程。NN3收到了NN1和NN2的选举结果,均是选择 NN1为主名字节点,因此,NN3将自己的角设置为备用名字节点,并广播给其它节点,退出 选举过程;NN2同样将自己角设置为备用名字节点,整个选举过程结束。
本发明提供的服务集,备用名字节点可通过向主名字节点发送测试信息来获知 主名字节点是否发生故障,并在主名字节点发生故障时,多个备用名字节点能够通过选举 策略选出主名字节点。即本发明提供的服务集及HDFS集可自主发现主名字节点的故障 信息,并在某一主名字节点发生故障时,使备用名字节点成为主名字节点,而不再依赖于 Zookeeper集,系统架构简化,运维成本大大降低。
本发明实施例还提供了一种HDFS集,该HDFS集可以包括上述任一实施例提供 的服务集。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他 实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和设备,可以 通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的 划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件 可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或 讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间 接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显 示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个 网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目 的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个 单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以 存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说 对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计 算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个 人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。 而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存 储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
本文发布于:2023-04-13 22:38:25,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/86780.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |