一种存储阵列控制器故障快速切换方法
文献发布时间:2024-05-31 01:29:11
技术领域
本发明属于双控存储阵列的控制器故障切换领域,具体涉及一种存储阵列控制器故障快速切换方法。
背景技术
近年来,随着人工智能、云计算、大数据等新兴技术的飞速发展,进一步推动信息技术的进步。数据存储作为重要的IT基础设施,在信息社会中扮演着至关重要的角色,可为人工智能、云计算、大数据等场景提供大容量、高可靠和高性能的数据存储服务,满足各类应用的大规模数据处理和分析的需求。
双控存储阵列是一种采用双控制器架构的数据存储技术,通过硬件容错、RAID等技术提高系统的可用性、可靠性和性能。然而,由于硬件故障或其他原因,部分存储阵列控制器可能会出现故障,导致业务无法正常访问。如在人工智能大模型训练推理场景,对数据可靠性和业务连续性要求很高,业务不能长时间中断,这对存储阵列的可靠性提出了极高要求。当存储阵列的某个控制器故障后,故障控制上运行的业务切换到备份控制器的时间越短,上层业务受影响越小。因此,为了保障数据安全和业务连续性,对控制器故障快速切换技术提出更高的要求,迫切需要存储阵列具备快速的故障切换能力,当主控制器故障发生时,立即启动备用控制器快速接管主控制器上运行的存储资源,避免上层业务中断。快速的故障切换不仅可以大大减少故障切换过程中数据丢失的风险,还可以提高存储系统的可用性和稳定性,对于保障企业的核心业务稳定运行至关重要。
现有专利文献CN113687784A一种双控切换存储的方法、装置及电子设备,以及现有专利文献CN104793896A一种双控设备的单双控切换方法及装置,通过备控制器将故障控制器的所有存储资源重新导入的方式完成故障切换。但在备控制器上导入存储资源时,通过硬盘上的元数据进行恢复存储资源的配置,硬盘上的元数据大小与恢复存储资源的时间成正比关系,随着存储阵列的使用,硬盘上的元数据量也在不断增加;故障控制器上资源越多,在备控制器上需要导入的资源越多,切换时间随存储资源的数量变化且成倍数增长,导致控制器故障时切换时间不稳定。另外,现有技术方案中虽有切换过程中,备控制器临时接管业务IO,但仅针对写IO缓存,读IO仍需要等待故障控制器的资源导入后才能操作,业务仍受资源导入时间的影响。总之,现有技术方案存在切换的步骤复杂、切换时间长且不稳定、业务IO恢复慢的问题。
发明内容
本发明的目的在于针对解决背景技术中提出的问题,提出一种存储阵列控制器故障快速切换方法。
为实现上述目的,本发明所采取的技术方案为:
本发明提出的一种存储阵列控制器故障快速切换方法,包括在主控制器的内存上创建存储资源,然后主控制器将存储资源的元数据写入后端硬盘,并通知备控制器从后端硬盘上读取存储资源的元数据至备控制器的内存,恢复存储资源,使得存储资源在主备控制器上均可访问;
主控制器和备控制器上均建立有将后端设备映射至主机上的SAN映射,并在主机上通过不同链路对SAN映射的后端设备进行IO读写均指向为对主控制器上存储资源的读写;
在主机上对SAN映射的后端设备进行IO写入时,主控制器上若有元数据修改,则通知备控制器同步修改元数据,实现主备控制器之间元数据的同步;
当主控制器发生异常时,备控制器感知主控制器故障后,首先判断主备控制器内存之间的元数据是否同步,并在同步后备控制器将在主机上对SAN映射的后端设备进行IO读写重新指向对本控制器上存储资源的读写,完成控制器的切换。
优选地,在主控制器的内存上创建存储资源,然后主控制器将存储资源的元数据写入后端硬盘,并通知备控制器从后端硬盘上读取存储资源的元数据至备控制器的内存,恢复存储资源,使得存储资源在主备控制器上均可访问,包括:
在主控制器的内存上创建存储资源的存储池,然后将存储池的元数据写入后端硬盘,且主控制器通知备控制器读取后端硬盘上存储池的元数据至备控制器的内存,实现存储池在主备控制器上均可访问;
在主控制器的内存上创建存储资源的逻辑卷,然后将逻辑卷的元数据写入后端硬盘,且主控制器通知备控制器读取后端硬盘上逻辑卷的元数据至备控制器的内存,实现逻辑卷在主备控制器上均可访问。
优选地,当主控制器没有发生故障时,在主机上通过不同链路对SAN映射的后端设备进行IO读写均指向为对主控制器上逻辑卷的读写。
优选地,在主机上对SAN映射的后端设备进行IO写入时,主控制器上若有元数据修改,则通知备控制器同步修改元数据,实现主备控制器之间元数据的同步,包括:
当主控制器的逻辑卷上有IO写入时,首先判断主控制器上逻辑卷的空间是否分配,若该逻辑卷空间已分配,则直接进行IO写入操作,不需要更新备控制器上的元数据;
若主控制器上逻辑卷空间未分配,则操作逻辑卷的元数据进行空间分配,分配成功后,将更改的元数据通过网络通信发送至备控制器,备控制器将接收到的元数据插入链表中,然后主控制器再将更改的元数据写入至硬盘中;
若主控制器将更改的元数据成功写入至硬盘中,则通过网络通信通知备控制器将链表中的元数据取出,备控制器并将内存中对应的数据修改为该元数据;
若主控制器将更改的元数据写入至硬盘中失败,则通过网络通信通知备控制器将链表中的元数据删除,且主控制器将已分配的逻辑卷空间回收,此时IO写入失败;
若主控制器通过网络通信发送消息至备控制器失败,则备控制器删除内存中的存储资源的元数据,从后端硬盘上重新读取存储资源的元数据至备控制器的内存,恢复存储资源。
优选地,判断主备控制器内存之间的元数据是否同步,包括:
当备控制器感知主控制器故障后,首先查看链表中是否还有来自主控制器的数据未处理,若存在数据未处理,则表示主备控制器内存之间的元数据不同步,且表示主控制器的逻辑卷在空间分配时出现故障,然后将链表中的数据与后端硬盘上的元数据进行比对,当存在相同的数据时,则在备控制器内存中添加对应的数据,并将该数据从链表中删除,此时备控制器内存中的元数据信息与硬盘中的元数据保持一致,进而主备控制器内存之间的元数据保持同步;
若链表中不存在数据未处理,则表示主备控制器内存之间的元数据同步。
优选地,当主控制器发生故障时,若主备控制器内存之间的元数据同步,则备控制器将在主机上对SAN映射的后端设备进行IO读写重新指向对本控制器上逻辑卷的读写。
与现有技术相比,本发明的有益效果为:
本存储阵列控制器故障快速切换方法使得存储资源在主备控制器上均可访问,并保持主备控制器之间元数据的同步,当主控制器出现故障后,在主备控制器同步的基础上,备控制器将在主机上对SAN映射的后端设备进行IO读写重新指向对本控制器上逻辑卷的读写,完成控制器的快速切换,进而解决了现有技术中在切换控制器过程中需要重新导入存储资源,切换时间随存储资源的数量变化且成倍数增长,导致控制器故障时切换时间不稳定的问题,本方法IO读写业务不受存储资源导入时间的影响,操作步骤简单,切换速度快,时间短至秒级。
附图说明
图1为本发明存储阵列控制器故障快速切换方法流程图;
图2为本发明业务IO读写访问示意图;
图3为本发明业务IO通过备控制器下发的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,当组件被称为与另一个组件“连接”时,它可以直接与另一个组件连接或者也可以存在居中的组件。除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中在本申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本申请。
如图1-3所示,一种存储阵列控制器故障快速切换方法,包括:
步骤1、在主控制器的内存上创建存储资源,然后主控制器将存储资源的元数据写入后端硬盘,并通知备控制器从后端硬盘上读取存储资源的元数据至备控制器的内存,恢复存储资源,使得存储资源在主备控制器上均可访问,具体包括:
在主控制器的内存上创建存储资源的存储池,然后将存储池的元数据写入后端硬盘,且主控制器通知备控制器读取后端硬盘上存储池的元数据至备控制器的内存,实现存储池在主备控制器上均可访问;
在主控制器的内存上创建存储资源的逻辑卷,然后将逻辑卷的元数据写入后端硬盘,且主控制器通知备控制器读取后端硬盘上逻辑卷的元数据至备控制器的内存,实现逻辑卷在主备控制器上均可访问。
需要说明的是,后端硬盘通过背板分别与主控制器和备控制器连接,主控制器和备控制器都能访问后端硬盘;
存储阵列包含两个控制器(控制器A和控制器B),两个控制器在逻辑上依据是否设定为存储资源(存储池、逻辑卷)所属控制器而划分为主控制器和备控制器,设定存储资源所属控制器为主控制器,另一控制器则为备控制器,在创建存储资源时,首先选择一个控制器作为主控制器(如控制器A),然后在主控制器上创建存储池,若创建成功,会将存储池的元数据(配置信息及空间分配信息)写入后端硬盘,另外主控制器的内存中也会存在一份相同的元数据,然后通过网络通信通知备控制器通过读取后端硬盘上的元数据,导入配置,恢复存储资源,实现存储池在主备控制器上均可访问;然后再在主控制器上创建逻辑卷,若创建成功,会将逻辑卷的元数据(配置信息及空间分配信息)写入后端硬盘,另外主控制器的内存中也会存在一份相同的元数据,然后通过网络通信通知备控制器通过读取后端硬盘上的元数据(备控制器上server软件的主进程收到数据的load指令,子线程从后端硬盘读出逻辑卷的元数据),导入配置,恢复存储资源,实现逻辑卷在主备控制器上均可访问。
步骤2、主控制器和备控制器上均建立有将后端设备映射至主机上的SAN映射,并在主机上通过不同链路对SAN映射的后端设备进行IO读写均指向为对主控制器上存储资源的读写;此时,主控制器没有发生故障,在主机上通过不同链路对SAN映射的后端设备进行IO读写均指向为对主控制器上逻辑卷的读写。
需要说明的是,建立SAN映射后,在主机上登录SAN映射后,将SAN映射的后端设备作为后端硬盘,在主机上对SAN映射的后端设备进行IO读写可以分别从主控制器和备控制器的业务链路(如FC光纤存储通道或以太网)进行读写,且IO读写均指向主控制器的逻辑卷(如图2所示)。
步骤3、在主机上对SAN映射的后端设备进行IO写入时,主控制器上若有元数据修改,则通知备控制器同步修改元数据,实现主备控制器之间元数据的同步,具体包括:
当主控制器的逻辑卷上有IO写入时,首先判断主控制器上逻辑卷的空间是否分配,若该逻辑卷空间已分配,则直接进行IO写入操作,不需要更新备控制器上的元数据;
若主控制器上逻辑卷空间未分配(若自动精简卷或逻辑卷存在快照时,逻辑卷的空间第一次写入时未分配),则操作逻辑卷的元数据进行空间分配,分配成功后,将更改的元数据通过网络通信发送至备控制器,备控制器将接收到的元数据插入链表(备控制器上server软件的链表,备控制器通过server软件接收主控制器发送的数据,备控制器上server软件的主进程收到数据的add指令,子线程将元数据插入链表)中,然后主控制器再将更改的元数据写入至硬盘中;
若主控制器将更改的元数据成功写入至硬盘中,则通过网络通信通知备控制器将链表中的元数据取出,备控制器并将内存中对应的数据修改为该元数据(此时IO可正常写入,备控制器上server软件的主进程收到数据的confirm指令,子线程将链表中的元数据取出,并将备控制器内存中对应的数据修改为该元数据);
若主控制器将更改的元数据写入至硬盘中失败,则通过网络通信通知备控制器将链表中的元数据删除(备控制器上server软件的主进程收到数据的cancel指令,子线程将链表中元数据删除),且主控制器将已分配的逻辑卷空间回收,此时IO写入失败;
若主控制器通过网络通信发送消息至备控制器失败,则备控制器删除内存中的存储资源的元数据,从后端硬盘上重新读取存储资源的元数据至备控制器的内存(备控制器上server软件的主进程收到数据的reset指令,子线程删除内存中存储池的元数据,并从后端硬盘上重新读取存储池的元数据至备控制器内存;备控制器上server软件的主进程收到数据的reopen指令,子线程删除内存中逻辑卷的元数据,并从后端硬盘上重新读取逻辑卷的元数据至备控制器内存),恢复存储资源。
需要说明的是,主备控制器之间的网络通信方式为网络socket通信方式,备控制器通过server软件接收主控制器发送的数据,server软件由一个主进程和一个子线程组成,负责与主控制器通信,保障主备控制器元数据一致性,详细步骤如下:
server软件主进程:主进程初始化了一个数据处理的双向队列queue及用于存放add数据的链表,主进程socket服务采用消息轮询方式,等待连接及接收数据,主进程接收到数据后,放入双向队列queue的尾部,对于需要立即处理的数据插入双向队列queue的头,如reset、load、reopen等数据,其他数据放于queue尾;主进程还包括集群状态监测:若对端控制器故障,则关闭所有socket,并向双向队列queue中插入switch指令(表示接下来要进行资源切换操作);
子线程为数据处理线程,子线程由主进程创建后,线程运行标记位置位,查询双向队列queue是否为空,若双向队列不为空,则从双向队列queue的头部取出数据进行处理,根据取出的数据的action指令,进行相关操作,其中action指令包括add、confirm、cancel、delete、reset、reopen、load等指令,且相关指令的操作如下:
1)主进程收到add指令,子线程将元数据插入链表;
2)主进程收到confirm指令,子线程将链表中的元数据取出,并将备控制器内存中对应的数据修改为该元数据;
3)主进程收到cancel指令,子线程将链表中元数据删除;
4)主进程收到reset指令,子线程删除内存中存储池的元数据,并从后端硬盘上重新读取存储池的元数据至备控制器内存,恢复存储池的配置;
5)主进程收到reopen指令,子线程删除内存中逻辑卷的元数据,并从后端硬盘上重新读取逻辑卷的元数据至备控制器内存,恢复逻辑卷的配置;
6)主进程收到load指令,子线程从后端硬盘读出逻辑卷的元数据,恢复逻辑卷的配置。
7)switch指令,子线程将链表中的数据与后端硬盘上的元数据进行比对,当存在相同的数据时,则在备控制器内存中添加对应的数据,并将该数据从链表中删除,否则不进行处理。
步骤4、当主控制器发生异常时,备控制器感知主控制器故障后,首先判断主备控制器内存之间的元数据是否同步,并在同步后备控制器将在主机上对SAN映射的后端设备进行IO读写重新指向对本控制器上存储资源的读写,完成控制器的切换。
判断主备控制器内存之间的元数据是否同步,包括:
当备控制器感知主控制器故障后,首先查看链表中是否还有来自主控制器的数据未处理,若存在数据未处理,则表示主备控制器内存之间的元数据不同步,且表示主控制器的逻辑卷在空间分配时出现故障,然后将链表中的数据与后端硬盘上的元数据进行比对,当存在相同的数据时,则在备控制器内存中添加对应的数据,并将该数据从链表中删除(备控制器上server软件主进程的集群状态监测到主控制器故障后,向双向队列queue中插入switch指令,子线程取出switch指令后,将链表中的数据与后端硬盘上的元数据进行比对,当存在相同的数据时,则在备控制器内存中添加对应的数据,并将该数据从链表中删除),此时备控制器内存中的元数据信息与硬盘中的元数据保持一致,进而主备控制器内存之间的元数据保持同步;
若链表中不存在数据未处理,则表示主备控制器内存之间的元数据同步;
若主备控制器内存之间的元数据同步,则备控制器将在主机上对SAN映射的后端设备进行IO读写重新指向对本控制器上逻辑卷的读写(如图3所示,业务IO通过备控制器的链路进行下发,备控制器接收到数据后,在本控制器内完成IO读写和数据落盘),完成控制器故障的快速切换。在主备控制器整个存储资源切换过程中业务IO将无法下发,处于短暂的suspend状态。suspend状态持续时间的长短取决于备控制器接管主控制器上存储资源所耗费的时间。
需要说明的是,一般情况下server软件链表上无数据,不需要进行任何操作。若有且仅当主控制器逻辑卷正在空间分配时故障,此时server软件链表中可能会存在一个数据包,server软件链表上的数据包数量与主控制器故障前正在进行空间分配的逻辑卷数量有关,数据最多个数为主控制器正在进行空间分配的逻辑卷个数,此类数据包通常较少,远远小于存储资源的元数据大小,不影响故障切换时间。
若备控制器发生故障,主机的业务IO通过主控制器的链路进行下发,业务不受影响。
存储资源双控可见,在主备控制器存储资源切换时备控制器不需要重新导入存储池,切换时间不受存储资源元数据大小的影响;在切换时仅需少量的读盘操作来保持元数据的完整性,通过映射的重新指向,即可完成存储资源的切换操作,操作步骤简单,切换速度快,时间短至秒级。
本存储阵列控制器故障快速切换方法使得存储资源在主备控制器上均可访问,并保持主备控制器之间元数据的同步,当主控制器出现故障后,在主备控制器同步的基础上,备控制器将在主机上对SAN映射的后端设备进行IO读写重新指向对本控制器上逻辑卷的读写,完成控制器的快速切换,进而解决了现有技术中在切换控制器过程中需要重新导入存储资源,切换时间随存储资源的数量变化且成倍数增长,导致控制器故障时切换时间不稳定的问题,本方法IO读写业务不受存储资源导入时间的影响,操作步骤简单,切换速度快,时间短至秒级。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请描述较为具体和详细的实施例,但并不能因此而理解为对申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
- 一种切换测试板卡波特率实现控制器测试通讯的方法
- 一种多存储控制器故障切换方法、装置、设备及存储介质
- 一种食品级硫酸生产制造方法及浓硫酸除杂装置