一种存储系统中多控制器之间的IO转发方法及装置与流程

文档序号:15271538发布日期:2018-08-28 22:29阅读:184来源:国知局

本发明涉及存储技术领域,尤其涉及一种存储系统中多控制器之间的io转发方法及装置。



背景技术:

存储阵列提供存储数据的高可用服务,常采用多个控制器冗余设计。目前的多控存储阵列设计,存在如下问题:在控制器之间无交叉互连的结构中,即单控节点只能访问硬盘的一条本端路径,如果输入输出(io,input/output)过程中遇到本端硬盘故障,或链路故障,系统会认为访问的硬盘故障,根据上层业务的类型,可能引起上层业务重构,或者引发控制器切换,主机侧多路径切换,这些异常处理会导致系统的可靠性降低,给系统带来不必要的开销。并且当硬盘链路故障恢复后,后端无法感知,不能进行故障恢复(failback)操作。在控制器之间有交叉互连的结构中,利用linux的磁盘映射(device-mapper)机制看似可以解决本地io失败路径切换的问题,但是如果控制器自身故障,仍然会导致以上描述的问题。因此迫切需要磁阵后端能够进行io转发来应对上述问题,这对于提高系统的可靠性至关重要。现有的技术中,对于io转发主要采取了以下方案:

方案一:在业务主机和存储系统之间增加一个io调度模块,根据每个控制器负载值,和预先设定的策略,将io派发到存储系统多个控制器节点上并发执行。

方案二:多控磁阵内置io协调调度模块,和应用主机协同,由io协调模块监控cpu使用率、应用主机接口吞吐量、应用主机连接数等,进行动态路径设置、自动路径管理。

然而,方案一,方案二都是提供主机io派发到控制器之前,在多个控制器之间进行io调度的方法,并不能应对io下发到控制器后,发生控制器单点故障、硬盘链路故障,需要跨控制器转发io的情况。从技术效果来看,方案一和方案二致力于改善控制器的负载均衡,对于提高系统的可靠性并没有起到作用。



技术实现要素:

为解决上述技术问题,本发明实施例提供了一种存储系统中多控制器之间的io转发方法及装置,当本地链路或控制器自身发生故障后,由本地下发的主机io能够转发到系统中的其它控制器节点上;当故障恢复后,能够将io切换回本地路径。

本发明实施例提供的存储系统中多控制器之间的io转发方法,包括:

第一控制器通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知;

所述第一控制器创建转发路径后,将所述转发路径注册至磁盘映射模块;

当第一控制器的本地路径发生故障时,通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径;通过所述转发路径将所述第一控制器的io请求转发到第二控制器的本地路径上,对所述第一控制器的io请求进行处理;

第一控制器接收第二控制器发送的io响应。

本发明实施例中,所述第一控制器通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知,包括:

第一控制器启动后,如果检测到硬盘存在至少一条本地路径,则通过板间消息通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知。

本发明实施例中,所述本地路径的优先级高于所述转发路径的优先级;

通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径,包括:

如果通过所述磁盘映射模块检测到所述第一控制器的本地路径全部处于失效状态,则将所述第一控制器的本地路径切换至第一控制器的转发路径。

本发明实施例中,第一控制器通过板间高速通道向第二控制器发送io请求;第一控制器通过板间高速通道接收第二控制器发送的io响应。

本发明实施例中,所述方法还包括:设置用于检测是否超时的定时器;

如果在超时之前,第一控制器未接收到第二控制器通过板间高速通道发送的io响应,则确定第二控制器对所述io请求处理失败并且控制所述第二控制器对io相关资源进行回收;

如果所述第二控制器接收到io请求后在其本地链路上出现超时,则所述第一控制器需等待所述第二控制器的超时返回后才能够进行返回操作。

本发明实施例中,所述方法还包括:

当第一控制器与第二控制器建立好板间高速通道后,启动心跳检测功能以检测所述板间高速通道的通信状态。

本发明实施例中,所述方法还包括:

当第一控制器的本地路径故障恢复时,通过所述磁盘映射模块刷新路径信息,重新通过本地路径对io请求进行处理。

本发明实施例提供的存储系统中多控制器之间的io转发装置,包括:

创建单元,用于通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知;所述第一控制器创建转发路径后,将所述转发路径注册至磁盘映射模块;

切换单元,用于当第一控制器的本地路径发生故障时,通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径;通过所述转发路径将所述第一控制器的io请求转发到第二控制器的本地路径上,对所述第一控制器的io请求进行处理;

交互单元,用于第一控制器接收第二控制器发送的io响应。

本发明实施例中,所述创建单元,具体用于:第一控制器启动后,如果检测到硬盘存在至少一条本地路径,则通过板间消息通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知。

本发明实施例中,所述本地路径的优先级高于所述转发路径的优先级;

所述切换单元,具体用于:如果通过所述磁盘映射模块检测到所述第一控制器的本地路径全部处于失效状态,则将所述第一控制器的本地路径切换至第一控制器的转发路径。

本发明实施例中,第一控制器通过板间高速通道向第二控制器发送io请求;第一控制器通过板间高速通道接收第二控制器发送的io响应。

本发明实施例中,所述装置还包括:定时单元,用于设置用于检测是否超时的定时器;其中,如果在超时之前,第一控制器未接收到第二控制器通过板间高速通道发送的io响应,则确定第二控制器对所述io请求处理失败并且控制所述第二控制器对io相关资源进行回收;如果所述第二控制器接收到io请求后在其本地链路上出现超时,则所述第一控制器需等待所述第二控制器的超时返回后才能够进行返回操作。

本发明实施例中,所述装置还包括:心跳检测单元,用于当第一控制器与第二控制器建立好板间高速通道后,启动心跳检测功能以检测所述板间高速通道的通信状态。

本发明实施例中,所述装置还包括:

恢复单元,用于当第一控制器的本地路径故障恢复时,通过所述磁盘映射模块刷新路径信息,重新通过本地路径对io请求进行处理。

本发明实施例的技术方案中,第一控制器通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知;所述第一控制器创建转发路径后,将所述转发路径注册至磁盘映射模块;当第一控制器的本地路径发生故障时,通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径;通过所述转发路径将所述第一控制器的io请求转发到第二控制器的本地路径上,对所述第一控制器的io请求进行处理;第一控制器接收第二控制器发送的io响应。采用本发明实施例的技术方案,当本地链路或控制器自身发生故障后,由本地下发的主机io能够转发到系统中的其它控制器节点上;当故障恢复后,能够将io切换回本地路径。此外,不影响存储产品已有的io流程和管理流程,对系统架构冲击很小;原型机实测数据表明,本发明实施例的后端io转发对主机io性能影响很小,实用性较高。

附图说明

附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。

图1为本发明实施例的硬盘io转发模块在系统中的位置示意图;

图2为本发明实施例的硬盘io转发模块部署图;

图3为本发明实施例的存储系统中多控制器之间的io转发方法的流程示意图;

图4为本发明实施例的后端硬盘io转发流程图;

图5为本发明实施例的存储系统中多控制器之间的io转发装置的结构组成示意图。

具体实施方式

为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。

本发明实施例的技术方案的核心为硬盘io转发模块,也即磁盘输入输出分发模块(did,diskiodistributesystem)模块,图1展示了did模块在系统中的位置。did模块位于device-mapper层之下,小型计算机系统接口(scsi,smallcomputersysteminterface)中层之上。现有的后端多路径切换是由device-mapper框架下的dm-multipath驱动实施的,当dm-multipath发现一条路径故障,会尝试选择其他的路径进行重试,如果都失败则返回上层失败。但是dm-multipath只能局限在本地路径选择,不能跨控制器选择路径。did模块的功能就是在本地路径都访问失败的情况下,将io转发到其他控制器进行处理,替代直接返回上层业务。本发明实施例只是在io流程路径中增加必要的处理,并不改变已有的io多路径流程。

图2为did模块的部署示意图。did模块包含两个子模块,一个部署在用户态,负责触发创建转发路径,以及查询设备相关的信息;另一个部署在内核态,负责注册转发路径设备、心跳检测和io转发功能,而路径选取策略放在内核的device-mapper中。用户态模块触发创建、查询会通过用户态的ioctl方式通知到内核态,内核态转发路径检测通知会通过netlink方式通知到用户态模块。

磁阵产品后端硬盘io处理一般采用linux内核自带的机制,主要涉及linux通用块设备层、scsi子系统,和device-mapper。scsi子系统通过sas驱动中断事件向内核注册块设备,然后以uevent事件的方式通知用户态multipath进行映射。用户态multipath根据上报的事件对来自同一硬盘的事件进行映射,将不同路径上报的块设备映射到同一个逻辑块设备中,然后再通知内核将该关系映射到内核,device-mapper形成一个映射设备(mappeddevice),这样上层用户就可以通过mappeddevice设备对硬盘进行访问,以至于同一mappeddevice设备的不同路径间的访问由内核device-mapper屏蔽。did模块正是嵌入到device-mapper模块中,作为mappeddevice设备的一条路径。该路径的优先级排在本地路径之后,当本地路径都失效时,才会选择转发路径,系统上层业务能在“不知情”的情况下,通过板间高速通道从非本地控制器节点访问硬盘。

基于图1和图2所示的技术方案,提出本发明实施例的存储系统中多控制器之间的io转发方法,如图3所示,所述存储系统中多控制器之间的io转发方法包括以下步骤:

步骤301:第一控制器通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知;所述第一控制器创建转发路径后,将所述转发路径注册至磁盘映射模块。

本发明实施例中,第一控制器启动后,如果检测到硬盘存在至少一条本地路径,则通过板间消息通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知。

参照图4,第一控制器是指控制器a,第二控制器是指控制器b。控制器a启动以后,如果发现硬盘存在至少一条本地路径,则发送板间消息通知系统中的其他控制器为该硬盘创建转发路径。该路径以块设备的方式注册给device-mapper。

步骤302:当第一控制器的本地路径发生故障时,通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径;通过所述转发路径将所述第一控制器的io请求转发到第二控制器的本地路径上,对所述第一控制器的io请求进行处理。

本发明实施例中,所述本地路径的优先级高于所述转发路径的优先级;

通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径,包括:

如果通过所述磁盘映射模块检测到所述第一控制器的本地路径全部处于失效状态,则将所述第一控制器的本地路径切换至第一控制器的转发路径。

步骤303:第一控制器接收第二控制器发送的io响应。

本发明实施例中,第一控制器通过板间高速通道向第二控制器发送io请求;第一控制器通过板间高速通道接收第二控制器发送的io响应。

这里,第二控制器接收到第一控制器发过来的io请求后,根据io请求中的硬盘的唯一索引(wwid,worldwideidentifier)找到对应的mappeddevice设备,然后将这个请求交给本地的device-mapper,通过其对硬盘读写,读写完成后再通过io响应的方式返回第一控制器。

本发明实施例中,所述方法还包括:设置用于检测是否超时的定时器;

如果在超时之前,第一控制器未接收到第二控制器通过板间高速通道发送的io响应,则确定第二控制器对所述io请求处理失败并且控制所述第二控制器对io相关资源进行回收;

如果所述第二控制器接收到io请求后在其本地链路上出现超时,则所述第一控制器需等待所述第二控制器的超时返回后才能够进行返回操作。

具体地,did模块通过板间高速通道实现io转发时需要设置超时时间,该超时时间应大于硬盘io对应的超时时间,如果第一控制器在规定时间内转发的io没有返回响应,则认为该io处理失败。如果第一控制器超时,第二控制器要考虑回收io响应,防止资源泄露。

此外,在io转发过程中,如果第二控制器在收到io请求后在其本地路径上出现超时,则需要第一控制器等待接收端超时返回确认后才能返回响应,否则可能导致数据不一致。

本发明实施例中,所述方法还包括:

当第一控制器与第二控制器建立好板间高速通道后,启动心跳检测功能以检测所述板间高速通道的通信状态。

本发明实施例中,所述方法还包括:

当第一控制器的本地路径故障恢复时,通过所述磁盘映射模块刷新路径信息,重新通过本地路径对io请求进行处理。

具体地,从性能方面考虑,本地路径的优先级总是高于转发路径,当所有本地路径都不能访问,才会选择转发路径;当本地路径故障恢复,内核态device-mapper刷新路径信息,后续io请求的时候仍然会优先选择本地路径。

图5为本发明实施例的存储系统中多控制器之间的io转发装置的结构组成示意图,如图5所示,所述装置包括:

创建单元51,用于通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知;所述第一控制器创建转发路径后,将所述转发路径注册至磁盘映射模块;

切换单元52,用于当第一控制器的本地路径发生故障时,通过所述磁盘映射模块的选路策略将所述第一控制器的本地路径切换至第一控制器的转发路径;通过所述转发路径将所述第一控制器的io请求转发到第二控制器的本地路径上,对所述第一控制器的io请求进行处理;

交互单元53,用于第一控制器接收第二控制器发送的io响应。

本发明实施例中,所述创建单元51,具体用于:第一控制器启动后,如果检测到硬盘存在至少一条本地路径,则通过板间消息通知至少一个第二控制器为硬盘创建转发路径,以及从至少一个第二控制器接收创建转发路径的通知。

本发明实施例中,所述本地路径的优先级高于所述转发路径的优先级;

所述切换单元52,具体用于:如果通过所述磁盘映射模块检测到所述第一控制器的本地路径全部处于失效状态,则将所述第一控制器的本地路径切换至第一控制器的转发路径。

本发明实施例中,第一控制器通过板间高速通道向第二控制器发送io请求;第一控制器通过板间高速通道接收第二控制器发送的io响应。

本发明实施例中,所述装置还包括:定时单元54,用于设置用于检测是否超时的定时器;其中,如果在超时之前,第一控制器未接收到第二控制器通过板间高速通道发送的io响应,则确定第二控制器对所述io请求处理失败并且控制所述第二控制器对io相关资源进行回收;如果所述第二控制器接收到io请求后在其本地链路上出现超时,则所述第一控制器需等待所述第二控制器的超时返回后才能够进行返回操作。

本发明实施例中,所述装置还包括:心跳检测单元55,用于当第一控制器与第二控制器建立好板间高速通道后,启动心跳检测功能以检测所述板间高速通道的通信状态。

本发明实施例中,所述装置还包括:

恢复单元56,用于当第一控制器的本地路径故障恢复时,通过所述磁盘映射模块刷新路径信息,重新通过本地路径对io请求进行处理。

本领域技术人员应当理解,本发明实施例的存储系统中多控制器之间的io转发装置可参照本发明实施例的上述任意方案进行理解和补充说明。本发明实施例的存储系统中多控制器之间的io转发装置可以通过具体的逻辑电路而实现。

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

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

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

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

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

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