一种基于存储集群多节点对的仲裁者实现方法及装置与流程

文档序号:18619580发布日期:2019-09-06 22:21阅读:268来源:国知局
一种基于存储集群多节点对的仲裁者实现方法及装置与流程

本发明涉及网络存储技术领域,尤其涉及一种基于存储集群多节点对的仲裁者实现方法及装置。



背景技术:

存储设备中包括多个LUN(Logical Unit Number,逻辑单元号),用于为应用服务器提供可访问的逻辑存储资源。镜像是存储服务中用于灾备的关键技术,在单节对的模型中主LUN和镜像LUN对上层业务表现为一个LUN,业务的入口是主LUN。如果主LUN所在的节点故障,为了保证业务的连续性,对端节点的镜像LUN会自动反转成主LUN继续提供业务。当镜像LUN无法感知主LUN的状态,主LUN与镜像LUN无法通信时,会导致主LUN和镜像LUN无法自主的去反转角色,从而不会继续向外提供业务访问,导致前端业务中断。由此现有技术中引入了第三方仲裁者在故障发生时指导镜像LUN进行反转继续向外提供业务访问。

现有技术中,单节点对与仲裁者的组网模型如图1所示,其中包括两个存储设备,每个存储设备可以称为一个单点,两个存储设备可以称为一个单节点对,其中每个存储设备分别为不同的生产中心提供存储服务,并且可以通过管理服务器实现统一管理,仲裁者控制服务器(以下简称仲裁者)在后端通过管理网络连接到存储设备对,仲裁者与存储设备对中的每个存储设备通过IP链路直接进行通信。在该模型中,仲裁者与存储设备采用单向同步的通讯方式工作,即节点主动的发送各类请求到仲裁者处理,待仲裁者处理完成并返回响应结果后节点再发送下一个请求。节点对与仲裁者发送的报文中可以包括心跳报文,节点可以通过定期的发送心跳包来检测仲裁者是否正常工作。在图1所示的单节点对仲裁者的模型中,一个节点中包括主LUN和镜像LUN,则一个节点需要同时发送2个心跳报文到仲裁者,而一个节点对则需要同时发送4个心跳报文到仲裁者进行处理。

在集群环境中,同一个节点可以与其它的任意单节点组成节点对,集群中的多个节点对可以通过一个仲裁者进行管理。多节点对与仲裁者的组网模型如图2所示,其中节点2与节点1组成节点对1;节点2与节点3组成节点对2。当把上述单节点对仲裁者连接模型按照现有设计引入到多节点对的模型中时,节点对1和节点对2各自维护到仲裁者的心跳。对于节点2,其既属于节点对1也属于节点对2,如果按照直连方式发送心跳报文,节点2需要发送两份心跳包到仲裁者来分别表明节点对1与节点对2到仲裁者链路正常。

随着集群规模的不断扩大,节点与仲裁者的交互也将随之大幅增加,当规模扩展到一定程度时,仲裁者必然会成为存储集群的性能瓶颈。由于在单节点对直连模型中,节点发起的请求数量相对较少,仲裁者通常只部署了一个进程用于处理节点发送的各类请求。当把单节点对模型拓展到多节点对模型时,节点对数量以及镜像对数量都会大幅增加,现有的单进程模型处理请求必然会导致大量请求处理超时,影响集群的业务及其它功能。



技术实现要素:

有鉴于此,本发明提供一种基于存储集群多节点对的仲裁者实现方法及装置来解决现有技术中仲裁者处理请求瓶颈的问题。

具体地,本发明是通过如下技术方案实现的:

本发明提供一种基于存储集群多节点对的仲裁者实现方法,所述方法应用于节点对中的存储节点,所述方法包括:

在当前时间周期中,向仲裁者发送第一请求报文;

接收所述仲裁者针对所述第一请求报文发送的第一响应报文;

接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;

基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。

进一步的,所述第一请求报文为第一心跳报文,所述第二请求报文为第二心跳报文。

进一步的,所述方法还包括:

接收自身所属的一个或多个节点对发往所述仲裁者的多个不同类型的第三请求报文;

对所述多个不同类型的第三请求报文进行分类;

将分类后的多个不同类型的第三请求报文转发至所述仲裁者,以使所述仲裁者为每个类型的第三请求报文分配对应的进程进行处理。

进一步的,所述以使所述仲裁者为每个类型的第三请求报文分配对应的进程进行处理,还包括:

以使所述仲裁者将每个类型的第三请求报文分别加入对应的进程的队列中,并在某一类型的第三请求报文数量较多时,在该类第三报文对应的进程中根据预设策略创建多个线程对该类的第三报文进行处理。

进一步的,所述预设策略,具体包括:

控制该进程中创建的线程数量,以满足所述某一类型的第三请求报文对应的进程队列中缓存请求报文数量小于该进程对应的预设请求超时时间内允许处理的第三请求报文的数量。

基于相同的构思,本发明还提供一种基于存储集群多节点对的仲裁者实现装置,所述装置应用于节点对中的存储节点,所述装置包括:

第一发送单元,用于在当前时间周期中,向仲裁者发送第一请求报文;

第一接收单元,用于接收所述仲裁者针对所述第一请求报文发送的第一响应报文;

第二接收单元,用于接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;

第二发送单元,用于基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。

进一步的,所述第一请求报文为第一心跳报文,所述第二请求报文为第二心跳报文。

进一步的,所述装置还包括:

报文分类单元,用于接收自身所属的一个或多个节点对发往所述仲裁者的多个不同类型的第三请求报文;对所述多个不同类型的第三请求报文进行分类;将分类后的多个不同类型的第三请求报文转发至所述仲裁者,以使所述仲裁者为每个类型的第三请求报文分配对应的进程进行处理。

进一步的,所述以使所述仲裁者为每个类型的第三请求报文分配对应的进程进行处理,还包括:

以使所述仲裁者将每个类型的第三请求报文分别加入对应的进程的队列中,并在某一类型的第三请求报文数量较多时,在该类第三报文对应的进程中根据预设策略创建多个线程对该类的第三报文进行处理。

进一步的,所述预设策略,具体包括:

控制该进程中创建的线程数量,以满足所述某一类型的第三请求报文对应的进程队列中缓存请求报文数量小于该进程对应的预设请求超时时间内允许处理的第三请求报文的数量。

由此可见,本发明提供一种基于存储集群多节点对的仲裁者实现方法及装置,可以通过在当前时间周期中,向仲裁者发送第一请求报文;接收所述仲裁者针对所述第一请求报文发送的第一响应报文;接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。因此可以优化节点对的心跳处理,减少了节点对发往仲裁者的心跳包数量,由于仲裁者引入了请求分类和工作队列的机制,并可以通过动态创建处理线程的方式提高仲裁者处理节点对请求的能力,提高了仲裁者吞吐量与性能。

附图说明

图1是现有技术中单节点对与仲裁者的组网模型示意图;

图2是现有技术中多节点对与仲裁者的组网模型示意图;

图3是本发明一种示例性实施方式中的一种基于存储集群多节点对的仲裁者实现方法的处理流程图;

图4是本发明一种示例性实施方式中的多节点对与仲裁者的组网模型示意图;

图5a本发明一种示例性实施方式中的基于存储集群多节点对的仲裁者实现装置所在设备的硬件结构图;

图5b本发明一种示例性实施方式中的一种基于存储集群多节点对的仲裁者实现装置的逻辑结构图。

具体实施方式

为了解决现有技术存在的问题,本发明提供一种基于存储集群多节点对的仲裁者实现方法及装置,可以通过在当前时间周期中,向仲裁者发送第一请求报文;接收所述仲裁者针对所述第一请求报文发送的第一响应报文;接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。因此可以优化节点对的心跳处理,减少了节点对发往仲裁者的心跳包数量,由于仲裁者引入了请求分类和工作队列的机制,并可以通过动态创建处理线程的方式提高仲裁者处理节点对请求的能力,提高了仲裁者吞吐量与性能。

请参考图3,是本发明一种示例性实施方式中的一种基于存储集群多节点对的仲裁者实现方法的处理流程图,所述方法应用于节点对中的存储节点,所述存储节点即存储设备,所述方法包括:

步骤301、在当前时间周期中,向仲裁者发送第一请求报文;

在本实施例中,存储节点可以定期向仲裁者发送第一请求报文,所述第一请求报文可以是心跳报文。本申请中的仲裁者指的是连接所述存储节点的仲裁控制服务器。

步骤302、接收所述仲裁者针对所述第一请求报文发送的第一响应报文;

存储节点可以接收所述仲裁者针对所述第一请求报文发送的第一响应报文,例如当存储节点发送的第一请求报文为心跳报文时仲裁者针对所述心跳报文可以发送表示自身工作状态的心跳响应报文,然后存储节点即可获知仲裁者当前周期的工作状态。除此之外,若存储节点发送的第一请求报文是其他类型的请求,则仲裁者回复的响应报文的内容也随之改变。

步骤303、接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;

在本实施例中,所述存储节点在当前时间周期内,可以接收到自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文,其中所述第二请求报文与所述第一请求报文所请求的内容相同,例如当第一请求报文为心跳报文时,所述第二请求报文也为心跳报文。

步骤304、基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。

存储节点收到第二请求报文时,由于第二请求报文与第一报文所请求的内容相同,而且本地已经记录了第一请求报文对应的仲裁者反馈的第一响应报文,则存储节点可以根据所述第一响应报文,向所述一个或多个节点对反馈第二响应报文,其中所述第二响应报文与第一响应报文相同,例如当第一响应报文为心跳响应时,第二响应报文也为心跳响应。因此可以使存储节点作为自身所属的一个或多个节点对的代理与仲裁者进行通信,并将仲裁者的反馈信息分发至所述节点对中的多个存储节点,从而减少仲裁者的处理请求报文的数量。

在可选的实施例中,所述存储节点还可以在当前时间周期内接收自身所属的一个或多个节点对发往所述仲裁者的多个不同类型的第三请求报文,该第三请求报文是为了与第一请求报文和第二请求报文区分的名称,第三请求报文可以是多个报文的统称。存储节点可以对所述多个不同类型的第三请求报文进行分类;将分类后的多个不同类型的第三请求报文转发至所述仲裁者。所述仲裁者收到存储节点发送的不同类型的第三请求报文时,可以为每个类型的第三请求报文分配对应的进程进行报文处理。具体来讲,所述仲裁者可以将每个类型的第三请求报文分别加入为其配置进程的处理队列中,排队处理;并在某一类型的第三请求报文数量较多时,在该类第三报文对应的进程中根据预设策略创建多个线程对该类的第三报文进行处理,当请求处理完毕以后,回收线程资源。

作为一个实施例,所述预设策略具体是指仲裁者需控制该进程中创建的线程数量,以满足所述某一类型的第三请求报文对应的进程队列中缓存报文数量小于该进程对应的预设请求超时时间内允许处理的第三请求报文的数量。例如,该进程对应的预设请求超时时间为T,队列缓存的报文数量为N,某一类型报文的单个请求处理时间为t,则仲裁者在进程中建立线程的数量应满足:N<T/t,即动态创建的线程数量为N*t/T。

因此本发明的仲裁者通过引入了请求分类和工作队列的机制,及动态创建处理线程的方式提高了仲裁者处理节点对请求的能力,提高了仲裁者吞吐量与性能。

为使本发明的目的、技术方案及优点更加清楚明白,下面结合图4对本发明的方案作进一步地详细说明。

基于图2的多节点对与仲裁者的组网模型,在本发明的实施例中对该组网模型进行优化,在每个节点中分别添加代理模块和通信模块,其中,代理模块用于打包并处理节点对发往仲裁者的各类请求;通信模块用于实现代理模块与仲裁者之间的数据交互,优化后的组网模型如图4所示。其中节点2与节点1组成节点对1;节点2与节点3组成节点对2。

假设,在节点对1上启用10对镜像对,在节点对2上启用20对镜像对;在所有的镜像对变成已同步状态以后,如果节点2异常死机,节点1与节点3无法获知节点2状态,出现脑裂;此时节点1与节点3会往仲裁者发送查询请求已确认节点2异常;之后通过查询仲裁者上记录的镜像角色、状态、数据一致性等信息来指导节点1与节点3上的镜像LUN反转角色。

在此过程中,节点1和节点3上的代理模块会将收到的镜像对发送的多个请求报文进行分类并打包通过通信模块发送至仲裁者;仲裁者收到这些请求报文后,会根据报文分类为每类报文配置对应的进程,并根据该进程对应的预设请求超时时间T,队列缓存的报文数量为N,该类报文的单个请求处理时间t,在该类报文对应的进程中动态创建线程,线程数量为N*t/T;从而响应节点1与节点3发送的各类请求,保证节点1与节点3不会因为请求超时而中断镜像业务。

而对于节点1与节点3发送的心跳报文,节点1与节点3上的代理模块会按照预设时间周期向仲裁者发送心跳报文,并记录仲裁者反馈的存在状态,当代理模块在本周期内收到节点发送的心跳报文时,可以根据记录的仲裁者的存在状态向节点发送反馈报文。以节点3为例,节点3上的代理模块定在第一时间周期向仲裁者发送一个心跳报文,接收仲裁者反馈的存在状态后,将存在状态记录在本地,若该第一时间周期内,该代理模块收到节点3上的20个镜像对发送的40个心跳报文时,可以根据本地记录的当前时间周期的存在状态反馈至这20个镜像对,到第二个时间周期时,可以再向仲裁者发送心跳报文,并更新本地记录的存在状态。从而本发明可以避免仲裁者处理多个镜像对发送的心跳报文,提高仲裁者的处理能力。

基于相同的构思,本发明还提供一种基于存储集群多节点对的仲裁者实现装置,该装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,本发明的基于存储集群多节点对的仲裁者实现装置作为一个逻辑意义上的装置,是通过其所在存储设备的CPU将存储器中对应的计算机程序指令读取后运行而成。

请参考图5a是本发明一种示例性实施方式中的一种基于存储集群多节点对的仲裁者实现装置500,所述装置应用于节点对中的存储节点,该装置基本运行环境包括CPU,存储器以及其他硬件,从逻辑层面上来看,该基于存储集群多节点对的仲裁者实现装置的组成如图5b所示,其中该装置500包括:

第一发送单元501,用于在当前时间周期中,向仲裁者发送第一请求报文;

第一接收单元502,用于接收所述仲裁者针对所述第一请求报文发送的第一响应报文;

第二接收单元503,用于接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;

第二发送单元504,用于基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。

可选的,所述第一请求报文为第一心跳报文,所述第二请求报文为第二心跳报文。

可选的,所述装置还包括:

报文分类单元505,用于接收自身所属的一个或多个节点对发往所述仲裁者的多个不同类型的第三请求报文;对所述多个不同类型的第三请求报文进行分类;将分类后的多个不同类型的第三请求报文转发至所述仲裁者,以使所述仲裁者为每个类型的第三请求报文分配对应的进程进行处理。

可选的,所述以使所述仲裁者为每个类型的第三请求报文分配对应的进程进行处理,还包括:

以使所述仲裁者将每个类型的第三请求报文分别加入对应的进程的队列中,并在某一类型的第三请求报文数量较多时,在该类第三报文对应的进程中根据预设策略创建多个线程对该类的第三报文进行处理。

可选的,所述预设策略,具体包括:

控制该进程中创建的线程数量,以满足所述某一类型的第三请求报文对应的进程队列中缓存请求报文数量小于该进程对应的预设请求超时时间内允许处理的第三请求报文的数量。

由此可见,本发明提供一种基于存储集群多节点对的仲裁者实现方法及装置,可以通过在当前时间周期中,向仲裁者发送第一请求报文;接收所述仲裁者针对所述第一请求报文发送的第一响应报文;接收自身所属的一个或多个节点对发往所述仲裁者的一个或多个第二请求报文;基于所述第一响应报文,分别向所述一个或多个节点对反馈第二响应报文。因此可以优化节点对的心跳处理,减少了节点对发往仲裁者的心跳包数量,由于仲裁者引入了请求分类和工作队列的机制,并可以通过动态创建处理线程的方式提高仲裁者处理节点对请求的能力,提高了仲裁者吞吐量与性能。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

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