本发明涉及通信技术领域,尤其涉及一种业务节点的分配方法及装置。
背景技术:
目前,一个RAID(Redundant Arrays of Independent Disks,磁盘阵列)中存在至少两个控制器,每个控制器作为一个节点,每个普通节点的内存中都存储了缓存数据,每个普通节点还对应一个镜像节点,镜像节点与对应的普通节点中缓存了相同的数据,当普通节点出现故障后,镜像节点会接管普通节点负责的业务,然而,在普通节点发生故障后,在普通节点的业务未被接管之前,如果镜像节点也发生了故障,就会导致普通节点和镜像节点所承载的业务都发生中断。
技术实现要素:
本发明的实施例提供一种业务节点的分配方法及装置,可以解决由于节点故障而导致故障业务节点所承载的业务发生中断的问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供一种业务节点的分配方法,所述方法应用于磁盘阵列RAID中,所述RAID中包括至少两个业务节点以及共享内存,所述至少两个业务节点中包括一个主控制节点,所述共享内存用于分区存储所有所述业务节点中的缓存数据,所述方法包括:
当所述RAID中存在故障业务节点时,所述主控制节点从所述RAID的非故障业务节点中选取一个业务节点作为业务接管节点;
所述主控制节点控制所述业务接管节点从所述共享内存中读取故障业务节点的缓存数据;
所述主控制节点将所述故障业务节点的业务切换至所述业务接管节点。
在第一种可能的实施例中,结合第一方面,所述当所述RAID中存在故障业务节点时,所述主控制节点从所述RAID的非故障业务节点中选取一个业务节点作为业务接管节点,包括:
所述主控制节点确定每个非故障业务节点的本地内存可用容量;
所述主控制节点将本地内存可用容量最大的非故障业务节点确定为所述业务接管节点。
在第二种可能的实施例中,结合第一方面或第一方面中第一种可能的实施例,所述当所述RAID中存在故障业务节点时,所述主控制节点从所述RAID的非故障业务节点中选取一个业务节点作为业务接管节点之前,所述方法还包括:
当所述RAID中存在故障业务节点时,所述主控制节点从所述RAID中查找非故障业务节点;
当所述主控制节点未查找到非故障业务节点时,所述主控制节点控制所述RAID中的所有业务节点停止工作。
第二方面,本发明实施例提供一种业务节点的分配装置,所述装置应用于磁盘阵列RAID中,所述装置包括:
选取单元,用于当所述RAID中存在故障业务节点时,从所述RAID的非故障业务节点中选取一个业务节点作为业务接管节点;
控制单元,用于控制所述业务接管节点从所述共享内存中读取故障业务节点的缓存数据;
切换单元,用于将所述故障业务节点的业务切换至所述业务接管节点。
在第一种可能的实施例中,结合第二方面,
所述选取单元,还用于确定每个非故障业务节点的本地内存可用容量;将本地内存可用容量最大的非故障业务节点确定为所述业务接管节点。
在第二种可能的实施例中,结合第二方面或第二方面中第一种可能的实施例,所述装置还包括:查找单元;
所述查找单元,用于当所述RAID中存在故障业务节点时,从所述RAID中查找非故障业务节点;
所述控制单元,还用于当确定所述查找单元未查找到非故障业务节点时,控制所述RAID中的所有业务节点停止工作。
第三方面,本发明实施例提供一种业务节点的分配装置,所述装置应用于磁盘阵列RAID中,所述装置包括:
存储器,用于存储包括程序指令的信息;
处理器,与所述存储器耦合,用于控制所述程序指令的执行,具体用于当所述RAID中存在故障业务节点时,从所述RAID的非故障业务节点中选取一个 业务节点作为业务接管节点;控制所述业务接管节点从所述共享内存中读取故障业务节点的缓存数据;将所述故障业务节点的业务切换至所述业务接管节点。
在第一种可能的实施例中,结合第三方面,
所述处理器,还用于确定每个非故障业务节点的本地内存可用容量;将本地内存可用容量最大的非故障业务节点确定为所述业务接管节点。
在第二种可能的实施例中,结合第三方面或第三方面中第一种可能的实施例,所述处理器,还用于当所述RAID中存在故障业务节点时,从所述RAID中查找非故障业务节点;当确定所述查找单元未查找到非故障业务节点时,控制所述RAID中的所有业务节点停止工作。
本发明实施例提供的业务节点的分配方法及装置,当RAID中存在故障业务节点时,主控制节点从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,然后控制业务接管节点从共享内存中读取故障业务节点的缓存数据,进而主控制节点可将故障业务节点的业务切换至业务接管节点,与现有技术相比,本发明实施例的共享内存中存储了所有业务节点的缓存数据,所以即使有业务节点发生故障,其他业务节点也能够从共享内存中获取故障业务节点的缓存数据,从而保证故障业务节点的业务不发生中断。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的RAID的逻辑结构示意图;
图2为本发明实施例提供的一种业务节点的分配方法的流程图;
图3为本发明实施例提供的另一种业务节点的分配方法的流程图;
图4为本发明实施例提供的另一种业务节点的分配方法的流程图;
图5为本发明实施例提供的另一种业务节点的分配方法的流程图;
图6为本发明实施例提供的一种业务节点的分配装置的逻辑结构示意图;
图7为本发明实施例提供的另一种业务节点的分配装置的逻辑结构示意图;
图8为本发明实施例提供的业务节点的分配方法中主控制节点的逻辑结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决由于节点故障而导致故障业务节点所承载的业务发生中断的问题,本发明实施例提供了一种业务节点的分配方法,该方法应用于RAID中,如图1所示,该RAID中包括至少两个业务节点以及共享内存,至少两个业务节点中包括一个主控制节点,共享内存用于分区存储所有所述业务节点中的缓存数据,图1中以RAID中包括控制器A、控制器B、控制器C和控制器D为例,每个控制器分别为一个业务节点,其中任一个控制器都可以为主控制器,共享内存是由各个控制器的空闲存储空间组成的,共享内存中包括为每个控制器划分的逻辑存储分区。
结合图1,本发明实施例提供一种业务节点的分配方法,如图2所示,该方法包括:
201、当RAID中存在故障业务节点时,主控制节点从RAID的非故障业务节点中选取一个业务节点作为业务接管节点。
其中,当存在故障业务节点时,为了防止故障业务节点的业务发生中断,需选取一个非故障的节点接管故障业务节点的业务。
202、主控制节点控制业务接管节点从共享内存中读取故障业务节点的缓存数据。
可以理解的是,共享内存中存储了故障业务节点中所有的缓存数据,当业务接管节点从共享内存中读取故障业务节点的缓存数据,并将故障业务节点的缓存数据存储在自身内存之后,即可接管故障业务节点的业务。
203、主控制节点将故障业务节点的业务切换至业务接管节点。
其中,因为此时业务接管节点已存储有故障业务节点的缓存数据,所以可以使故障业务节点的业务在接管业务节点上执行,不会发生业务中段。
本发明实施例提供的业务节点的分配方法,当RAID中存在故障业务节点时,主控制节点从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,然后控制业务接管节点从共享内存中读取故障业务节点的缓存数据,进而主控 制节点可将故障业务节点的业务切换至业务接管节点,与现有技术相比,本发明实施例的共享内存中存储了所有业务节点的缓存数据,所以即使有业务节点发生故障,其他业务节点也能够从共享内存中获取故障业务节点的缓存数据,从而保证故障业务节点的业务不发生中断。
为了实现在保证RAID性能的前提下,为故障业务节点选取合适的业务接管节点,在本发明实施例提供的另一种实现方式中,如图3所示,上述步骤201、当业务节点发生故障时,主控制节点从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,具体可以实现为步骤2011和步骤2012。
2011、主控制节点确定每个非故障业务节点本地内存可用容量。
其中,本地内存可用容量为非故障业务节点自身的剩余存储空间的大小。
需要说明的是,共享内存中存储的数据与各个业务节点本身内存中存储的数据是相同的,即共享内存中存储了所有业务节点本身内存中存储的数据。
2012、主控制节点将本地内存可用容量最大的非故障业务节点确定为业务接管节点。
对于本发明实施例,主控制节点将本地内存可用容量最大的非故障业务节点确定为业务接管节点,以保证业务接管节点有足够的能力承载自身的业务并接管故障业务节点的业务,可以保证业务质量。
结合上述方法流程,在选取业务接管节点之前,需首先确定RAID中是否存在非故障业务节点,所以在本发明实施例提供的另一种实现方式中,如图4所示,在上述步骤201、RAID中存在故障业务节点时,所述主控制节点从所述RAID的非故障业务节点中选取一个业务节点作为业务接管节点之前,该方法还包括步骤401和步骤402。
401、当RAID中存在故障业务节点时,主控制节点从RAID中查找非故障业务节点。
当查找到非故障业务节点时,执行上述步骤201,当未查找到非故障业务节点时,执行步骤402。
402、当主控制节点未查找到非故障业务节点时,主控制节点控制RAID中的所有业务节点停止工作。
其中,当主控制节点未查找到非故障业务节点时,说明当前RAID中除主控制节点外均发生故障,所以需使所有业务节点停止工作,进而可以通过共享内 存对故障业务节点中损坏的数据进行恢复。
此外,当主控制节点未查找到非故障业务节点时,还可能是主控制节点发生故障,主控制节点发生故障无法对RAID中的其他业务节点进行管理,所以需使所有业务节点停止工作,以便于将其他的业务节点作为主控制节点,或者对主控制节点进行修复。
本发明实施例提供的业务节点的分配方法,当主控制节点发生故障时,查找非故障业务节点,当未查找到非故障业务节点时,控制RAID中所有业务节点停止工作,当查找到非故障业务节点时,主控制节点从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,然后控制业务接管节点从共享内存中读取故障业务节点中的缓存数据,进而主控制节点可将故障业务节点的业务切换至业务接管节点,与现有技术相比,本发明实施例的共享内存中存储了所有业务节点的缓存数据,所以即使有业务节点发生故障,其他业务节点也能够从共享内存中获取故障业务节点的缓存数据,从而保证故障业务节点的业务不发生中断,此外即时所有业务节点均发生故障,也能从共享内存中恢复出每个业务节点的缓存数据,不会发生数据丢失。
结合图1所示的RAID,由于RAID中的业务节点是实时对数据进行读写操作的,所以,需要实时对共享内存中的数据进行更新,具体实现方法为在逐级对业务节点进行写操作时,先将数据写入共享内存中,其流程如图5所示,包括:
501、主机向业务节点中的业务模块发送数据写请求。
值得说明的是,业务节点中包括业务模块、阵列cache模块、RAID控制模块、SCSI中层模块以及流程控制模块。
其中,业务节点中的业务模块用于承载主机下发的业务,可以接收并处理IO请求。
阵列cache模块用于缓存业务IO,并具有IO处理功能。
RAID控制模块用于在软件层面实现RAID冗余算法以及对控制数据IO下发至硬盘进行决策。
SCSI中层模块用于将IO组装成硬盘能够识别的SCSI命令,并将SCSI命令下发至硬盘。
流程控制模块用于控制整个RAID中所有业务节点的流程处理模块,所有的流程切换,例如控制业务接管节点接管故障业务节点的业务等流程都是由流程 控制模块实现的。流程控制模块在主控制节点中处于工作状态。
502、业务模块将数据写请求转发至业务节点中的阵列cache模块。
503、阵列cache模块将数据写请求所请求写入的数据写入到共享内存中与该业务节点对应的逻辑存储分区中。
当确定数据写入成功之后,执行步骤504。
504、阵列cache模块将数据写入请求所请求写入的数据写入到业务节点自身的内存中。
505、阵列cache模块向业务模块发送写入成功消息。
506、业务模块向主机发送数据写请求成功响应。
对于本发明实施例,在需将数据写入业务节点时,需先将需要写入的数据写入共享内存中,可以使得共享内存中保存业务节点中缓存的所有数据,以便于业务节点发生故障后的数据恢复。
此外,还需说明的是,当业务节点中缓存的数据量达到刷盘水位时,业务节点中的阵列cache模块需通过RAID控制模块、SCSI(Small Computer System Interface,小型计算机系统接口)中层模块将业务节点中缓存的部分数据写入硬盘中,写入成功之后将这部分数据从业务节点的缓存中清除,然后通知共享内存也将这部分数据清除,以保证业务节点和共享内存都有足够的空间缓存数据。
本发明实施例提供的业务节点的分配方法,当RAID中存在故障业务节点时,主控制节点从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,然后控制业务接管节点从共享内存中读取故障业务节点的缓存数据,进而主控制节点可将故障业务节点的业务切换至业务接管节点,与现有技术相比,本发明实施例的共享内存中存储了所有业务节点的缓存数据,所以即使有业务节点发生故障,其他业务节点也能够从共享内存中获取故障业务节点的缓存数据,从而保证故障业务节点的业务不发生中断。
结合上述方法流程,发明实施例提供一种业务节点的分配装置,该装置应用于磁盘阵列RAID中,如图6所示,包括:读取单元601,控制单元602,切换单元603。
选取单元,用于当RAID中存在故障业务节点时,从RAID的非故障业务节点中选取一个业务节点作为业务接管节点;
控制单元602,用于控制业务接管节点从共享内存中读取故障业务节点的缓存数据;
切换单元603,用于将故障业务节点的业务切换至业务接管节点。
需要说明的是,RAID中包括至少两个业务节点以及共享内存,至少两个业务节点中包括一个主控制节点,共享内存用于分区存储所有业务节点中的缓存数据。本发明实施例提供的业务节点的分配装置位于主控制节点中。
在本发明另一实施例中,选取单元,还用于确定每个非故障业务节点的本地内存可用容量;将本地内存可用容量最大的非故障业务节点确定为业务接管节点。
在发明另一实施例中,如图7所示,该装置还包括:查找单元604。
查找单元604,用于当RAID中存在故障业务节点时,从RAID中查找非故障业务节点;
控制单元602,还用于当确定查找单元604未查找到非故障业务节点时,控制RAID中的所有业务节点停止工作。
本发明实施例提供的业务节点的分配装置,当RAID中存在故障业务节点时,选取单元从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,然后控制单元控制业务接管节点从共享内存中读取故障业务节点的缓存数据,进而切换单元可将故障业务节点的业务切换至业务接管节点,与现有技术相比,本发明实施例的共享内存中存储了所有业务节点的缓存数据,所以即使有业务节点发生故障,其他业务节点也能够从共享内存中获取故障业务节点的缓存数据,从而保证故障业务节点的业务不发生中断。
如图8所示,图8为RAID中主控制节点的硬件结构示意图。其中,该装置可包括存储器81、收发器82、处理器83和总线84,其中,存储器81、收发器82、处理器83通过总线84通信连接。
存储器81可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器81可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器81中,并由处理器83来执行。
收发器82用于装置与其他设备或通信网络(例如但不限于以太网,无线接 入网(Radio Access Network,RAN),无线局域网(Wireless Local Area Network,WLAN)等)之间的通信。
处理器83可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
总线84可包括一通路,在装置各个部件(例如存储器81、收发器82和处理器83)之间传送信息。
应注意,尽管图8所示的硬件仅仅示出了存储器81、收发器82和处理器83以及总线84,但是在具体实现过程中,本领域的技术人员应当明白,该终端还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,还可包含实现其他功能的硬件器件。
具体的,图8所示的装置用于实现图6-图7实施例所示的装置时,该装置中的处理器83,与存储器81和收发器82耦合,用于控制程序指令的执行,具体用于当RAID中存在故障业务节点时,从RAID的非故障业务节点中选取一个业务节点作为业务接管节点;控制业务接管节点从共享内存中读取故障业务节点的缓存数据;将故障业务节点的业务切换至业务接管节点。
需要说明的是,RAID中包括至少两个业务节点以及共享内存,至少两个业务节点中包括一个主控制节点,共享内存用于分区存储所有业务节点中的缓存数据。本发明实施例提供的业务节点的分配装置位于主控制节点中。
处理器83,还用于确定每个非故障业务节点的本地内存可用容量;将本地内存可用容量最大的非故障业务节点确定为业务接管节点。
处理器83,还用于当RAID中存在故障业务节点时,从RAID中查找非故障业务节点;当确定查找单元未查找到非故障业务节点时,控制RAID中的所有业务节点停止工作。
本发明实施例提供的业务节点的分配装置,当RAID中存在故障业务节点时,处理器从RAID的非故障业务节点中选取一个业务节点作为业务接管节点,然后控制业务接管节点从共享内存中读取故障业务节点的缓存数据,进而可将故障业务节点的业务切换至业务接管节点,与现有技术相比,本发明实施例的共享内存中存储了所有业务节点的缓存数据,所以即使有业务节点发生故障,其他 业务节点也能够从共享内存中获取故障业务节点的缓存数据,从而保证故障业务节点的业务不发生中断。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。