管理存储阵列的方法及装置与流程

文档序号:12469308阅读:223来源:国知局
管理存储阵列的方法及装置与流程

本发明实施例涉及通信技术,尤其涉及一种管理存储阵列的方法及装置。



背景技术:

双活数据中心,是采用双写模式把数据同时写入本地存储系统和远端存储系统,保证数据在远端存储系统上与本地存储系统上的实时同步。当本地存储系统故障时,本地存储系统承载的业务能够切换到远端存储系统上,从而实现复原点目标(Recovery Point Objective,简称:RPO)和复原时间目标(Recovery Time Objective,简称:RTO)都为0的一种解决方案。

双活(Active-Active,简称:AA)数据中心解决方案包括双主控制器模式。在AA模式中,本地存储系统和远端存储系统同时提供逻辑单元号(logic unit number,简称:LUN)的读写,当本地存储系统故障时,远端存储系统可以无缝地承载本地存储系统上的业务。

现有技术中,AA模式将本地存储系统和远端存储系统看作一个整体,在各存储系统设置一个或者多个集群。集群包括一个或多个引擎,引擎间通过光纤通道(fibre channel,简称:FC)或者互联网协议(Internet Protocol,简称:IP)网络同步数据。但该现有技术中,本地存储系统无法获知远端存储系统中存储控制器的状态,并且当本地的LUN被远端存储系统的控制器锁定时,如果本地控制器写入数据,会破坏数据的一致性。



技术实现要素:

本发明实施例提供一种管理存储阵列的方法及装置,当本地存储阵列在向对端存储阵列申请到LUN的写锁定权限后再写入数据,可以保持数据的一致性。

第一方面,本发明实施例提供一种管理存储阵列的方法,应用于第一存储阵列的控制器中,所述第一存储阵列和第二存储阵列通过通信链路通信, 所述第一存储阵列中的控制器存储有控制器运行状态信息以及写锁权限信息,其中,所述控制器运行状态信息包括所述第二存储阵列中各控制器的运行状态,所述写锁权限信息包括所述第一存储阵列中逻辑单元号LUN的写锁权限管理者,所述LUN的写锁权限管理者是所述第二存储阵列中的控制器,所述方法包括:

当所述第一存储阵列中的控制器接收到向所述LUN写入数据的请求时,并且所述LUN的写锁权限管理者的运行状态是在线时,所述第一存储阵列中的控制器通过所述通信链路,向所述LUN的写锁权限管理者发送写锁定权限的申请请求;

当所述第一存储阵列中的控制器获得所述写锁权限管理者提供的写锁定权限后,向所述LUN写入所述数据。

结合第一方面,在第一方面的第一种可能的实现方式中,所述第一存储阵列中的控制器通过所述通信链路,向所述LUN的锁权限拥有者发送写锁定权限的申请请求之后,所述方法还包括:

当所述第一存储阵列中的控制器获得所述写锁权限管理者提供的写锁定权限后,向所述第二存储阵列发送向所述LUN的镜像LUN中写入所述数据的指令,所述镜像LUN由所述第二存储阵列中的控制器管理。

结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述方法还包括:

当所述LUN写入完成,并且收到所述第二存储阵列发送的所述镜像LUN写入完成的响应消息后,所述第一存储阵列中的控制器释放所述写锁定权限。

结合第一方面、第一方面的第一种至第二种可能的实现方式中任意一种,在第一方面的第三种可能的实现方式中,所述方法还包括:

在所述第一存储阵列中的控制器释放所述写锁定权限之前,所述第一存储阵列中的控制器接收到另外一个向所述LUN写入数据的请求,并且所述LUN的写锁权限管理者的运行状态是在线时,通过所述通信链路,向所述LUN的写锁权限管理者发送写锁定权限的申请请求;

所述第一存储阵列中的控制器接收所述写锁权限管理者返回拒绝给予写锁定权限的响应消息。

结合第一方面,在第一方面的第四种可能的实现方式中,所述方法还包 括:

所述第一存储阵列中的主控制器接收所述第二存储阵列中的主控制器发送的待处理事件,所述待处理事件发生在所述第二存储阵列中,其中,所述第一存储阵列中的主控制器为所述第一存储阵列中的控制器中的一个,所述第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个;

所述第一存储阵列中的主控制器根据所述待处理事件,更新所述控制器运行状态信息包含的所述第二存储阵列中的控制器的运行状态;

所述第一存储阵列中的主控制器发送更新后的控制器运行状态信息给第一存储阵列中的其他控制器,各个其他控制器更新自己存储的所述控制器运行状态信息。

结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,当所述待处理事件为控制器故障事件时,所述第一存储阵列中的主控制器根据所述待处理事件,更新所述控制器运行状态信息包含的所述第二存储阵列中的控制器的运行状态,包括:

所述第一存储阵列中的主控制器将发生所述控制器故障事件的控制器的运行状态从所述控制器运行状态信息中移除,或

在所述控制器运行状态信息中,所述第一存储阵列中的主控制器将发生所述控制器故障事件的控制器的运行状态更新为离线或故障。

结合第一方面,在第一方面的第六种可能的实现方式中,所述方法还包括:

所述第一存储阵列中的主控制器接收所述第二存储阵列中的主控制器发送的恢复请求,所述恢复请求携带所述第二存储阵列中各控制器的运行状态;

所述第一存储阵列中的主控制器将所述第二存储阵列中各控制器的运行状态添加至所述控制器运行状态信息,其中,所述第二存储阵列中各控制器的运行状态为在线,或,将所述第二存储阵列中各控制器的运行状态更新为在线;

所述第一存储阵列中的主控制器发送第一响应报文给所述第二存储阵列中的主控制器,所述第一响应报文携带所述第一存储阵列中各控制器的运行状态;

其中,所述第一存储阵列中的主控制器为所述第一存储阵列中的控制器 中的一个,所述第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个。

结合第一方面,在第一方面的第七种可能的实现方式中,所述方法还包括:

当所述第一存储阵列中的主控制器检测到通信链路恢复事件时,所述第一存储阵列中的主控制器生成恢复请求,所述恢复请求携带所述第一存储阵列中各控制器的运行状态;

所述第一存储阵列中的主控制器发送所述恢复请求给所述第二存储阵列中的主控制器;

所述第一存储阵列中的主控制器接收所述第二存储阵列中的主控制器发送的第二响应报文,所述第二响应报文携带所述第二存储阵列中各控制器的运行状态;

所述第一存储阵列中的主控制器解析所述第二响应报文,获取所述第二存储阵列中各控制器的运行状态;

所述第一存储阵列中的主控制器将所述第二存储阵列中各控制器的运行状态添加至所述控制器运行状态信息,其中,所述第二存储阵列中各控制器的运行状态为在线,或,将所述第二存储阵列中各控制器的运行状态更新为在线;

其中,所述第一存储阵列中的主控制器为所述第一存储阵列中的控制器中的一个,所述第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个。

结合第一方面、第一方面的第一种至第七种可能的实现方式中任意一种,在第一方面的第八种可能的实现方式中,所述控制器运行状态包括:在线、离线以及故障中的任意一个。

第二方面,本发明实施例提供一种管理存储阵列的装置,集成于第一存储阵列的控制器中,所述第一存储阵列和第二存储阵列通过通信链路通信,所述第一存储阵列中的控制器存储有控制器运行状态信息以及写锁权限信息,其中,所述控制器运行状态信息包括所述第二存储阵列中各控制器的运行状态,所述写锁权限信息包括所述第一存储阵列中逻辑单元号LUN的写锁权限管理者,所述LUN的写锁权限管理者是所述第二存储阵列中的控制器, 所述装置包括接收模块、发送模块、检测模块及处理模块;

所述接收模块,用于接收向所述LUN写入数据的请求;

所述检测模块,用于检测所述LUN的写锁权限管理者的运行状态;

所述发送模块,用于当所述接收模块接收到所述向所述LUN写入数据的请求时,并且所述检测模块检测到所述LUN的写锁权限管理者的运行状态是在线时,通过所述通信链路,向所述LUN的写锁权限管理者发送写锁定权限的申请请求;

所述接收模块,还用于接收所述写锁权限管理者提供的写锁定权限的应答消息;

所述处理模块,用于获得所述写锁权限管理者提供的写锁定权限后,向所述LUN写入所述数据。

结合第二方面,在第二方面的第二种可能的实现方式中,所述处理模块还用于:

在获得所述写锁权限管理者提供的写锁定权限后,触发所述发送模块向所述第二存储阵列发送向所述LUN的镜像LUN中写入所述数据的指令,所述镜像LUN由所述第二存储阵列中的控制器管理。

结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述接收模块,还用于接收所述第二存储阵列发送的所述镜像LUN写入完成的响应消息;

所述处理模块,还用于当所述LUN写入完成,并且所述接收模块收到所述镜像LUN写入完成的响应消息后,释放所述写锁定权限。

结合第二方面、第二方面的第一种至第二种可能的实现方式中任意一种,在第二方面的第三种可能的实现方式中,所述发送模块,还用于在所述处理模块释放所述写锁定权限之前,所述接收模块接收到另外一个向所述LUN写入数据的请求,并且所述检测模块检测到所述LUN的写锁权限管理者的运行状态是在线时,通过所述通信链路,向所述LUN的写锁权限管理者发送写锁定权限的申请请求;

所述接收模块,还用于接收所述写锁权限管理者返回拒绝给予写锁定权限的响应消息。

结合第二方面,在第二方面的第四种可能的实现方式中,集成所述装置 的控制器为所述第一存储阵列中的主控制器,所述第一存储阵列中的主控制器为所述第一存储阵列中的控制器中的一个;

所述接收模块,还用于接收所述第二存储阵列中的主控制器发送的待处理事件,所述待处理事件发生在所述第二存储阵列中,其中,所述第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个;

所述处理模块,还用于根据所述待处理事件,更新所述控制器运行状态信息包含的所述第二存储阵列中的控制器的运行状态;

所述发送模块,还用于发送更新后的控制器运行状态信息给第一存储阵列中的其他控制器,各个其他控制器更新自己存储的所述控制器运行状态信息。

结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,当所述待处理事件为控制器故障事件时,所述处理模块执行根据所述待处理事件,更新所述控制器运行状态信息包含的所述第二存储阵列中的控制器的运行状态时,具体为:

将发生所述控制器故障事件的控制器的运行状态从所述控制器运行状态信息中移除,或

在所述控制器运行状态信息中,将发生所述控制器故障事件的控制器的运行状态更新为离线或故障。

结合第二方面,在第二方面的第六种可能的实现方式中,集成所述装置的控制器为所述第一存储阵列中的主控制器,所述第一存储阵列中的主控制器为所述第一存储阵列中的控制器中的一个;

所述接收模块,还用于接收所述第二存储阵列中的主控制器发送的恢复请求,所述恢复请求携带所述第二存储阵列中各控制器的运行状态;

所述处理模块,还用于将所述第二存储阵列中各控制器的运行状态添加至所述控制器运行状态信息,其中,所述第二存储阵列中各控制器的运行状态为在线,或,将所述第二存储阵列中各控制器的运行状态更新为在线;

所述发送模块,还用于发送第一响应报文给所述第二存储阵列中的主控制器,所述第一响应报文携带所述第一存储阵列中各控制器的运行状态;

其中,所述第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个。

结合第二方面,在第二方面的第七种可能的实现方式中,集成所述装置的控制器为所述第一存储阵列中的主控制器,所述第一存储阵列中的主控制器为所述第一存储阵列中的控制器中的一个;

所述检测模块,还用于检测通信链路恢复事件;

所述处理模块,还用于当所述检测模块检测到所述通信链路恢复事件时,生成恢复请求,所述恢复请求携带所述第一存储阵列中各控制器的运行状态;

所述发送模块,还用于发送所述恢复请求给所述第二存储阵列中的主控制器;

所述接收模块,还用于接收所述第二存储阵列中的主控制器发送的第二响应报文,所述第二响应报文携带所述第二存储阵列中各控制器的运行状态;

所述处理模块,还用于解析所述第二响应报文,获取所述第二存储阵列中各控制器的运行状态;及,将所述第二存储阵列中各控制器的运行状态添加至所述控制器运行状态信息,其中,所述第二存储阵列中各控制器的运行状态为在线,或,将所述第二存储阵列中各控制器的运行状态更新为在线;

其中,所述第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个。

结合第二方面、第二方面的第一种至第七种可能的实现方式中任意一种,在第二方面的第八种可能的实现方式中,所述控制器运行状态包括:在线、离线以及故障中的任意一个。

本发明实施例管理存储阵列的方法及装置,通过在第一存储阵列中的控制器存储有控制器运行状态信息以及写锁权限信息,其中,控制器运行状态信息包括第二存储阵列中各控制器的运行状态,写锁权限信息包括第一存储阵列中LUN的写锁权限管理者,LUN的写锁权限管理者是第二存储阵列中的控制器,第一存储阵列和第二存储阵列通过通信链路通信,实现第一存储阵列对第二存储阵列中的控制器的运行状态的监测,也就是说,第一存储阵列可以直接获知第二存储阵列的存在及故障的发生;另外,在第一存储阵列中的控制器接收到向LUN写入数据的请求时,且LUN的写锁权限管理者的运行状态是在线时,第一存储阵列中的控制器向LUN的写锁权限管理者发送写锁定权限的申请请求,从而获得写锁权限管理者提供的写锁定权限,向LUN写入数据,可以保持数据的一致性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明应用场景示例图;

图2为本发明管理存储阵列的方法实施例一的流程图;

图3为本发明管理存储阵列的方法应用于如图1所示应用场景的工作原理示例图;

图4为本发明管理存储阵列的方法实施例二的流程图;

图5为本发明管理存储阵列的方法实施例三的示例图;

图6为本发明管理存储阵列的方法实施例四的流程图;

图7为本发明管理存储阵列的方法实施例五的示例图;

图8为本发明管理存储阵列的方法实施例六的示例图;

图9为本发明管理存储阵列的方法实施例七的流程图;

图10为本发明管理存储阵列的方法实施例八的流程图;

图11为本发明管理存储阵列的装置实施例一的结构示意图;

图12为本发明管理存储阵列的装置实施例二的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应理解,尽管本文中可使用术语第一、第二等等以描述各种元件或事件或报文,但此等元件或事件或报文不应受到此等术语限制。此等术语仅用以区分一个元件或事件或报文与另一元件或事件或报文。举例而言,在不脱离本申请保护范围的情况下,第一存储阵列可被称为第二存储阵列,且类似地, 第二存储阵列可被称为第一存储阵列。其中,存储阵列包括控制器和磁盘,控制器接收到用户数据以后,发送给磁盘进行存储。

其中,RTO是企业可容许服务中断的时间长度。比如说灾难发生后半天内便需要恢复,RTO值就是十二小时。RPO是指当服务恢复后,恢复得来的数据所对应时的间点。如果现时企业每天凌晨零时进行备份一次,当服务恢复后,系统内储存的只会是最近灾难发生前那个凌晨零时的资料。根据以上两个简单的原则,企业不但可以对现有的数据系统获得最适合的灾备方案,也可以按照既定的RTO及RPO要求获得最适合的灾备方案。

在本发明实施例中,将AA模式双活数据中心解决方案作为存储系统的一个特性。本发明实施例在不需要添加例如引擎等设备的情况下即可实现RTO及RPO等于0的目标。本发明实施例可以推广到例如网络附属存储(Network Attached Storage,简称:NAS)、对象存储等存储系统组成的双活数据中心解决方案中。

本发明实施例中,通过第一存储阵列中的控制器存储有控制器运行状态信息,其中,该控制器运行状态信息包括第二存储阵列中各控制器的运行状态,将两个组成双活数据中心的、独立的存储阵列中的控制器集群虚拟成一个整体,每个存储阵列中的控制器都有一份控制器运行状态信息。控制器运行状态信息不仅能使存储阵列感知对端的存在和对端中故障发生,另外,第一存储阵列中的控制器存储有写锁权限信息,该写锁权限信息包括第一存储阵列中LUN的写锁权限管理者,该LUN的写锁权限管理者是第二存储阵列中的控制器,从而为分布式锁提供了统一管理。

如图1所示,两个存储阵列,分别为存储阵列A和存储阵列B,其中,本领域技术人员可以将存储阵列A理解为本发明实施例中的第一存储阵列,存储阵列B即为本发明实施例中的第二存储阵列。且类似地,也可以将存储阵列B理解为本发明实施例中的第一存储阵列,存储阵列A即为本发明实施例中的第二存储阵列。

以下实施例中,以存储阵列A作为第一存储阵列,存储阵列B作为第二存储阵列为例进行说明。

存储阵列A包括控制器A1、控制器A2、控制器A3和控制器A4。其中,控制器A1为存储阵列A中的主控制器,即第一存储阵列中的主控制器,其 余为第一存储阵列中的从控制器。存储阵列B包括控制器B1、控制器B2、控制器B3和控制器B4。其中,控制器B1为存储阵列B中的主控制器,即第二存储阵列中的主控制器,其余为第二存储阵列中的从控制器。需说明的是,第一存储阵列中的从控制器和第二存储阵列中的从控制器的个数不局限于如图1所示的3个。

本发明实施例中,每个存储阵列维护一份控制器运行状态信息以及写锁权限信息,也就是说控制器运行状态信息以及写锁权限信息存储在存储阵列中的控制器中。对于存储阵列存储上述信息的形式不受限制,例如以视图的形式存储,等等。采用视图的形式存储时,视图包括存储阵列B中的控制器在存储阵列A内的映射,可选地,还包括存储阵列A中的控制器的本地映射。这里,可以将存储阵列B中的控制器映射称为别名节点。因此,本发明实施例中存储阵列A和存储阵列B各自看到的视图是不同的。

如图1所示,存储阵列A的视图包括控制器A1、控制器A2、控制器A3和控制器A4的本地映射A1、A2、A3和A4,还包括控制器B1、控制器B2、控制器B3和控制器B4映射得到别名节点B1’、B2’、B3’和B4’。对应地,存储阵列B的视图包括控制器B1、控制器B2、控制器B3和控制器B4的本地映射B1、B2、B3和B4,还包括由控制器A1、控制器A2、控制器A3和控制器A4映射得到的别名节点A1’、A2’、A3’和A4’。存储阵列A和存储阵列B之间通过交换机10和交换机20来处理存储阵列中的控制器之间的通信,每个交换机服务于一个不同的连接结构。

图2为本发明管理存储阵列的方法实施例一的流程图。本发明实施例提供一种管理存储阵列的方法,应用于第一存储阵列的控制器中,该第一存储阵列和第二存储阵列通过通信链路通信。第一存储阵列中的控制器存储有控制器运行状态信息以及写锁权限信息,其中,控制器运行状态信息包括第二存储阵列中各控制器的运行状态,写锁权限信息包括第一存储阵列中LUN的写锁权限管理者,LUN的写锁权限管理者是第二存储阵列中的控制器。

该方法包括:

S201、当第一存储阵列中的控制器接收到向LUN写入数据的请求时,并且LUN的写锁权限管理者的运行状态是在线时,第一存储阵列中的控制器通过通信链路,向LUN的写锁权限管理者发送写锁定权限的申请请求。

S202、当第一存储阵列中的控制器获得写锁权限管理者提供的写锁定权限后,向LUN写入数据。

其中,写锁定权限的申请者是控制器,具体而言是控制器为数据申请,把该数据写入到LUN的权限。

具体地,基于分布式锁的双活数据中心解决方案主机输入输出(Input/Output,简称:IO)可以同时对两个存储阵列进行读写。当主机对第一存储阵列中的控制器的LUN进行写时,同时将数据写到第二存储阵列中的控制器的LUN中,实现了两个存储阵列中的控制器的LUN的实时同步,其中,LUN是指存储阵列向主机呈现的块存储单元。由于主机可以同时对第一存储阵列中的控制器的LUN和第二存储阵列中的控制器的LUN进行读写,因此,主机访问LUN时须加存储阵列间的互斥锁。存储阵列间互斥锁是个分布式锁,分布式锁的原理是写锁权限管理者可以是两个存储阵列中的任意一个控制器,而其他控制器若要申请写锁权限都必须向写锁权限管理者申请。

第一存储阵列中的控制器和第二存储阵列中的控制器映射得到视图,同时视图为存储阵列间互斥锁提供跨存储阵列控制器视图。本发明实施例将组成双活数据中心的两个存储阵列当作一个集群进行管理,简化了存储阵列间互斥锁的部署,降低双活数据中心IO的复杂度,提高IO性能。

由于控制器运行状态可以包括:在线、离线以及故障中的任意一个。因此,在第一存储阵列中的控制器接收到向LUN写入数据的请求时,第一存储阵列中的控制器检测写锁权限管理者的运行状态是否为在线,若写锁权限管理者的运行状态是在线时,第一存储阵列中的控制器通过通信链路,向LUN的写锁权限管理者发送写锁定权限的申请请求,且在获得写锁权限管理者提供的写锁定权限后,向LUN写入数据。

本发明实施例管理存储阵列的方法及装置,通过在第一存储阵列中的控制器存储有控制器运行状态信息以及写锁权限信息,其中,控制器运行状态信息包括第二存储阵列中各控制器的运行状态,写锁权限信息包括第一存储阵列中LUN的写锁权限管理者,LUN的写锁权限管理者是第二存储阵列中的控制器,第一存储阵列和第二存储阵列通过通信链路通信,实现第一存储阵列对第二存储阵列中的控制器的运行状态的监测,也就是说,第一存储阵列可以直接获知第二存储阵列的存在及故障的发生;另外,在第一存储阵列 中的控制器接收到向LUN写入数据的请求时,且LUN的写锁权限管理者的运行状态是在线时,第一存储阵列中的控制器向LUN的写锁权限管理者发送写锁定权限的申请请求,从而获得写锁权限管理者提供的写锁定权限,向LUN写入数据,可以保持数据的一致性。

在上述实施例的基础上,第一存储阵列中的控制器通过通信链路,向LUN的锁权限拥有者发送写锁定权限的申请请求之后,该方法还可以包括:当第一存储阵列中的控制器获得写锁权限管理者提供的写锁定权限后,向第二存储阵列发送向LUN的镜像LUN中写入数据的指令,该镜像LUN由第二存储阵列中的控制器管理。其中,LUN和镜像LUN可以拥有相同的LUN标识(identification,简称:ID)。LUN和镜像LUN存储的数据保持同步。因此,LUN和镜像LUN之间形成数据保护,当管理LUN的控制器发送故障时,可以从其镜像LUN那种获得数据,避免了数据丢失。LUN和镜像LUN位于不同的存储阵列中,由各自对应的控制器进行管理。

在本发明实施例的存储阵列有2个,主机和2个存储阵列连接,当主机发出向某个LUN写入数据的指令时,指令中携带的LUN ID所指示的LUN被称为双活LUN,这两个存储阵列的集合可以称为双活存储阵列。双活LUN是虚拟的,双活LUN对应2个物理LUN,也就是前述的LUN和镜像LUN,双活LUN和物理LUN三者的LUN ID可以相同。因此,这两个存储阵列呈现给用户的只有一个LUN(双活LUN),但实际存储数据的是2个物理LUN(LUN和镜像LUN)。向某个LUN中写入数据时,数据实际上被写入2个LUN中,相当于数据得到备份。本地存储系统可以直接获知远端存储系统的存在及故障的发生,从而无法实现数据写入的无缝接管。在写入数据时,双活LUN对应的2个物理LUN都处于可以活动(可以写入数据)的状态,因此它被称为双LUN。

运行状态包括:在线、离线以及故障中的任意一个。在线的控制器可以正常工作,离线和故障中的控制器无法正常工作。

如果在向LUN写入数据的,其他控制器也向LUN中写入其他数据,或者向其镜像LUN中写入其他数据,均会造成LUN和镜像LUN的数据不一致,也就是破坏了LUN和镜像LUN之间的数据一致性。因此,本发明实施例使用写锁定权限来避免这种情况的发生,写锁定权限是一种互斥的权限。仅申 请到写锁定权限的控制器有向这个LUN中写入数据的权利;此外,申请到写锁定权限的控制器拥有向镜像LUN中写入相同数据的权利。在释放写锁定权限之前,其他阵列中的其他控制器均没有权限向LUN或者镜像LUN中写入数据。

写锁定权限和被写的数据绑定,也就是说写锁定权限限定了只能写入申请写锁定权限时所指定的数据。即使控制器拥有写锁定权限,也无法写入其他数据。换句话说,写锁定权限的申请者是控制器,是控制器为所述数据申请,把所述数据写入到所述LUN的权限。

另外,该方法还可以包括:当LUN写入完成,并且收到第二存储阵列发送的镜像LUN写入完成的响应消息后,第一存储阵列中的控制器释放写锁定权限。该实施例保证写锁定权限在不同时刻被不同控制器获得。

在上述基础上,该方法还可以包括:在第一存储阵列中的控制器释放写锁定权限之前,第一存储阵列中的控制器接收到另外一个向LUN写入数据的请求,并且LUN的写锁权限管理者的运行状态是在线时,通过通信链路,向LUN的写锁权限管理者发送写锁定权限的申请请求;第一存储阵列中的控制器接收写锁权限管理者返回拒绝给予写锁定权限的响应消息。也就是说,写锁定权限在同一时刻只能被一个控制器获得,在有控制器获得其没有释放之前,其余控制器等待。

这里通过具体示例说明上述实施例。如图3所示,图3示出如图1所示示例的工作原理图。参考图3,用户通过存储阵列A的控制器A2和存储阵列B的控制器B2访问一个双活LUN,这个双活LUN包括控制器A2对应的物理LUN1和控制器B2对应的物理LUN2,而这个双活LUN的写锁权限管理者为控制器B1。在存储阵列B的控制器看到的写锁权限管理者为控制器B1,而在存储阵列A上看到的写锁权限管理者是控制器B1在存储阵列A的视图里的别名节点B1’。当用户从存储阵列B的控制器B2下发写入数据的请求时,控制器B2向控制器B1申请写锁定权限,然后分别向物理LUN2和物理LUN1写数据,待写完后,控制器B2释放写锁定权限。如果在控制器B2申请到写锁定权限到释放写锁定权限期间,用户从存储阵列A的控制器A2下发另外一个向物理LUN1写入数据的请求,控制器A2向控制器B1在存储阵列B的视图中别名节点B1’申请写锁定权限,控制器A2判断别名节点B1’所代表的 控制器物理节点为存储阵列B的控制器B1,控制器A2将申请权限请求发送给存储阵列B的控制器B1。控制器B1发现写锁定权限被控制器B2持有且没有释放,则给控制器A2返回申请失败,控制器A2上的写入数据的请求等待写锁定权限。控制器B1等待控制器B2释放写锁定权限后再分配写锁定权限给控制器A2,控制器A2上写入数据的请求获得写锁定权限后继续执行数据写入操作。而读数据仅在下发的存储阵列本地读数据,不涉及到跨存储阵列的互斥,不需要加读锁定权限。

以下通过具体实施例说明对前述第一存储阵列中的控制器存储的控制器运行状态信息的管理。

图4为本发明管理存储阵列的方法实施例二的流程图。在图2所示实施例的基础上,如图4所示,该方法还可以包括:

S401、第一存储阵列中的主控制器接收第二存储阵列中的主控制器发送的待处理事件。

具体地,待处理事件发生在第二存储阵列中。其中,第一存储阵列中的主控制器为第一存储阵列中的控制器中的一个,第二存储阵列中的主控制器为所述第二存储阵列中的控制器中的一个。

S402、第一存储阵列中的主控制器根据待处理事件,更新控制器运行状态信息包含的第二存储阵列中的控制器的运行状态;

S403、第一存储阵列中的主控制器发送更新后的控制器运行状态信息给第一存储阵列中的其他控制器,各个其他控制器更新自己存储的控制器运行状态信息。

通过本发明实施例保证第一存储阵中的控制器存储的控制器运行状态信息与第二存储阵列种的控制器存储的控制器运行状态信息一致。但本发明所指的一致不是强一致性,而是保证最终一致性。强一致性是要保证每一时刻都是一致的。而最终一致不要求时时一致,而是等配置或者事件处理流程结束后是一致的。

可选地,待处理事件可以包括控制器故障事件、新增控制器事件、第一存储阵列与第二存储阵列之间通信链路故障事件及通信链路恢复事件中的至少一种类型。待处理事件是指可引起第一存储阵列中的控制器的个数和/或运行状态发生改变的事件,和/或,第二存储阵列中的控制器的个数和/或运行状 态发生改变的事件。

不同待处理事件对第一存储阵列中的控制器存储的控制器运行状态信息的影响不同,以下通过几种具体实现方式详细说明。

第一种具体实现方式中,待处理事件为控制器故障事件。该实现方式中,S402可以包括:第一存储阵列中的主控制器将发生控制器故障事件的控制器的运行状态从控制器运行状态信息中移除;或,在控制器运行状态信息中,第一存储阵列中的主控制器将发生控制器故障事件的控制器的运行状态更新为离线或故障。

第一种可选方式中,对于第一存储阵列中的控制器发生故障的事件,也就是本端控制器故障事件时,第一存储阵列中的主控制器将发生控制器故障事件的控制器的运行状态从控制器运行状态信息中移除;或,在控制器运行状态信息中,第一存储阵列中的主控制器将发生控制器故障事件的控制器的运行状态更新为离线或故障。参考图5,当第一存储阵列中的主控制器,即控制器A1检测到控制器A4故障时,将控制器A4对应的映射从视图中移除,或,将控制器A4的运行状态更新为离线或故障。

第二种可选方式中,若发生控制器故障事件的为第一存储阵列中的主控制器,第一存储阵列确定新的第一存储阵列中的主控制器;新的第一存储阵列中的主控制器将发生控制器故障事件的控制器的运行状态从控制器运行状态信息中移除;或,在控制器运行状态信息中,新的第一存储阵列中的主控制器将发生控制器故障事件的控制器的运行状态更新为离线或故障。

发生控制器故障事件的控制器可能是第二存储阵列中的控制器、第一存储阵列中的主控制器或其他控制器。若是第二存储阵列中的控制器控制器,采用第一种具体实现方式更新控制器运行状态信息;若是第一存储阵列中的主控制器,采用第二种可选方式更新控制器运行状态信息;若是第一存储阵列中的其他控制器,采用第一种可选方式更新控制器运行状态信息。

第二种具体实现方式中,待处理事件为新增控制器事件。该实现方式中,S402可以包括:第一存储阵列中的主控制器将新增控制器事件新增的控制器添加至控制器运行状态信息。

其中,新增控制器事件的处理流程和控制器故障事件的处理流程类似。将新增的控制器以别名节点的方式加入到第一存储阵列的控制器运行状态信 息。若新增控制器事件为第一存储阵列中发生的事件,第一存储阵列中的主控制器将将该新增的控制器加入到控制器运行状态信息。

图6和图7示例说明第一存储阵列中的主控制器和第二存储阵列中的主控制器对控制器故障事件的处理流程。

如图6所示,该方法可以包括:

S601、第一存储阵列中的主控制器检测到第一存储阵列中的控制器故障事件。

S602、第一存储阵列中的主控制器根据控制器故障事件更新控制器运行状态信息。

S603、第一存储阵列中的主控制器将更新后的控制器运行状态信息同步到第一存储阵列中的其他控制器。

S604、第一存储阵列中的主控制器将控制器故障事件转发到第二存储阵列中的主控制器。

此后,第一存储阵列中的主控制器结束处理流程。

第二存储阵列中的主控制器接收到该控制器故障事件,更新第二存储阵列中的控制器存储的控制器运行状态信息;将更新后的第二存储阵列中的控制器存储的控制器运行状态信息同步到第二存储阵列中的其他控制器上;结束处理流程。

参考图7,①表示第一存储阵列中的主控制器更新第一存储阵列内的控制器运行状态信息,②表示第一存储阵列中的主控制器将控制器故障事件发送给第二存储阵列中的主控制器,③表示第二存储阵列中的主控制器更新第二存储阵列内的控制器运行状态信息。

第一存储阵列中的主控制器可以处理上述第一存储阵列和第二存储阵列的控制器个数和/或运行发生状态变化的事件。

第三种具体实现方式中,待处理事件为通信链路故障事件。该实现方式中,第一存储阵列中的主控制器将第二存储阵列中的控制器的运行状态从控制器运行状态信息中移除;或,第一存储阵列中的主控制器将第二存储阵列中的控制器的运行状态在控制器运行状态信息中的运行状态更新为离线或故障。

第一存储阵列与第二存储阵列间的通信链路发生故障,第一存储阵列与 第二存储阵列无法通信。第一存储阵列与第二存储阵列各自将对方的别名节点从控制器运行状态信息中移除或将其运行状态更新为离线或故障,如图8所示。

第四种具体实现方式中,待处理事件为通信链路恢复事件,且待处理事件为第一存储阵列中发生的事件。

图9为本发明管理存储阵列的方法实施例七的流程图。在图2所示实施例的基础上,如图9所示,该方法还可以包括:

S901、第一存储阵列中的主控制器接收所述第二存储阵列中的主控制器发送的恢复请求,该恢复请求携带第二存储阵列中各控制器的运行状态。

S902、第一存储阵列中的主控制器将第二存储阵列中各控制器的运行状态添加至控制器运行状态信息,其中,第二存储阵列中各控制器的运行状态为在线,或,将第二存储阵列中各控制器的运行状态更新为在线。

S903、第一存储阵列中的主控制器发送第一响应报文给第二存储阵列中的主控制器,该第一响应报文携带第一存储阵列中各控制器的运行状态。

其中,第一存储阵列中的主控制器为第一存储阵列中的控制器中的一个,第二存储阵列中的主控制器为第二存储阵列中的控制器中的一个。

第五种具体实现方式中,待处理事件为链路恢复事件,且待处理事件为第二存储阵列一侧生成的事件。图10为本发明管理存储阵列的方法实施例八的流程图。在图2所示实施例的基础上,如图10所示,该方法还可以包括:

S110、当第一存储阵列中的主控制器检测到通信链路恢复事件时,第一存储阵列中的主控制器生成恢复请求,该恢复请求携带第一存储阵列中各控制器的运行状态。

S120、第一存储阵列中的主控制器发送恢复请求给第二存储阵列中的主控制器。

S130、第一存储阵列中的主控制器接收第二存储阵列中的主控制器发送的第二响应报文,该第二响应报文携带第二存储阵列中各控制器的运行状态。

S140、第一存储阵列中的主控制器解析第二响应报文,获取第二存储阵列中各控制器的运行状态。

S150、第一存储阵列中的主控制器将第二存储阵列中各控制器的运行状态添加至控制器运行状态信息,其中,第二存储阵列中各控制器的运行状态 为在线,或,将第二存储阵列中各控制器的运行状态更新为在线。

其中,第一存储阵列中的主控制器为第一存储阵列中的控制器中的一个,第二存储阵列中的主控制器为第二存储阵列中的控制器中的一个。

接下来,统一说明第四种具体实现方式和第五种具体实现方式。

当第一存储阵列与第二存储阵列间的通信链路恢复正常,第一存储阵列与第二存储阵列通过第一存储阵列中的主控制器和第二存储阵列中的主控制器进行控制器运行状态信息平滑配置。对于平滑配置。本领域技术人员可以理解为:在两存储阵列间的通信链路恢复正常时,由发起创建控制器运行状态信息的一方向共同创建该控制器运行状态信息的另一方查询控制器信息并转化成别名节点写入到本地的控制器运行状态信息中。也就是说,若创建控制器运行状态信息是由本发明实施例中的第一存储阵列发起的,则本发明实施例中的第一存储阵列采用第五种具体实现方式更新控制器运行状态信息;若创建控制器运行状态信息是由本发明实施例中的第二存储阵列发起的,则本发明实施例中的第一存储阵列采用第四种具体实现方式更新控制器运行状态信息。

上述实施例通过具体实现方式说明如何更新控制器运行状态信息,而更新控制器运行状态信息的前提是要创建控制器运行状态信息。

创建控制器运行状态信息可以包括:

1)第一存储阵列中的主控制器接收用于创建控制器运行状态信息的命令。

用户发送用于创建控制器运行状态信息的命令到第一存储阵列,由第一存储阵列中的主控制器执行该用于创建控制器运行状态信息的命令。

2)第一存储阵列中的主控制器获取第一存储阵列中的控制器的运行状态。

3)第一存储阵列中的主控制器发送创建命令给第二存储阵列中的主控制器,该创建命令包括第一存储阵列中的控制器的运行状态。

第一存储阵列根据第一存储阵列中的控制器的运行状态,生成创建命令并发送给第二存储阵列中的主控制器。

相应地,第二存储阵列中的主控制器接收到创建命令后,先获取本地的控制器的运行状态;然后,第二存储阵列中的主控制器根据创建命令包括的 第一存储阵列中的控制器的运行状态、和第二存储阵列中的控制器的运行状态,配置第二存储阵列的控制器运行状态信息;在配置好之后,第二存储阵列中的主控制器将配置好的控制器运行状态信息同步到第二存储阵列中的其他控制器中;第二存储阵列中的主控制器将该第二存储阵列中的控制器的运行状态、创建执行结果携带在应答报文中返回给第一存储阵列中的主控制器。

4)第一存储阵列中的主控制器接收第二存储阵列中的主控制器发送的应答报文,该应答报文包括第二存储阵列中的控制器的运行状态。

5)第一存储阵列中的主控制器根据第一存储阵列中的控制器的运行状态和第二存储阵列中的控制器的运行状态,创建第一存储阵列的控制器运行状态信息。

综上,第一存储阵列接收到用于创建控制器运行状态信息的命令后,将本存储阵列中的控制器的运行状态发送到第二存储阵列,并等待第二存储阵列的执行结果;然后根据两个存储阵列的控制器的运行状态,创建本地的控制器运行状态信息。

最后,第一存储阵列中的主控制器将本地的控制器运行状态信息同步到各第一存储阵列中的其他控制器中。可选地,第一存储阵列中的主控制器返回结果给用户。

上述实施例中,可以采用位图表示第一存储阵列中的控制器的运行状态,和/或,第二存储阵列中的控制器的运行状态。例如,在线表示为1,故障或离线表示为0,等等,本发明实施例不以此为限。

图11为本发明管理存储阵列的装置实施例一的结构示意图。本发明实施例提供一种管理存储阵列的装置,该装置集成于第一存储阵列的控制器中,第一存储阵列和第二存储阵列通过通信链路通信。第一存储阵列中的控制器存储有控制器运行状态信息以及写锁权限信息,其中,控制器运行状态信息包括第二存储阵列中各控制器的运行状态;写锁权限信息包括第一存储阵列中LUN的写锁权限管理者,LUN的写锁权限管理者是第二存储阵列中的控制器。

如图11所示,管理存储阵列的装置100包括:接收模块11、发送模块22、检测模块33及处理模块44。

其中,接收模块11用于接收向LUN写入数据的请求。检测模块33用于 检测LUN的写锁权限管理者的运行状态。发送模块22用于当接收模块11接收到向所述LUN写入数据的请求时,并且检测模块33检测到LUN的写锁权限管理者的运行状态是在线时,通过通信链路,向LUN的写锁权限管理者发送写锁定权限的申请请求。接收模块11还用于接收写锁权限管理者提供的写锁定权限的应答消息。处理模块44用于获得写锁权限管理者提供的写锁定权限后,向所述LUN写入数据。

本实施例的装置,可以用于执行上述任意方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

在上述基础上,处理模块44还可以用于:在获得写锁权限管理者提供的写锁定权限后,触发发送模块22向第二存储阵列发送向LUN的镜像LUN中写入所述数据的指令,该镜像LUN由第二存储阵列中的控制器管理。

此外,接收模块11还可以用于接收第二存储阵列发送的镜像LUN写入完成的响应消息。处理模块44还可以用于当LUN写入完成,并且接收模块11收到镜像LUN写入完成的响应消息后,释放写锁定权限。

进一步地,发送模块22还可以用于在处理模块44释放写锁定权限之前,接收模块11接收到另外一个向LUN写入数据的请求,并且检测模块33检测到LUN的写锁权限管理者的运行状态是在线时,通过通信链路,向LUN的写锁权限管理者发送写锁定权限的申请请求。接收模块11还可以用于接收写锁权限管理者返回拒绝给予写锁定权限的响应消息。

一种实现方式中,集成管理存储阵列的装置100的控制器为第一存储阵列中的主控制器,第一存储阵列中的主控制器为第一存储阵列中的控制器中的一个。

在该实现方式中,接收模块11还可以用于接收第二存储阵列中的主控制器发送的待处理事件,待处理事件发生在第二存储阵列中,其中,第二存储阵列中的主控制器为第二存储阵列中的控制器中的一个。处理模块44还可以用于根据待处理事件,更新控制器运行状态信息包含的第二存储阵列中的控制器的运行状态。发送模块22还可以用于发送更新后的控制器运行状态信息给第一存储阵列中的其他控制器,各个其他控制器更新自己存储的所述控制器运行状态信息。

可选地,当待处理事件为控制器故障事件时,处理模块44执行根据待处 理事件,更新控制器运行状态信息包含的第二存储阵列中的控制器的运行状态时,可以具体为:将发生控制器故障事件的控制器的运行状态从控制器运行状态信息中移除,或,在控制器运行状态信息中,将发生控制器故障事件的控制器的运行状态更新为离线或故障。

另一种实现方式中,集成管理存储阵列的装置100的控制器为第一存储阵列中的主控制器,第一存储阵列中的主控制器为第一存储阵列中的控制器中的一个。

在该实现方式中,接收模块11还可以用于接收第二存储阵列中的主控制器发送的恢复请求,该恢复请求携带第二存储阵列中各控制器的运行状态。处理模块44还可以用于将第二存储阵列中各控制器的运行状态添加至控制器运行状态信息,其中,第二存储阵列中各控制器的运行状态为在线,或,将第二存储阵列中各控制器的运行状态更新为在线。发送模块22还可以用于发送第一响应报文给第二存储阵列中的主控制器,第一响应报文携带第一存储阵列中各控制器的运行状态。其中,第二存储阵列中的主控制器为第二存储阵列中的控制器中的一个。

又一种实现方式中,集成管理存储阵列的装置100的控制器为第一存储阵列中的主控制器,第一存储阵列中的主控制器为第一存储阵列中的控制器中的一个。

在该实现方式中,检测模块33还可以用于检测通信链路恢复事件。处理模块44还可以用于当检测模块33检测到通信链路恢复事件时,生成恢复请求,该恢复请求携带第一存储阵列中各控制器的运行状态。发送模块22还可以用于发送恢复请求给第二存储阵列中的主控制器。接收模块11还可以用于接收第二存储阵列中的主控制器发送的第二响应报文,该第二响应报文携带第二存储阵列中各控制器的运行状态。处理模块44还可以用于解析第二响应报文,获取第二存储阵列中各控制器的运行状态;及,将第二存储阵列中各控制器的运行状态添加至控制器运行状态信息,其中,第二存储阵列中各控制器的运行状态为在线,或,将第二存储阵列中各控制器的运行状态更新为在线。其中,第二存储阵列中的主控制器为第二存储阵列中的控制器中的一个。

需要说明的,在上述任意实施例中,控制器运行状态可以包括:在线、 离线以及故障中的任意一个。另外,对于新增控制器事件和通信链路故障事件以及创建控制器运行状态信息等,在此不再赘述,具体描述可参考上述方法实施例。

图12为本发明管理存储阵列的装置实施例二的结构示意图。如图12所示,本实施例提供的管理存储阵列的装置200包括处理器210和存储器220。其中,存储器220存储执行指令,当管理存储阵列的装置200运行时,处理器210与存储器220之间通信,处理器210调用存储器220中的执行指令,用于执行上述管理存储阵列的方法,其实现原理和技术效果类似,此处不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭示的装置和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元或模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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