一种实例的控制方法、节点、终端和分布式存储系统与流程

文档序号:21406701发布日期:2020-07-07 14:40阅读:160来源:国知局
一种实例的控制方法、节点、终端和分布式存储系统与流程

本发明涉及存储技术,尤其涉及一种实例的控制方法、节点、终端和分布式存储系统。



背景技术:

目前,在分布式存储系统中,服务的实例分散在分布式存储系统的各个节点上,主节点通过查询接口实时的查询各个从节点的服务的实例的信息,进行服务的实例通信。

然而,在实际应用中,若从节点的服务的实例发生故障时,例如,由于网络离线或者掉电导致不可用,导致分布式存储系统的可靠性较差;由此可以看出,现有的分布式存储系统存在可靠性较差的技术问题。



技术实现要素:

有鉴于此,本发明实施例提供一种实例的控制方法、节点、终端和分布式存储系统,以解决现有技术中存在的分布式存储系统的可靠性较差的技术问题。

本发明的技术方案是这样实现的:

第一方面,本发明实施例提供了一种实例的控制方法,所述方法应用于分布式存储系统的主节点中,其中,所述分布式存储系统还包括至少两个从节点,包括:

若确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了所述第二从节点以外的从节点中确定出第一从节点;

向所述第一从节点发送控制指令,以控制所述第一从节点执行所述第一实例。

在上述方法中,所述确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,包括:

接收来自所述从节点所执行的服务的实例的运行信息;

若所述运行信息指示所述从节点的第二从节点所执行的服务的第一实例处于故障状态,确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态。

在上述方法中,所述接收来自所述从节点所执行的服务的实例的运行信息,包括:

每隔第一预设时间段接收来自所述从节点所执行的服务的实例的运行信息。

在上述方法中,所述确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,包括:

若在第一预设时间段内未接收到来自所述从节点的第二从节点所执行的服务的第一实例的运行信息,确定所述第二从节点所执行的服务的第一实例处于故障状态。

在上述方法中,若所述从节点的个数为至少三个时,相应地,所述若确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了所述第二从节点以外的从节点中确定出第一从节点,包括:

若确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,获取所述从节点的实例分布信息;其中,所述实例分布信息用于记录所述从节点的状态以及所述从节点所执行的实例的状态;

根据所述从节点的实例分布信息,采用预设的负载均衡算法,从所述第二从节点以外的从节点中确定出所述第一从节点。

在上述方法中,所述根据所述从节点的实例分布信息,采用预设的负载均衡算法,从所述第二从节点以外的从节点中确定出所述第一从节点,包括:

若所述从节点的实例分布信息指示所述第二从节点的备用节点的状态为在线,从除了所述第二从节点以外的从节点中选取出所述第二从节点的备用节点,将所述第二从节点的备用节点确定为所述第一从节点;

若所述从节点的实例分布信息指示所述第二从节点的备用节点的状态为不在线,根据所述从节点的实例分布信息,从除了所述第二从节点以外的从节点中确定出正在执行的实例个数最少的从节点,将所述正在执行的实例个数最少的从节点确定为所述第一从节点。

在上述方法中,在从所述第二从节点以外的从节点中确定出所述第一从节点之后,所述方法还包括:

若所述第一从节点所执行的实例与所述第一实例之间存在互斥关系,重新从所述第二从节点以外的从节点中确定出所述第一从节点,以使得重新确定出的第一从节点所执行的实例与所述第一实例之间不存在互斥关系。

在上述方法中,在从所述第二从节点以外的从节点中确定出所述第一从节点之后,所述方法还包括:

若确定已经下发第一指令至所述第一从节点,丢弃当前从所述第二从节点以外的从节点中确定出所述第一从节点的信息,以禁止再次下发所述第一指令至所述第一从节点;

其中,所述第一指令为所述第一从节点执行所述第一实例的指令。

在上述方法中,所述方法还包括:

查看所述从节点的状态和所述从节点所执行的服务的实例的状态,以更新所述从节点的实例分布信息。

在上述方法中,在向所述第一从节点发送控制指令,以控制所述第一从节点执行所述第一实例之后,所述方法还包括:

若所述第一从节点执行所述第一实例成功,更新所述从节点的实例分布信息;

若所述第一从节点执行所述第一实例失败,更新所述从节点的实例分布信息,返回执行所述从所述第二从节点以外的从节点中确定出所述第一从节点。

第二方面,本发明实施例提供了一种实例的控制方法,所述方法应用于分布式存储系统的第一从节点中,所述分布式存储系统还包括主节点和第二从节点,包括:

若所述第二从节点所执行的服务的第一实例处于故障状态,接收来自所述主节点的针对所述第一实例的控制指令;

根据所述控制指令,控制执行所述第一实例。

在上述方法中,所述方法还包括:

向所述主节点发送所执行的服务的实例的运行信息;其中,所述运行信息用于指示所执行的服务的实例所处的状态为正常状态或者故障状态。

在上述方法中,所述向所述主节点发送所执行的服务的实例的运行信息,包括:

每隔第一预设时间段向所述主节点发送所执行的服务的实例的运行信息。

第三方面,本发明实施例提供了一种主节点,所述主节点设置于分布式存储系统中,所述分布式存储系统还包括至少两个从节点,包括:

确定模块,用于若确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了所述第二从节点以外的从节点中确定出第一从节点;

发送模块,用于向所述第一从节点发送控制指令,以控制所述第一从节点执行所述第一实例。

在上述节点中,所述主节点确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态中,包括:

接收来自所述从节点所执行的服务的实例的运行信息;

若所述运行信息指示所述从节点的第二从节点所执行的服务的第一实例处于故障状态,确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态。

在上述节点中,所述主节点接收来自所述从节点所执行的服务的实例的运行信息中,包括:

每隔第一预设时间段接收来自所述从节点所执行的服务的实例的运行信息。

在上述节点中,所述主节点确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态中,包括:

若在第一预设时间段内未接收到来自所述从节点的第二从节点所执行的服务的第一实例的运行信息,确定所述第二从节点所执行的服务的第一实例处于故障状态。

在上述节点中,若所述从节点的个数为至少三个,相应地,所述确定模块,具体用于:

若确定所述从节点的第二从节点所执行的服务的第一实例处于故障状态,获取所述从节点的实例分布信息;其中,所述实例分布信息用于记录所述从节点的状态以及所述从节点所执行的实例的状态;

根据所述从节点的实例分布信息,采用预设的负载均衡算法,从所述第二从节点以外的从节点中确定出所述第一从节点。

在上述节点中,确定模块根据所述从节点的实例分布信息,采用预设的负载均衡算法,从所述第二从节点以外的从节点中确定出所述第一从节点中,包括:

若所述从节点的实例分布信息指示所述第二从节点的备用节点的状态为在线,从除了所述第二从节点以外的从节点中选取出所述第二从节点的备用节点,将所述第二从节点的备用节点确定为所述第一从节点;

若所述从节点的实例分布信息指示所述第二从节点的备用节点的状态为不在线,根据所述从节点的实例分布信息,从除了所述第二从节点以外的从节点中确定出正在执行的实例个数最少的从节点,将所述正在执行的实例个数最少的从节点确定为所述第一从节点。

在上述节点中,所述主节点还用于:

在从所述第二从节点以外的从节点中确定出所述第一从节点之后,若所述第一从节点所执行的实例与所述第一实例之间存在互斥关系,重新从所述第二从节点以外的从节点中确定出所述第一从节点,以使得重新确定出的第一从节点所执行的实例与所述第一实例之间不存在互斥关系。

在上述节点中,所述主节点还用于:

在从所述第二从节点以外的从节点中确定出所述第一从节点之后,若确定已经下发第一指令至所述第一从节点,丢弃当前从所述第二从节点以外的从节点中确定出所述第一从节点的信息,以禁止再次下发所述第一指令至所述第一从节点;

其中,所述第一指令为所述第一从节点执行所述第一实例的指令。

在上述节点中,所述主节点还用于:

查看所述从节点的状态和所述从节点所执行的服务的实例的状态,以更新所述从节点的实例分布信息。

在上述节点中,所述主节点还用于:

在向所述第一从节点发送控制指令,以控制所述第一从节点执行所述第一实例之后,若所述第一从节点执行所述第一实例成功,更新所述从节点的实例分布信息;

若所述第一从节点执行所述第一实例失败,更新所述从节点的实例分布信息,返回执行所述从所述第二从节点以外的从节点中确定出所述第一从节点。

第四方面,本发明实施例提供了一种第一从节点,所述第一从节点设置于分布式存储系统中,所述分布式存储系统还包括主节点和第二从节点,包括:

接收模块,用于若所述第二从节点所执行的服务的第一实例处于故障状态,接收来自所述主节点的针对所述第一实例的控制指令;

控制模块,用于根据所述控制指令,控制执行所述第一实例。

在上述节点中,所述第一从节点还用于:

向所述主节点发送所执行的服务的实例的运行信息;其中,所述运行信息用于指示所执行的服务的实例所处的状态为正常状态或者故障状态。

在上述节点中,所述第一从节点向所述主节点发送所执行的服务的实例的运行信息中,包括:

每隔第一预设时间段向所述主节点发送所执行的服务的实例的运行信息。

第五方面,本发明实施例还提供了一种第一终端,包括:处理器以及存储有所述处理器可执行指令的存储介质,所述存储介质通过通信总线依赖所述处理器执行操作,若所述指令被所述处理器执行,执行上述一个或多个实施例中主节点执行的所述实例的控制方法。

第六方面,本发明实施例还提供了一种第二终端,包括:处理器以及存储有所述处理器可执行指令的存储介质,所述存储介质通过通信总线依赖所述处理器执行操作,若所述指令被所述处理器执行,执行上述一个或多个实施例中第一从节点执行的所述实例的控制方法。

第七方面,本发明实施例还提供了一种分布式存储系统,包括上述一个或多个实施例所述的第一终端和上述一个或多个实施例所述的第二终端。

第八方面,本发明实施例提供了一种计算机存储介质,存储有可执行指令,若所述可执行指令被一个或多个处理器执行,所述处理器执行上述一个或多个实施例中主节点执行的所述实例的控制方法或者上述一个或多个实施例中第一从节点执行的所述实例的控制方法。

本发明实施例所提供的一种实例的控制方法、节点、终端和分布式存储系统,该方法应用于分布式存储系统的主节点中,其中,分布式存储系统还包括至少两个从节点;该方法包括:若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了第二从节点以外的从节点中确定出第一从节点,向第一从节点发送控制指令,以控制第一从节点执行第一实例;也就是说,在本发明实施例中,在分布式存储系统中,若有一个从节点所执行的服务的实例出现故障,主节点会重新为该实例确定一个从节点,并控制重新确定出的从节点来执行该实例,以防止由于从节点的故障所导致的该实例中断无法继续执行的问题,这样,通过主节点及时为由于故障导致的中断执行的实例重新确定出从节点,使得该实例能够不间断的被执行,从而提高了分布式存储系统的可靠性,有利于提高分布式存储系统的性能,进而提高了用户的体验度。

附图说明

图1为本发明实施例中的一种可选的分布式存储系统的结构示意图;

图2为本发明实施例中的一种可选的实例的控制方法的流程交互示意图;

图3为本发明实施例中的一种可选的通用高可用框架的结构示意图;

图4为本发明实施例中的一种可选的故障场景高可用框架的静态结构示意图;

图5为本发明实施例中的一种可选的故障处理方法的流程示意图;

图6为本发明实施例中的一种可选的采用负载均衡算法进行实例的控制的示意图;

图7为本发明实施例中的一种可选的实例的控制方法的实例的流程示意图;

图8为本发明实施例中的一种可选的实例的控制方法的流程示意图;

图9为本发明实施例中的另一种可选的实例的控制方法的流程示意图;

图10为本发明实施例中的一种可选的主节点的结构示意图;

图11为本发明实施例中的一种可选的第一从节点的结构示意图;

图12为本发明实施例中的一种可选的第一终端的结构示意图;

图13为本发明实施例提供的一种可选的第二终端的结构示意图;

图14为本发明实施例中的一种可选的分布式存储系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

本发明实施例提供一种实例的控制方法,该方法应用于分布式存储系统中,图1为本发明实施例中的一种可选的分布式存储系统的结构示意图,如图1所示,该分布式存储系统中包括主节点11和从节点12;其中,

主节点11的数目通常为一个,从节点12的数目通常为至少两个,例如图1中所示,从节点12可以包括第一从节点1,第二从节点2,…,第n从节点n等等;这里,在分布式存储系统中,主节点11通过查询接口实时的查询服务的实例的信息,进行服务的实例的通信,主节点11与所有的从节点12建立有通信连接,可以与每个从节点之间进行通信,主节点11还可以控制从节点与从节点之间的通信。

然而,针对分布式存储系统而言,当集群中的一个节点的服务的实例,由于网络离线或者掉电会导致该节点不可用,从而影响该节点上的服务的实例中断,从而导致分布式存储系统的可靠性较差。

为了提高分布式存储系统的可靠性,本发明实施例提供一种实例的控制方法,该方法应用于上述分布式存储系统中,图2为本发明实施例中的一种可选的实例的控制方法的流程交互示意图,如图2所示,该实例的控制方法可以包括:

s201:若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,主节点从除了第二从节点以外的从节点中确定出第一从节点;

具体来说,若从节点中的第二从节点所执行的服务的第一实例发生故障,主节点会从除了第二从节点以外的从节点中确定出第一从节点,其中,这里,需要说明的是,每个从节点中都执行有一个或多个服务,每个服务中包括一个或多个实例,上述第一实例可以为一个实例,也可以为多个实例,这里,本发明实施例对此不作具体限定。

例如,当第二从节点所执行的一个服务的所有实例均发生故障,此时说明第二从节点所执行的一个服务发生故障,需要为该服务重新确定从节点以保证该服务能够继续执行。

在确定出第二从节点所执行的服务或者实例出现故障之后,为了保障出现故障的服务或者实例能够继续执行,这里,主节点从除了第二从节点以外的从节点中确定出第一从节点,使用第一从节点来继续执行发生故障的服务或者实例,以保证发生故障的服务或者实例不中断。

为了使得主节点确定出第二从节点所执行的服务的第一实例处于故障状态,可以通过在分布式存储系统中的每个从节点中设置监控程序,用于主节点监听从节点所执行的服务的实例的状态,在一种可选的实施例中,主节点确定从节点的第二从节点所执行的服务的第一实例处于故障状态,可以包括:

主节点接收来自从节点所执行的服务的实例的运行信息;

若运行信息指示从节点的第二从节点所执行的服务的第一实例处于故障状态,主节点确定从节点的第二从节点所执行的服务的第一实例处于故障状态。

也就是说,从节点向主节点上报所执行的服务的实例的运行信息,使得主节点能够获知从节点所执行的服务的实例的运行信息,根据从节点所执行的服务的实例的运行信息,可以获知从节点的运行状态是正常状态还是故障状态,若运行信息指示第二从节点所执行的服务的第一实例处于故障状态,主节点能够确定第二从节点所执行的服务的第一实例处于故障状态,当然,若运行信息指示第二从节点所执行的服务的第一实例处于正常状态,主节点能够确定第二从节点所执行的服务的第一实例处于正常状态。

进一步地,为了使得主节点能够更加高效的监听从节点的运行状态,在一种可选的实施例中,主节点接收来自从节点所执行的服务的实例的运行信息,可以包括:

主节点每隔第一预设时间段接收来自从节点所执行的服务的实例的运行信息。

也就是说,在分布式存储系统中,从节点每隔第一预设时间段向主节点发送自身所执行的服务的实例的运行信息,使得主节点每隔第一预设时间段能够接收到来自从节点所执行的服务的实例的运行信息,这样,可以使得主节点及时地获知从节点的运行状况,及时地为由于发生故障而中断的实例重新确定一个新的从节点以继续执行该实例。

为了使得主节点确定出第二从节点所执行的服务的第一实例处于故障状态,在一种可选的实施例中,主节点确定从节点的第二从节点所执行的服务的第一实例处于故障状态,可以包括:

若在第一预设时间段内未接收到来自从节点的第二从节点所执行的服务的第一实例的运行信息,主节点确定第二从节点所执行的服务的第一实例处于故障状态。

具体来说,由于从节点会每隔第一预设时间段向主节点上报自身所执行的服务的实例的运行信息,那么,若从节点在第一预设时间段内没有向主节点上报自身所执行的服务的实例的运行信息,也就是说,主节点在第一预设时间段内未接收到来自某个从节点所执行的服务的实例的运行信息,认为该从节点所执行的该实例处于故障状态,即主节点超时未接收到第二从节点所执行的服务的第一实例的运行信息,主节点确定第二从节点所执行的服务的第一实例处于故障状态。

另外,当从节点的个数为至少三个时,也就是说,当一个从节点中的实例发生故障,剩下正常运行的从节点的个数至少为两个时,为了确定出第一从节点,在一种可选的实施例中,相应地,s201可以包括:

若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,主节点获取从节点的实例分布信息;

主节点根据从节点的实例分布信息,采用预设的负载均衡算法,从第二从节点以外的从节点中确定出第一从节点。

具体来说,若主节点确定第二从节点所执行的服务的第一实例处于故障状态,主节点先获取从节点的实例分布信息,其中,该实例分布信息用于记录从节点的状态以及从节点所执行的实例的状态;也就是说,主节点先获取各个从节点的状态,例如,各个从节点是否在线,还获取到各个从节点所执行的实例的状态,例如,每个从节点上所执行的服务的各个实例,以及各个实例处于正常状态还是故障状态,这样,主节点可以获知各个从节点在之前和当前的状态以及之前所执行的或者正在执行的服务的各个实例的状态。

在获知到各个从节点的状态以及所执行的实例的状态之后,为了能够找到合适的第一从节点,这里,主节点根据从节点的实例分布信息,并采用预设的负载均衡算法来从除了第二从节点以外的从节点中确定出第一从节点,这样,确定出的第一从节点考虑到了整个分布式存储系统中各个从节点的资源配置情况,有利于更好的继续执行第一实例。

为了确定出合适的且稳定的第一从节点,在一种可选的实施例中,主节点根据从节点的实例分布信息,采用预设的负载均衡算法,从第二从节点以外的从节点中确定出所述第一从节点,可以包括:

若从节点的实例分布信息指示第二从节点的备用节点的状态为在线,主节点从除了第二从节点以外的从节点中选取出第二从节点的备用节点,将第二从节点的备用节点确定为第一从节点;

若从节点的实例分布信息指示第二从节点的备用节点的状态为不在线,主节点根据从节点的实例分布信息,主节点从除了第二从节点以外的从节点中确定出正在执行的实例个数最少的从节点,将正在执行的实例个数最少的从节点确定为第一从节点。

其中,每个从节点都预先设置有备用节点,该备用节点为从节点中的一个从节点或者多个从节点,从获取到的从节点的实例分布信息中可以获知第二从节点的备用节点的状态是否在线,若第二从节点的备用节点的状态为在线,主节点直接从除了第二从节点以外的从节点中,也就是剩余的从节点中选取出第二从节点的备用节点作为第一从节点,这样,利用第二从节点的备用节点来继续执行发生故障的实例。

另外,从获取到的从节点的实例分布信息中可知第二从节点的备用节点的状态为不在线时,此时若是将备用节点确定为第一从节点,那么发生故障的实例还是无法继续执行,所以,主节点可以根据从节点的实例分布信息查找到正在执行的实例的个数最少的从节点,并将该从节点确定为第一从节点,这样,能够均衡的调配各个从节点的资源,使得分布式存储系统能够尽可能的实现负载均衡,提高了分布式存储系统的可靠性和性能。

另外,在确定出第一从节点之后,可能存在第一从节点所执行的实例与第一实例之间存在互斥,此时,第一实例是无法继续执行的,为了确定第一实例在第一从节点上能够执行,在一种可选的实施例中,在s201之后,该方法还可以包括:

若第一从节点所执行的实例与第一实例之间存在互斥关系,主节点重新从第二从节点以外的从节点中确定出第一从节点,以使得重新确定出的第一从节点所执行的实例与第一实例之间不存在互斥关系。

具体来说,在确定出第一从节点之后,若确定出的第一从节点所执行的实例与第一实例之间存在互斥关系,此时,即使采用确定出的第一从节点执行第一实例,也是无法正常执行的,所以,为了保证第一实例的正常执行,此时,主节点重新从第二从节点以外的从节点中确定出第一从节点,以保证重新确定出的第一从节点所执行的实例与第一实例之间不存在互斥关系,从而使得重新确定出的第一从节点能够正常执行第一实例。

另外,为了防止主节点重复下发相同的任务导致任务冲突,在一种可选的实施例中,在s201之后,该方法还可以包括:

若确定已经下发第一指令至第一从节点,主节点丢弃当前从第二从节点以外的从节点中确定出第一从节点的信息,以禁止再次下发第一指令至第一从节点;

其中,第一指令为第一从节点执行第一实例的指令。

在实际应用中,若主节点确定出第一从节点之后,会向第一从节点下发任务,例如将第一指令下发至第一从节点,使得第一从节点执行第一实例,当主节点已经下发了第一指令至第一从节点,若此时主节点再次生成第一指令时,会产生任务冲突,为了防止重复发送第一指令所导致的任务冲突,这里,若确定已经下发第一指令至第一从节点,将当前确定出的第一从节点的信息丢弃掉,以防止再次下发第一指令所引起的冲突。

s202:主节点向第一从节点发送控制指令;

s203:第一从节点根据控制指令,控制执行第一实例。

在为第一实例确定出第一从节点之后,主节点生成控制指令,并将控制指令发送至第一从节点,第一从节点在接收到控制指令之后,根据控制指令执行第一实例。

为了能够为发生故障的实例确定出合适的从节点,在一种可选的实施例中,该方法还可以包括:

主节点查看从节点的状态和从节点所执行的服务的实例的状态,以更新从节点的实例分布信息。

也就是说,主节点需要实时的查看各个从节点的状态以及各个从节点所执行的服务的实例的状态,这样,若从节点的状态发生变化,或者从节点所执行的服务的实例的状态发生变化,可以实时地更新从节点的实例分布信息,这样,当再出现发生故障的实例时,可以根据实时更新后的从节点的实例分布信息来为其确定新的从节点,以保证其继续被执行。

当第一从节点执行第一实例之后,在一种可选的实施例中,在s203之后,该方法还可以包括:

若第一从节点执行第一实例成功,主节点更新从节点的实例分布信息;

若第一从节点执行第一实例失败,主节点更新从节点的实例分布信息,返回执行从第二从节点以外的从节点中确定出第一从节点。

具体来说,若主节点控制第一从节点执行第一实例,第一从节点在执行第一实例时有可能成功,也有可能失败,为了及时地保证第一实例的继续执行,若第一从节点执行成功,此时,主节点需要记录该第一从节点的状态以及第一从节点所执行的第一实例的成功状态,以更新从节点的实例分布信息,以保证后续发生故障的实例能够继续执行;若第一从节点执行失败,此时,主节点需要记录该第一从节点的状态以及第一从节点所执行的第一实例的失败状态,以更新从节点的实例分布信息,并重新返回执行s201,即从第二从节点以外的从节点中确定出第一从节点,以使得第一实例能够继续执行。

下面举实例来对上述一个或多个实施例所述的实例的控制方法进行说明。

图3为本发明实施例中的一种可选的通用高可用框架的结构示意图,如图3所示,通过引入通用高可用框架来解决分布式存储系统的服务的实例拉起和分布问题,同时为以后新增服务提供高可用支持。其工作原理如下:

通用高可用框架在每个从节点(例如host1和host2)加入监控程序,其中,host1和host2中均包括控制器monitor,monitor用于将自身的运行信息以心跳包的形式上报至主节点,host1和host2中还提供元数据服务和其他服务,元数据服务中包括fp表实例和sit表实例,其他服务可以分别为app1和app2,host1和host2之间采用高可用(ha,highavailability)。

其中,在通用高可用框架中,包括用于监听各个节点的服务的实例的状态并上报至高可用的主节点,其中,所设置的监控程序以心跳包的方式上报运行信息,如果心跳信息停止说明服务的实例异常;如果心跳超时,主节点将故障节点的服务迁移至其他节点,其中,负载均衡框架中所提供的负载均衡算法决定服务的实例拉起的位置;主节点会自动检测集群服务的负载均衡情况,实例不均衡会发起负载均衡任务,将部分实例迁移至集群其他节点。

可见,通用高可用框架在主机掉电、私网离线场景下,故障节点的服务的实例的快速切换至正常节点,节点服务异常场景下,节点的故障服务快速切换至集群其他节点,主节点故障,主节点快速完成切换,扩容场景,通用高可用框架可以继续添加新的实例,支持新实例的高可用功能。

图4为本发明实施例中的一种可用的故障场景高可用框架的静态结构示意图,如图4所示,在上述静态结构中:服务配置包括了服务管理,故障处理,故障树,节点心跳,连接状态和任务处理;其中,服务配置通过通信模块分别与host1,host2和host3之间进行通信,服务管理用于生成服务分布视图(相当于上述从节点的实例分布信息),host1,host2和host3中都设置有监控程序,并且提供服务1和服务2,通过监控程序将心跳包通过通信模块上报至任务处理,任务处理在接收到心跳包之后,触发任务并更新实例分布信息,同时更新故障树,采用负载均衡算法进行故障处理,将故障上报至服务管理,利用服务分布视图进行服务管理。

其中,针对服务配置:服务配置保存了通用高可用框架监控的所有服务的配置,配置中包含:服务实例信息,心跳超时,监听的故障类型,负载策略等信息;节点心跳:通信模块将各个节点上报上来的心跳信息,汇总上报至故障处理;连接状态:通信模块维护和集群各节点监控程序的连接,感知到连接状态变化上报至故障处理;故障树:故障树信息有故障处理生成,故障树包含了节点、服务、实例的故障状态,状态转换的时间;服务分布视图(相当于上述从节点的实例分布信息)描述了服务的实例在各个节点的拉起情况。

图5为本发明实施例中的一种可选的故障处理方法的流程示意图,如图5所示,该故障处理方法可以包括:

s501:更新服务的实例的心跳;

具体来说,主节点在接收到心跳信息之后,主节点的故障管理模块更新服务/实例的心跳信息。

s502:判断实例是否故障;

具体来说,主节点判断该实例是否为故障状态,若为是,执行s503,若为否,结束。

s503:判断监控开关的状态,若为关闭,结束,若为打开,执行s504;

具体地,主节点的故障处理查看故障树实例状态是否已经关闭监控,如果已经关闭监控,结束,如果监控开关打开,执行s504。

s504:获取服务分布视图,获取拉起倾向位置,按照均衡策略计算拉起位置;

具体地,主节点查看服务的实例是否有拉起位置的倾向值,如果存在直接从倾向位置拉起;如果不存在,获取服务分布视图和负载均衡策略(相当于上述负载均衡算法)计算实例拉起来的位置;

s505:判断实例是否为已有任务;

具体地,主节点检查实例是否为已有执行中的任务;如果有,执行s506,如果没有,执行s507;

s506:检查任务是否冲突,若为是,结束,若为否,执行s507;

具体地,主节点需要检查当前执行的任务和已经下发的任务是否冲突,如果下发的任务有冲突的话,丢弃任务;如果没有冲突,执行s507;

s507:添加实例拉起列表、更新实例状态;

具体地,主节点添加实例拉起列表,更新实例状态;

s508:下发拉起服务;

具体地,主节点下发拉起任务;

s509:判断执行是否成功,若成功,执行s510;若失败,执行s504;

具体地,主节点判断任务是否执行成功,若成功,执行s510;若失败,执行s504;

s510:修改故障树信息;

具体来说,主节点修改故障树信息,设置故障树:添加实例的尝试拉起主机列表,修改实例状态;更新实例分布视图;查看任务的执行状态,如果任务执行成功,修改故障树状态;

s511:初始化服务实例心跳信息;

s512:通知服务管理更新实例分布视图信息。

具体地,主节点初始化服务实例心跳信息,通知服务管理更新实例分布视图信息。

最后,需要说明的是,主节点判断高可用拉起执行失败,记录拉起失败位置,返回s502;若成功,结束。

图6为本发明实施例中的一种可选的采用负载均衡算法进行实例的控制的示意图,如图6所示,该方法可以包括:

查看所有主机(相当于上述主节点和从节点)中,查看表实例聚合副本(相当于备用节点)是否在线,如果在线优先落在聚合副本主机上;如果聚合副本不在线,从表实例少的主机上选一个位置;主节点检查要拉起实例的位置是否满足互斥原则,如果不满足和其他待拉起位置交互位置,如果找不到把冲突实例移至其他实例少的节点上。

如图6所示是负载均衡的算法的一个例子,有3个主机host1、host2、host3,实例表示:实例名(互斥的实例名,副本所在的主机),按照负载均衡算法实例拉起的分布位置如图6中的(a),当主机host3故障后,负载均衡算法把实例inst6(inst5,host3)在主机host1上拉起,实例inst4(inst3,host3)在主机host2上拉起,如图6中的(b)。

图7为本发明实施例中的一种可选的实例的控制方法的实例的流程示意图,如图7所示,该实例的控制方法可以包括:

s701:接收负载的实例和位置;

具体地,主节点在接收到各个从节点的心跳信息之后,根据心跳信息中的运行信息确定出负载的实例和位置;

s702:是否满足实例互斥原则;若满足,执行s703,若不满足,结束。

具体地,主节点获取当前实例分布视图,检查实例的新分布是否满足实例互斥原则,如果不满足报任务执行失败。

s703:检查实例是否满足均衡条件,若满足,执行s704,若不满足,结束。

具体地,主节点检查待均衡的实例是否满足均衡条件,如果不满足不执行负载均衡。

s704:设置故障树---均衡状态、拉起倾向值;

具体地,主节点根据负载均衡算法得到拉起位置,设置故障树,设置待均衡实例的拉起倾向值,实例状态,更新实例分布视图。

s705:判断负载任务是否支持并发;若不支持,执行s706;若支持,执行s707;

具体地,主节点的故障管理检查负载实例是否冲突,如果冲突不支持并行下发。

s706:延迟执行负载任务;

具体地,主节点确定负载任务不支持时,延迟执行负载任务。

s707:检查服务支持抢占拉起;

s708:判断是否支持抢占拉起;若支持,执行s709,若不支持,执行s710;

具体地,主节点检查待均衡服务是否支持拉起抢占模式,如果支持抢占,下发高可用拉起任务,如果不支持抢占,下发实例关闭任务。

s709:设置抢占式拉起任务;执行s711;

s710:下发关闭任务;执行s712;

s711:下发拉起任务,执行s713;

s712:判断下发关闭任务是否执行成功?若成功,执行s714,若不成功,执行s706;

s713:高可用流程拉起,结束。

s714:更新实例状态。

查看任务执行结果,执行成功后下发高可用拉起任务,执行失败后上报该实例负载失败。

通过上述实例,主机掉电、私网离线场、节点服务异常景下,故障节点的服务快速切换至正常节点,而且尽可能的实现负载均衡,保证业务不中断;扩容场景,高可用服务可以继续添加新的实例,支持新实例的高可用功能;高可用框架本身也具有高可用性,支持多种负载均衡算法,当集群高可用主控节点故障,主控节点快速完成切换。

本发明实施例所提供的一种实例的控制方法,该方法应用于分布式存储系统的主节点中,其中,分布式存储系统还包括至少两个从节点;该方法包括:若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了第二从节点以外的从节点中确定出第一从节点,向第一从节点发送控制指令,以控制第一从节点执行第一实例;也就是说,在本发明实施例中,在分布式存储系统中,若有一个从节点所执行的服务的实例出现故障,主节点会重新为该实例确定一个从节点,并控制重新确定出的从节点来执行该实例,以防止由于从节点的故障所导致的该实例中断无法继续执行的问题,这样,通过主节点及时为由于故障导致的中断执行的实例重新确定出从节点,使得该实例能够不间断的被执行,从而提高了分布式存储系统的可靠性,有利于提高分布式存储系统的性能,进而提高了用户的体验度。

下面以分布式存储系统中所部属的各个设备侧对上述实例的控制方法进行说明。

首先,以主节点侧对实例的控制方法进行描述。

本发明实施例提供一种实例的控制方法,该方法应用于分布式存储系统的主节点中,其中,该分布式存储系统还包括至少两个从节点,图8为本发明实施例中的一种可选的实例的控制方法的流程示意图,如图8所示,该实例的控制方法可以包括:

s801:若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了第二从节点以外的从节点中确定出第一从节点;

s802:向第一从节点发送控制指令,以控制第一从节点执行第一实例。

在一种可选的实施例中,确定从节点的第二从节点所执行的服务的第一实例处于故障状态,包括:

接收来自从节点所执行的服务的实例的运行信息;

若运行信息指示从节点的第二从节点所执行的服务的第一实例处于故障状态,确定从节点的第二从节点所执行的服务的第一实例处于故障状态。

在一种可选的实施例中,接收来自从节点所执行的服务的实例的运行信息,包括:

每隔第一预设时间段接收来自从节点所执行的服务的实例的运行信息。

在一种可选的实施例中,确定从节点的第二从节点所执行的服务的第一实例处于故障状态,包括:

若在第一预设时间段内未接收到来自从节点的第二从节点所执行的服务的第一实例的运行信息,确定第二从节点所执行的服务的第一实例处于故障状态。

在一种可选的实施例中,若从节点的个数为至少三个,相应地,s801可以包括:

若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,获取从节点的实例分布信息;其中,实例分布信息用于记录从节点的状态以及从节点所执行的实例的状态;

根据从节点的实例分布信息,采用预设的负载均衡算法,从第二从节点以外的从节点中确定出第一从节点。

在一种可选的实施例中,根据从节点的实例分布信息,采用预设的负载均衡算法,从第二从节点以外的从节点中确定出所述第一从节点,包括:

若从节点的实例分布信息指示第二从节点的备用节点的状态为在线,从除了第二从节点以外的从节点中选取出第二从节点的备用节点,将第二从节点的备用节点确定为第一从节点;

若从节点的实例分布信息指示第二从节点的备用节点的状态为不在线,根据从节点的实例分布信息,从除了第二从节点以外的从节点中确定出正在执行的实例个数最少的从节点,将正在执行的实例个数最少的从节点确定为第一从节点。

在一种可选的实施例中,在s801之后,该方法可以包括:

若第一从节点所执行的实例与第一实例之间存在互斥关系,重新从第二从节点以外的从节点中确定出第一从节点,以使得重新确定出的第一从节点所执行的实例与第一实例之间不存在互斥关系。

在一种可选的实施例中,在s801之后,该方法可以包括:

若确定已经下发第一指令至第一从节点,丢弃当前从第二从节点以外的从节点中确定出第一从节点的信息,以禁止再次下发第一指令至第一从节点;

其中,第一指令为第一从节点执行第一实例的指令。

在一种可选的实施例中,该方法还包括:

查看从节点的状态和从节点所执行的服务的实例的状态,以更新从节点的实例分布信息。

在一种可选的实施例中,在s802之后,该方法还可以包括:

若第一从节点执行第一实例成功,更新从节点的实例分布信息;

若第一从节点执行第一实例失败,更新从节点的实例分布信息,返回执行从第二从节点以外的从节点中确定出第一从节点。

其次,以从节点侧对实例的控制方法进行描述。

本发明实施例提供一种实例的控制方法,该方法应用于分布式存储系统的第一从节点中,分布式存储系统还包括主节点和第二从节点,图9为本发明实施例中的另一种可选的实例的控制方法的流程示意图,如图9所示,该实例的控制方法可以包括:

s901:若第二从节点所执行的服务的第一实例处于故障状态,接收来自主节点的针对第一实例的控制指令;

s902:根据控制指令,控制执行第一实例。

在一种可选的实施例中,该方法还可以包括:

向主节点发送所执行的服务的实例的运行信息;其中,运行信息用于指示所执行的服务的实例所处的状态为正常状态或者故障状态。

在一种可选的实施例中,向主节点发送所执行的服务的实例的运行信息,包括:

每隔第一预设时间段向主节点发送所执行的服务的实例的运行信息。

基于同一发明构思,本发明实施例提供一种主节点,与上述一个或多个实施例中所述的主节点一致。

其中,主节点设置于分布式存储系统中,分布式存储系统还包括至少两个从节点,图10为本发明实施例中的一种可选的主节点的结构示意图,该主节点可以包括:确定模块101和发送模块102;其中,

确定模块101,用于若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,从除了第二从节点以外的从节点中确定出第一从节点;

发送模块102,用于向第一从节点发送控制指令,以控制第一从节点执行第一实例。

在一种可选的实施例中,该主节点确定从节点的第二从节点所执行的服务的第一实例处于故障状态中,可以包括:

接收来自从节点所执行的服务的实例的运行信息;

若运行信息指示从节点的第二从节点所执行的服务的第一实例处于故障状态,确定从节点的第二从节点所执行的服务的第一实例处于故障状态。

在一种可选的实施例中,该主节点接收来自从节点所执行的服务的实例的运行信息中,可以包括:

每隔第一预设时间段接收来自从节点所执行的服务的实例的运行信息。

在一种可选的实施例中,该主节点确定从节点的第二从节点所执行的服务的第一实例处于故障状态中,可以包括:

若在第一预设时间段内未接收到来自从节点的第二从节点所执行的服务的第一实例的运行信息,确定第二从节点所执行的服务的第一实例处于故障状态。

在一种可选的实施例中,若从节点的个数为至少三个,相应地,确定模块101,具体用于:

若确定从节点的第二从节点所执行的服务的第一实例处于故障状态,获取从节点的实例分布信息;其中,实例分布信息用于记录从节点的状态以及从节点所执行的实例的状态;

根据从节点的实例分布信息,采用预设的负载均衡算法,从第二从节点以外的从节点中确定出第一从节点。

在一种可选的实施例中,确定模块101根据从节点的实例分布信息,采用预设的负载均衡算法,从第二从节点以外的从节点中确定出第一从节点中,可以包括:

若从节点的实例分布信息指示第二从节点的备用节点的状态为在线,从除了第二从节点以外的从节点中选取出第二从节点的备用节点,将第二从节点的备用节点确定为第一从节点;

若从节点的实例分布信息指示第二从节点的备用节点的状态为不在线,根据从节点的实例分布信息,从除了第二从节点以外的从节点中确定出正在执行的实例个数最少的从节点,将正在执行的实例个数最少的从节点确定为第一从节点。

在一种可选的实施例中,该主节点还用于:

在从第二从节点以外的从节点中确定出第一从节点之后,若第一从节点所执行的实例与第一实例之间存在互斥关系,重新从第二从节点以外的从节点中确定出第一从节点,以使得重新确定出的第一从节点所执行的实例与第一实例之间不存在互斥关系。

在一种可选的实施例中,该主节点还用于:

在从第二从节点以外的从节点中确定出第一从节点之后,若确定已经下发第一指令至第一从节点,丢弃当前从第二从节点以外的从节点中确定出第一从节点的信息,以禁止再次下发第一指令至第一从节点;

其中,第一指令为第一从节点执行第一实例的指令。

在一种可选的实施例中,该主节点还用于:

查看从节点的状态和从节点所执行的服务的实例的状态,以更新从节点的实例分布信息。

在一种可选的实施例中,该主节点还用于:

在向第一从节点发送控制指令,以控制第一从节点执行第一实例之后,若第一从节点执行第一实例成功,更新从节点的实例分布信息;

若第一从节点执行第一实例失败,更新从节点的实例分布信息,返回执行从第二从节点以外的从节点中确定出第一从节点。

本发明实施例还提供一种第一从节点,与上述一个或多个实施例中所述的第一从节点一致。

其中,第一从节点设置于分布式存储系统中,分布式存储系统还包括主节点和第二从节点,图11为本发明实施例中的一种可选的第一从节点的结构示意图,如图11所示,该第一从节点可以包括:接收模块111和控制模块112;其中,

接收模块111,用于若第二从节点所执行的服务的第一实例处于故障状态,接收来自主节点的针对第一实例的控制指令;

控制模块112,用于根据控制指令,控制执行第一实例。

在一种可选的实施例中,第一从节点还用于:

向主节点发送所执行的服务的实例的运行信息;其中,运行信息用于指示所执行的服务的实例所处的状态为正常状态或者故障状态。

在一种可选的实施例中,第一从节点向主节点发送所执行的服务的实例的运行信息中,可以包括:

每隔第一预设时间段向主节点发送所执行的服务的实例的运行信息。

图12为本发明实施例中的一种可选的第一终端的结构示意图,如图12所示,本发明实施例提供了一种第一终端1200,包括:

处理器121以及存储有所述处理器121可执行指令的存储介质122,所述存储介质122通过通信总线123依赖所述处理器121执行操作,若所述指令被所述处理器121执行,执行上述一个或多个实施例中主节点执行的所述的实例的控制方法。

需要说明的是,实际应用时,第一终端1200中的各个组件通过通信总线123耦合在一起。可理解,通信总线123用于实现这些组件之间的连接通信。通信总线123除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图12中将各种总线都标为通信总线123。

图13为本发明实施例提供的一种可选的第二终端的结构示意图,如图13所示,本发明实施例提供了一种第二终端1300,包括:

处理器131以及存储有所述处理器131可执行指令的存储介质132,所述存储介质132通过通信总线133依赖所述处理器131执行操作,若所述指令被所述处理器131执行,执行上述一个或多个实施例中第一从节点执行的所述的实例的控制方法。

需要说明的是,实际应用时,第二终端1300中的各个组件通过通信总线133耦合在一起。可理解,通信总线133用于实现这些组件之间的连接通信。通信总线133除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图13中将各种总线都标为通信总线133。

本发明实施例还提供一种分布式存储系统,图14为本发明实施例中的一种可选的分布式存储系统的结构示意图,如图14所示,该分布式存储系统1400包括上述一个或多个实施例所述的第一终端和上述一个或多个实施例所述的第二终端。

本发明实施例提供了一种计算机存储介质,存储有可执行指令,当所述可执行指令被一个或多个处理器执行的时候,所述处理器执行上述一个或多个实施例中主节点执行的所述的实例的控制方法或者执行上述一个或多个实施例中第一从节点执行的所述实例的控制方法。

其中,计算机可读存储介质可以是磁性随机存取存储器(ferromagneticrandomaccessmemory,fram)、只读存储器(readonlymemory,rom)、可编程只读存储器(programmableread-onlymemory,prom)、可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom)、电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、快闪存储器(flashmemory)、磁表面存储器、光盘、或只读光盘(compactdiscread-onlymemory,cd-rom)等存储器。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述,仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。

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