一种数据保护方法及存储设备与流程

文档序号:12887062阅读:205来源:国知局
一种数据保护方法及存储设备与流程

本申请涉及计算机通信领域,尤其涉及一种双活存储技术。



背景技术:

双活存储技术是一种数据保护技术,在双活存储系统中通常可以包括主lun存储单元和从lun存储单元。主lun存储单元和从lun存储单元可分配给应用服务器,对于应用服务器而言,主lun存储单元和从lun存储单元被识别为同一lun存储单元。

在接收到应用服务器下发的写io请求后,该双活存储系统中的主lun存储单元可处理该写io请求,并将该写io请求携带的数据写入主lun存储单元,同时将该写入的数据同步至从lun存储单元。

当在主lun存储单元发生故障或者其所在存储设备发生故障时,如何继续进行io请求处理,以及在主lun存储单元或者其所在存储设备恢复正常后恢复数据等数据保护问题就成为亟待解决的问题。



技术实现要素:

有鉴于此,本申请提供一种数据保护方法及存储设备,用以通过投入较低的硬件成本实现数据的保护。

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

根据本申请的第一方面,提供一种数据保护方法,所述方法应用于双活存储系统中的从逻辑单元号lun存储单元,所述双活存储系统还包括主lun存储单元;所述双活存储系统在接收写io请求后,由该双活存储系统中的主lun存储单元处理该写io请求,且该主lun存储单元不将该写io请求中的数据同步至所述从lun存储单元;所述从lun存储单元被预配置为瘦逻辑单元号thin-lun存储单元,所述方法包括:

在所述主lun存储单元或者所述主lun存储单元所在存储设备故障后,基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间;其中,所述目标逻辑子空间对应的目标逻辑地址段的起始逻辑地址大于等于所述写io请求中携带的逻辑地址;

将所述目标逻辑子空间的状态转换为临时主状态,为所述目标逻辑子空间开启自动扩容机制,并将所述写io请求携带的数据写入该目标逻辑子空间,且不执行数据同步;

在故障恢复后,触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步,并在同步完成后,释放该目标逻辑子空间所占用的物理空间,并恢复本lun存储单元和所述主lun存储单元。

根据本申请的第二方面,提供存储设备,所述存储设备包括处理器和存储介质,所述处理器调用所述存储介质上储存的与数据保护逻辑对应的机器可执行指令,所述处理器被促使执行上述数据保护的方法。

本申请提出一种数据保护方法,该方法可应用于双活存储系统。

在接收到应用服务器下发的写io请求时,该双活存储系统中的主lun存储单元处理该写io请求,并不将该写io请求中携带的数据同步至从lun存储单元。

该双活存储系统中的从lun存储单元被配置为thin-lun存储单元,在所述主lun存储单元或者所述主lun存储单元所在存储设备故障后,从lun存储单元可基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间,并将该目标逻辑子空间的状态转换为临时主状态,为所述目标逻辑子空间开启自动扩容机制,并将所述写io请求携带的数据写入该目标逻辑子空间,且不执行数据同步。在故障恢复后,从lun存储单元触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步,并在同步完成后,释放该目标逻辑子空间所占用的物理空间,并恢复本lun存储单元和所述主lun存储单元。

一方面,由于在主lun存储单元或者其所在存储设备正常时,双活存储系统中只保存一份写io请求携带的数据,而在主lun存储单元或者其所在存储设备故障恢复后同步数据的过程中,双活存储系统才保存两份写io请求携带的数据,采用这种数据保护机制既可以尽量减少正常时保存两份数据导致的硬件成本和硬件维护复杂度以及额外的io响应时间,还可实现在主lun存储单元或其所在存储设备故障时,写io的正常写入,以及故障恢复后的主lun存储单元的数据恢复。

另一方面,主lun存储单元和从lun存储单元的逻辑空间被划分为若干个逻辑子空间,每个逻辑子空间对应有双活状态。这种基于逻辑子空间来管理lun双活状态机制,可以使得在主lun存储单元或者其所在存储设备故障后,针对写io请求,继续写入从lun存储单元中临时主状态的目标逻辑子空间,使得写io请求被成功处理;同时,针对读io请求,只要主lun存储单元中主状态的逻辑子空间可以被访问,则可实时读取数据,从而解决了从lun存储单元上未写入数据的空间不能读取数据,必须等待主lun存储单元或者其所在存储设备恢复且数据同步完成后才能读取数据的问题。

第三方面,从lun存储单元被配置为thin-lun存储单元,该从lun存储单元中的目标逻辑子空间在变为临时主状态后,可开启自动扩容机制,采用这种按需申请存储空间的方式来扩大存储容量,在故障恢复,该临时主状态的目标逻辑子空间执行数据同步后,可释放该目标逻辑子空间所占用的存储空间。采用这种机制既可以尽量降低从lun存储单元对存储空间的要求,减少存储空间的浪费,提高存储空间的利用率,还可以快速找到待同步数据,提高数据同步的效率。

附图说明

图1是本申请一示例性实施例示出的一种双活存储系统的示意图;

图2是本申请一示例性实施例示出的一种数据保护方法的流程图;

图3是本申请一示例性实施例示出的一种数据保护的示意图;

图4是本申请一示例性实施例示出的一种数据保护装置所在存储设备的硬件结构图;

图5是本申请一示例性实施例示出的一种数据保护装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

参见图1,图1是本申请一示例性实施例示出的一种双活存储系统的示意图。

在该双活存储系统中通常可以包括主lun存储单元和从lun存储单元。主lun存储单元和从lun存储单元可分别配置在不同的存储设备上。主lun存储单元和从lun存储单元可分配给应用服务器,对于应用服务器而言,主lun存储单元和从lun存储单元被识别为同一lun存储单元。

在接收到应用服务器下发的写io请求后,该双活存储系统中的主lun存储单元可处理该写io请求,并将该写io请求携带的数据写入主lun存储单元,同时将该写入的数据同步至从lun存储单元。

当主lun存储单元发生故障或者其所在存储设备发生故障时,从lun存储单元可继续进行io请求处理,在主lun存储单元恢复正常或者其所在存储设备恢复正常后,可以使用从lun存储单元中储存的数据来恢复主lun存储单元的数据。

然而,在双活存储系统中需要将相同的数据保存两份,大大增加了对存储空间的需求增加了硬盘数量、以及磁盘柜的损耗等。在增加硬件成本的同时,还大大增加的硬件维护的复杂度。

有鉴于此,本申请提出一种数据保护方法,该方法可应用于双活存储系统。

在接收到应用服务器下发的写io请求时,该双活存储系统中的主lun存储单元处理该写io请求,并不将该写io请求中携带的数据同步至从lun存储单元。

该双活存储系统中的从lun存储单元被配置为thin-lun存储单元,在所述主lun存储单元或者所述主lun存储单元所在存储设备故障后,从lun存储单元可基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间,并将该目标逻辑子空间的状态转换为临时主状态,为所述目标逻辑子空间开启自动扩容机制,并将所述写io请求携带的数据写入该目标逻辑子空间,且不执行数据同步。在故障恢复后,从lun存储单元触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步,并在同步完成后,释放该目标逻辑子空间所占用的物理空间,并恢复本lun存储单元和所述主lun存储单元。

一方面,由于在主lun存储单元或者其所在存储设备正常时,双活存储系统中只保存一份写io请求携带的数据,而在主lun存储单元或者其所在存储设备故障恢复后同步数据的过程中,双活存储系统才保存两份写io请求携带的数据,采用这种数据保护机制既可以尽量减少正常时保存两份数据导致的硬件成本和硬件维护复杂度以及额外的io响应时间,还可实现在主lun存储单元或其所在存储设备故障时,写io的正常写入,以及故障恢复后的主lun存储单元的数据恢复。

另一方面,主lun存储单元和从lun存储单元的逻辑空间被划分为若干个逻辑子空间,每个逻辑子空间对应有双活状态。这种基于逻辑子空间来管理lun双活状态机制,可以使得在主lun存储单元或者其所在存储设备故障后,针对写io请求,继续写入从lun存储单元中临时主状态的目标逻辑子空间,使得写io请求被成功处理;同时,针对读io请求,只要主lun存储单元中主状态的逻辑子空间可以被访问,则可实时读取数据,从而解决了从lun存储单元上未写入数据的空间不能读取数据,必须等待主lun存储单元或者其所在存储设备恢复且数据同步完成后才能读取数据的问题。

第三方面,从lun存储单元被配置为thin-lun存储单元,该从lun存储单元中的目标逻辑子空间在变为临时主状态后,可开启自动扩容机制,采用这种按需申请存储空间的方式来扩大存储容量,在故障恢复,该临时主状态的目标逻辑子空间执行数据同步后,可释放该目标逻辑子空间所占用的存储空间。采用这种机制既可以尽量降低从lun存储单元对存储空间的要求,减少存储空间的浪费,提高存储空间的利用率,还可以快速找到待同步数据,提高数据同步的效率。

参见图2是本申请一示例性实施例示出的一种数据保护方法的流程图。该方法可应用于顺序写模式下的双活存储系统中的从lun存储单元,该双活存储系统还包括主lun存储单元;该双活存储系统在接收写io请求后,由该双活存储系统中的主lun存储单元处理该写io请求,且该主lun存储单元不将该写io请求中的数据同步至该从lun存储单元;该从lun存储单元被预配置为thin-lun存储单元。该方法可包括步骤201至步骤203。

步骤201:在所述主lun存储单元或者所述主lun存储单元所在存储设备故障后,基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间;其中,所述目标逻辑子空间对应的目标逻辑地址段的起始逻辑地址大于等于所述写io请求中携带的逻辑地址。

本申请旨在将从lun存储单元的逻辑空间划分为若干个逻辑子空间。将主lun存储单元的存储空间也可划分为若干个逻辑子空间,并且主lun上的逻辑子空间与从lun逻辑子空间一一对应。每个逻辑子空间对应有双活状态,通过对逻辑子空间的双活状态的管理,来管理双活存储系统。

需要说明的是,本申请提出的数据保护方法应用于顺序写模式。所谓顺序写模式,可以是指后一个写io请求携带的起始逻辑地址大于前一个写io请求携带的起始逻辑地址,lun存储单元是按照逻辑地址段的顺序,依次写入数据。

在本申请实施例中,双活状态可包括主状态、从状态、临时主状态和临时从状态。

其中,上述主状态,通常可以是正常状态下的双活存储系统的一种状态,与从状态对应。在双活存储系统正常工作时,主状态的逻辑子空间在接收到写io请求后,可直接对该写io请求进行写处理。当从状态的逻辑子空间接收到写io请求后,可将该写io请求转发给主状态的逻辑子空间,由主状态的逻辑子空间进行写io请求的处理。与相关技术不同的是,在写io请求处理完成后,主状态的逻辑子空间不将该写io请求中的数据同步至从状态的逻辑子空间。

上述从状态,通常可以是正常状态下的双活存储系统的一种状态。该从状态的逻辑子空间不进行io请求的处理。当从状态的逻辑子空间接收到io请求后,将该io请求转发给主状态的逻辑子空间,由主状态的逻辑子空间对该io请求进行处理。与相关技术不同的是,由于主状态的逻辑子空间不将写io请求携带的数据同步至从状态的逻辑子空间,所以从状态的逻辑子空间中未保存相应的写io请求携带的数据。

在本申请提供的数据保护方法中,该从状态的lun存储单元(即本申请所述的从lun存储单元)被预先配置为thin-lun存储单元,并可按照thin-lun存储单元的存储空间的分配机制来进行存储空间的分配。并且,在双活存储系统正常工作时,由于从lun存储单元中不保存任何写io请求携带的数据,所以该从lun存储单元的初始容量可以很小,并且自动扩容机制处于关闭状态。最优的状态是从lun存储单元的初始容量可以为零。所以从lun存储单元中的逻辑子空间的初始容量也很小,最优的情况是该逻辑子空间的初始容量为零。

上述临时主状态,通常可以是非正常状态下的双活存储系统中出现的一种状态,与临时从状态对应。该临时主状态的逻辑子空间可对应用服务器下发的io请求进行处理。并且,该临时主状态的逻辑子空间对应有数据同步标识,临时主状态的逻辑子空间可依据数据同步标识来决定是否需要对写入的数据进行同步。例如,当同步标识为0时,该临时主状态的逻辑子空间可不将写入的数据同步给临时从状态的逻辑子空间,当同步标识为1时,该临时主状态的逻辑子空间可将写入的数据同步至临时从状态的逻辑子空间。

上述临时从状态,通常可以是非正常状态下的双活存储系统中出现的一种状态,与临时主状态对应。在接收到应用服务器下发的io请求后,该临时从状态的逻辑子空间不进行io请求处理,而可将该io请求转发至临时主状态的逻辑子空间,由临时主状态的逻辑子空间进行io请求的处理。

需要说明的是,在本申请实施例中,当双活存储系统正常工作时,由双活存储系统中的主lun存储单元处理应用服务器下发的写io请求,并不将该写io请求中携带的数据同步至从lun存储单元。换句话来说,在该情况下,写io请求中携带的数据是单端写入的。

当双活存储系统中的主lun存储单元故障或其所在存储设备故障,从lun存储单元中的目标逻辑子空间可变为临时主状态,临时主状态的目标逻辑子空间可处理应用服务器下发的写io请求,并不将该写io请求携带的数据同步至对端。换句话来说,在该情况下,写io请求中携带的数据也是单端写入的。

当主lun存储单元或其所在存储设备故障恢复后,与该目标逻辑子空间对应的主lun存储单元上的逻辑子空间可转换为临时从状态,在故障恢复后至临时主状态的逻辑子空间向临时从状态的逻辑子空间执行数据同步完成前,对于应用服务器下发的写io请求,由该临时主状态的逻辑子空间进行处理,并且该临时主状态的逻辑子空间不仅可将故障时本地写入的数据同步至临时从状态的逻辑子空间,还可将写io请求中携带的数据同步至临时从状态的逻辑子空间。换句话来说,在该情况下,写io请求中携带的数据是双端写入的。

需要注明的是,本申请所提到的主lun存储单元,是指处于主状态的lun存储单元,本申请所提到的从lun存储单元,是指处于从状态的lun存储单元。在双活存储系统正常工作的情况下,存在主状态的lun存储单元(即主lun存储单元)和从状态的lun存储单元(即从lun存储单元),在双活存储系统异常时,双活状态可按照逻辑子空间定义,下文不再赘述。

在本申请实施例中,在双活存储系统正常的状态下,当双活存储系统接收到应用服务器下发写io请求后,由该双活存储系统中的主lun存储单元处理该写io请求,并不将该写io请求中携带的数据同步至从lun存储单元。

例如,当主lun存储单元接收到写io请求后,可由主lun存储单元将该写io请求中携带的数据写入本地,并不将该写io请求中携带的数据同步至从lun存储单元。然后向该应用服务器返回针对该写io请求写入成功的响应消息。

当从lun存储单元接收到写io请求后,可将该写io请求转发给主lun存储单元,主lun存储单元将该写io请求中携带的数据写入本地后,不将该写io请求携带的数据写入从lun存储单元。主lun存储单元可向从lun存储单元返回针对该写io请求写入成功的响应消息,由从lun存储单元向应用服务器返回该响应消息。

在本申请实施例中,当上述主lun存储单元故障或者该主lun存储单元所在存储设备故障时,可基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间。

在一种可选的实现方式中,对于主lun存储单元故障的情景:通常双活存储系统中的主lun存储单元和从lun存储单元可互相记录对方所在存储设备的设备标识和lun标识。此外,主lun存储单元对应有待反转标识。在主lun存储单元故障时,主lun存储单元可依据记录的从lun存储单元所在设备的设备标识和lun标识,向从lun存储单元发送状态转换的通知指令。

此外,在主lun存储单元故障时,主lun存储单元可添加待反转标识,用以使得在主lun存储单元故障后可将接收到的写io请求转发至从lun存储单元。

例如,主lun存储单元在接收到写io请求时,如果主lun存储单元上存在待反转标识,则可将该写io请求转发至从lun存储单元。

从lun存储单元在接收到该状态转换的通知指令后,可将本lun存储单元添加待反转标识,用以使得从lun识别出故障后接收到的写io请求。

例如,在从lun接收到应用服务器下发的写io请求或者主lun存储单元转发的写io请求后,可判断是否存在该待反转标识,若存在,则可基于该写io请求携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间。该添加待反转标识后接收到的写io请求即为主lun存储单元或者主lun存储单元所在存储设备故障后接收到的写io请求。

在另一种可选的实现方式中,对于主lun存储单元所在存储设备故障的情景:通常,主lun存储单元所在存储设备和从lun存储单元所在存储设备之间可发送心跳报文来检测对端存储设备的运行状态。

当从lun存储单元所在存储设备通过心跳报文检测到主lun存储单元所在存储设备故障后,从lun存储单元所在存储设备可向该从lun存储单元发送状态转换的通知指令。

从lun存储单元在接收到该状态转换的通知指令后,可将本lun存储单元添加待反转标识,用以使得从lun识别出故障后接收到的写io请求。

例如,在从lun接收到应用服务器下发的写io请求后,可判断是否存在该待反转标识,若存在,则可基于该写io请求携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间。该添加待反转标识后接收到的写io请求即为主lun存储单元或者主lun存储单元所在存储设备故障后接收到的写io请求。上述主lun存储单元或其所在存储设备故障后接收到的写io请求可以为主lun存储单元或其所在存储设备故障后接收的第一个写io请求,也可以第若干个写io请求,这里不做具体地限定。但是为了保证数据写入的准确性,全面性,最优的方式是,上述写io请求为主lun存储单元或其所在存储设备故障后接收的第一个写io请求。

在本申请实施例中,在基于故障后接收到的写io请求中携带逻辑地址,确定本lun存储单元的目标逻辑子空间时,可采用如下方式实现。

从lun存储单元可基于预设的划分规则,将本lun存储单元对应的逻辑空间划分为若干逻辑子空间。

其中,预设的划分规则可包括基于上述写io请求中携带的逻辑地址,以及划分段数或者每个逻辑地址段的长度等进行设定。这里,开发人员可根据实际情况对上述预设的划分规则进行设定,这里只是对其进行示例性说明,不对其进行具体的限定。

在该划分规则下,划分出的若干个逻辑地址段,至少包括起始逻辑地址大于等于该写io请求中携带的逻辑地址的目标地址段。该目标逻辑地址段可为一个或者多个,这里不具体限定。

从lun存储单元可将该目标地址段对应的逻辑子空间确定为目标逻辑子空间。该目标逻辑子空间可为一个或者多个,这里不具体限定。

此外,划分出的逻辑地址段至少还包括结束逻辑地址小于所述写io请求中携带的逻辑地址的已写入逻辑地址段,该已写入逻辑地址段对应的逻辑空间这里可记为已写入逻辑子空间。

例如,假设从lun存储单元的逻辑空间对应的逻辑地址段为0gb-100gb,上述写io请求携带的逻辑地址为60gb,且预设的划分规则可为将从lun存储单元的逻辑空间对应的逻辑地址段划分为两段,以写io请求携带的逻辑地址为分界点。

这里,基于预设的划分规则,划分出的逻辑地址段可为0gb-60gb,以及60gb-100gb这两个逻辑地址段。然后从lun存储单元可将起始逻辑地址为该写io请求中携带的逻辑地址的逻辑地址段(如60gb-100gb地址段)作为目标逻辑地址段,并将该目标逻辑地址段对应的逻辑子空间确定为目标逻辑子空间。而0gb-60gb可为已写入地址段。

步骤202:将所述目标逻辑子空间的状态转换为临时主状态,为所述目标逻辑子空间开启自动扩容机制,并将所述写io请求携带的数据写入该目标逻辑子空间,且不执行数据同步。

在本申请实施例中,从lun存储单元可将该目标逻辑子空间对应的双活状态由从状态变为临时主状态,并将待反转标识清除。而非该目标逻辑子空间的其他逻辑子空间的状态保持原状态不变。

在实现时,每个双活状态都对应有状态标识,不同状态标识的取值代表不同的双活状态。例如,主状态、从状态、临时主状态和临时从状态对应的状态标识取值依次为1、2、3、4。从lun存储单元可将目标逻辑子空间的状态标识位的取值由2修改为3,从而完成将该目标逻辑子空间的状态转换为临时主状态。

此外,从lun存储单元可为该目标逻辑子空间开启自动扩容机制,当该目标逻辑子空间的存储空间的剩余容量小于等于扩容阈值时,即可按照扩容步长进行扩容,达到实时、按需申请存储空间的目的。

在本申请实施例中,在目标逻辑子空间转换为临时主状态后,若从lun存储单元接收到应用服务器下发的写io请求,则可将该写io请求携带的数据写入目标逻辑子空间,并不执行数据同步,并向应用服务器返回写入成功消息。

此外,在目标逻辑子空间转换为临时主状态后,若从lun存储单元接收到主lun转发的写io请求,则可将该写io请求携带的数据写入目标逻辑子空间,并不执行数据同步,然后向主lun存储单元返回写入成功消息,以由主lun存储单元向应用服务器返回写入成功消息。

步骤203:在故障恢复后,从lun存储单元触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步,并在同步完成后,释放该目标逻辑子空间所占用的物理空间,并恢复本lun存储单元和所述主lun存储单元。

在本申请实施例中,在故障恢复时,从lun存储单元触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步。

在一种可选的实现方式中,对于主lun存储单元故障的情景:当上述目标逻辑子空间转换为临时主状态后,可向该主lun存储单元发送局部状态转换通知。该局部状态转换通知中携带着该目标逻辑子空间的起始逻辑地址。

主lun存储单元在接收到上述局部状态转换通知后,可基于该通知中的起始逻辑地址,并依据上述预设的划分规则,将该主lun存储单元进行划分,划分成若干个逻辑子空间,该划分出的逻辑子空间与从lun存储单元上划分出的逻辑子空间一一对应。

主lun存储单元可将本lun存储单元中与该目标逻辑子空间对应的逻辑子空间的状态由主状态转换为临时从状态,并清除待反转标识。主lun存储单元上的其他逻辑子空间状态不变。

例如,假设从lun存储单元被划分为逻辑子空间1和逻辑子空间2,其对应的逻辑地址段分别为0gb-60gb、60gb-100gb。其中逻辑子空间2为目标逻辑子空间。在将目标逻辑子空间转换为临时主状态后,可向主lun存储单元发送局部状态转换通知,该通知中携带目标逻辑子空间的起始逻辑地址,即60gb。

主lun存储单元在接收到通知后,可基于该起始逻辑地址以及预设的划分规则,将主lun存储单元划分为两个逻辑子空间,分别为逻辑子空间1′和逻辑子空间2′,其对应的逻辑地址段分别为0gb-60gb、60gb-100gb。

主lun存储单元可将本lun存储单元上的与该目标逻辑子空间(即逻辑子空间2)对应的逻辑子空间(即逻辑子空间2′)转换为临时从状态。

在将该主lun存储单元上的与该目标逻辑子空间对应的逻辑子空间转换为临时从状态后,清除待反转标识。

若主lun存储单元接收到应用服务器下发的写io请求,主lun存储单元可将该写io请求转发至从lun存储单元。从lun存储单元在接收到该写io请求后,可将该写io请求携带的数据写入目标逻辑子空间。然后向主lun存储单元返回写入成功消息,以由主lun存储单元向应用服务器返回写入成功消息。

在本申请实施例中,当主lun存储单元故障恢复后,主lun存储单元可向从lun存储单元发送同步指令,从lun存储单元在接收到该同步指令后,可将目标逻辑子空间(即临时主状态的逻辑子空间)中写入的数据同步至该临时从状态的逻辑子空间。

在另一种可选的实现方式中,对于主lun存储单元所在存储设备故障的情景:当从lun存储单元所在存储设备检测到主lun存储单元所在设备故障恢复后,可向主lun存储单元发送角色协商通知,该角色协商通知中可携带目标逻辑子空间的起始逻辑地址。

主lun存储单元在接收到上述角色协商通知后,可基于该通知中的起始逻辑地址,并依据上述预设的划分规则,将该主lun存储单元进行划分,划分成若干个逻辑子空间,该划分出的逻辑子空间与从lun存储单元上划分出的逻辑子空间一一对应。

主lun存储单元可与从lun存储单元协商各个逻辑子空间的状态,经过协商,主lun存储单元上的与该目标逻辑子空间对应的逻辑子空间为临时从状态。其他逻辑子空间为主状态。

在该主lun存储单元上的与该目标逻辑子空间对应的逻辑子空间被协商为临时从状态后,主lun存储单元可向从lun存储单元发送同步指令,从lun存储单元在接收到该同步指令后,可将目标逻辑子空间(即临时主状态的逻辑子空间)中写入的数据同步至该临时从状态的逻辑子空间。

需要说明的是,上述将临时主状态的逻辑子空间存储的数据同步至临时从状态的逻辑子空间可包括:将主lun存储单元或其所在存储设备故障后,该临时主状态的逻辑子空间写入的数据同步至临时从状态的逻辑子空间。还包括:当主lun存储单元恢复或者其所在存储设备恢复后,该临时主状态的逻辑子空间将当前接收到的写io请求(包括从应用服务器接收到的写io请求和临时从lun存储单元转发的写io请求)携带的数据写入本地,并同步至临时从状态的逻辑子空间。

其中,上述协商规则通常可包括,当双活存储系统中已有主状态的逻辑子空间或者临时主状态的逻辑子空间,新加入的逻辑子空间可为从状态或者临时从状态。当然协商规则可由开发人员自行设定,只要使得主lun存储单元上的与该目标逻辑子空间对应的逻辑子空间为临时从状态即可,这是只是对协商规则的示例性说明,不对其进行具体地限定。

在本申请实施例中,对于临时主状态的逻辑子空间与临时从状态的逻辑子空间的数据同步,可基于数据同步标识来实现。

在实现,所有临时主状态的逻辑子空间对应有数据同步标识。数据同步标识的取值可为第一预设值和第二预设值。其中,第一预设值表示不对已写入的数据进行同步处理;第二预设值表示对已写入的数据进行同步处理。

在上述目标逻辑子空间由从状态转换为临时主状态后,可将该临时主状态的目标逻辑子空间对应的数据同步标识修改为第一预设值,使得该临时主状态的目标逻辑子空间在进行写io请求的数据写入后,不执行数据同步。

在故障恢复后,当临时主状态的目标逻辑子空间接收到临时从状态的逻辑子空间的数据同步指令后,可将该临时主状态的目标逻辑子空间的数据同步标识修改为第二预设值,使得该临时主状态的目标逻辑子空间可将已写入的数据同步至临时从状态的逻辑子空间。

在本申请实施例中,在完成数据同步后,可释放该临时主状态的逻辑子空间所占用的物理空间,同时关闭自动扩容机制,并恢复本lun存储单元和所述主lun存储单元。

需要说明的是,在双活存储系统处于正常状态时,由于主lun存储单元不向从lun存储单元同步数据,并且在临时主状态的逻辑子空间转换为从状态的逻辑子空间后释放其所占用的物理空间,使得从状态的逻辑子空间一直处于无保存数据的状态,这种状态使得在从状态的逻辑子空间为临时主状态的逻辑子空间后,写入的所有数据均是待同步数据,所以从状态的逻辑子空间无需通过差异位图找到待同步数据。因此在执行数据同步时,临时主状态的逻辑子空间可直接读取本地已写入的数据进行同步,一方面简化了从lun处理写io时,不再需要更新差异位图,简化了软件复杂度,提高了写io处理效率,另一方面简化了同步处理流程,从而大大提高了数据同步效率。

在本申请实施例中,在恢复时,从lun存储单元可将其上的临时主状态的目标逻辑子空间转换为从状态,并将本lun存储单元上划分出的若干个连续的从状态的逻辑子空间进行合并。

从lun存储单元还可向主lun存储单元发送恢复指令,主lun存储单元在接收到该恢复指令后,可将其上的临时从状态的逻辑子空间转换为主状态,并将本lun存储单元划分出的若干连续的主状态的逻辑子空间进行合并。

在本申请实施例中,上述在从lun存储单元划分出的若干地址段至少还包括结束逻辑地址小于上述在主lun存储单元故障或其所在存储设备故障后接收到的写io请求中携带的逻辑地址的已写入逻辑地址段。该已写入逻辑地址段对应的主lun存储单元上的逻辑子空间的状态为主状态,该已写入逻辑地址段对应的从lun存储单元上的逻辑子空间的状态为从状态。

当从lun存储单元接收到应用服务器下发的读io请求后,可获取该读io请求携带的逻辑地址段。

如果获取到的所述逻辑地址段在所述已写入逻辑地址段,从lun存储单元可向应用服务器返回读取错误提示消息,或者从lun存储单元可将该读io请求转发给所述主lun存储单元。主lun存储单元可基于所述读io请求中携带的逻辑地址,在上述已写入逻辑地址段对应的主状态的逻辑子空间中读取对应的数据,若读取到数据,则向所述从lun存储单元返回读取到的数据;若未读取到数据,则向所述从lun存储单元返回读取错误提示消息。

从lun存储单元在接收到所述主lun存储单元返回的所述数据或者所述读取错误提示消息后,将所述数据或者所述读取错误提示消息返回应用服务器。

在一种可选的实现方式中,针对主lun存储单元故障的场景:

1)主lun存储单元故障未恢复:如果从lun存储单元接收到的读io请求携带的逻辑地址段位于上述已写入逻辑地址段,从lun存储单元可将该读io请求转发给所述主lun存储单元。主lun存储单元可基于所述读io请求中携带的逻辑地址段,在上述已写入逻辑地址段对应的主状态的逻辑子空间中读取对应的数据。

在读取时,若该读io请求携带的逻辑地址段对应的逻辑子空间可以访问,则可读取到与该读io请求对应的数据,并可将该读取到的数据返回从lun存储单元,由从lun存储单元将该数据返回应用服务器。

若该读io请求携带的逻辑地址段对应的逻辑子空间访问故障,则不能读取到数据,此时可向从lun存储单元返回读取错误提示消息,由该从lun存储单元将该读取错误提示消息返回应用服务器。

2)主lun存储单元故障恢复(即数据同步过程中):如果从lun存储单元接收到的读io请求携带的逻辑地址段位于上述已写入逻辑地址段,从lun存储单元可将该读io请求转发给所述主lun存储单元。主lun存储单元可基于所述读io请求中携带的逻辑地址段,在上述已写入逻辑地址段对应的主状态的逻辑子空间中读取对应的数据。主lun存储单元可将读取到的数据转发至从lun存储单元,由从lun存储单元将该数据返回应用服务器。

在另一种可选的实现方式中,针对主lun存储单元所在存储设备故障的场景:

1)主lun存储单元所在存储设备故障未恢复:如果从lun存储单元接收到的读io请求携带的逻辑地址段位于上述已写入逻辑地址段,则向应用服务器返回读取错误提示消息。

2)主lun存储单元所在存储设备故障恢复(即数据同步过程中):如果从lun存储单元接收到的读io请求携带的逻辑地址段位于上述已写入逻辑地址段,从lun存储单元可将该读io请求转发给所述主lun存储单元。主lun存储单元可基于所述读io请求中携带的逻辑地址段,在上述已写入逻辑地址段对应的主状态的逻辑子空间中读取对应的数据。主lun存储单元可将读取到的数据转发至从lun存储单元,由从lun存储单元将该数据返回应用服务器。

在本申请实施例中,若从lun存储单元接收到的读io请求携带的逻辑地址段位于上述目标逻辑地址段,从lun存储单元可判断是否存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录。

如果存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录,则读取与该读io请求对应的数据,并可将读取到的数据返回应用服务器。

如果不存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录,则向应用服务器返回读取错误提示信息。

在本申请实施例中,对于主lun存储单元接收io请求可发生在主lun存储单元故障后至故障恢复前,主lun存储单元故障恢复后以及主lun存储单元所在存储设备故障恢复后这三个阶段。

在一种可选的实现方式中,针对主lun存储单元故障的场景:

1)主lun存储单元故障未恢复:主lun存储单元接收到读io请求,若该读io请求携带的逻辑地址段位于已写入逻辑地址段,主lun存储单元可在该已写入逻辑地址段对应的主状态的逻辑子空间中读取与该读io请求对应的数据。若该逻辑地址段对应的逻辑子空间可正常访问,则可读取到对应的数据,主lun存储单元可将读取到的数据返回应用服务器。若该逻辑地址段对应的逻辑子空间访问故障,主lun存储单元可向应用服务器返回读取错误提示消息。

若该读io请求携带的逻辑地址段位于目标逻辑地址段,主lun存储单元可将该读io请求转发至从lun存储单元。从lun存储单元可判断是否存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录。如果存在,从lun存储单元可在临时主状态的目标逻辑子空间中读取数据,并将该读取到的数据返回应主lun存储单元,主lun存储单元可将该数据返回应用服务器。如果不存在,从lun存储单元向主lun存储单元返回读取错误提示消息,主lun存储单元可将该读取错误提示消息返回应用服务器。

2)主lun存储单元故障恢复(即数据同步过程中):主lun存储单元接收到读io请求,若该读io请求携带的逻辑地址段位于已写入逻辑地址段,主lun存储单元可在该已写入逻辑地址段对应的主状态的逻辑子空间中读取与该读io请求对应的数据。并将读取到的数据返回应用服务器。

若该读io请求携带的逻辑地址段位于目标逻辑地址段,主lun存储单元可将该读io请求转发至从lun存储单元。从lun存储单元可判断是否存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录。如果存在,从lun存储单元可在临时主状态的目标逻辑子空间中读取数据,并将该读取到的数据返回应主lun存储单元,主lun存储单元可将该数据返回应用服务器。如果不存在,从lun存储单元向主lun存储单元返回读取错误提示消息,主lun存储单元可将该读取错误提示消息返回应用服务器。

3)在另一种可选的实现方式中,针对主lun存储单元所在存储设备故障的场景:

主lun存储单元所在存储设备故障恢复:主lun存储单元接收到读io请求,若该读io请求携带的逻辑地址段位于已写入逻辑地址段,主lun存储单元可在该已写入逻辑地址段对应的主状态的逻辑子空间中读取与该读io请求对应的数据。并将读取到的数据返回应用服务器。

若该读io请求携带的逻辑地址段位于目标逻辑地址段,主lun存储单元可将该读io请求转发至从lun存储单元。从lun存储单元可判断是否存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录。如果存在,从lun存储单元可在临时主状态的目标逻辑子空间中读取数据,并将该读取到的数据返回应主lun存储单元,主lun存储单元可将该数据返回应用服务器。如果不存在,从lun存储单元向主lun存储单元返回读取错误提示消息,主lun存储单元可将该读取错误提示消息返回应用服务器。

参见图3,图3是本申请一示例性实施例示出的一种数据保护的示意图。

下面通过具体的示例,并结合主lun存储单元故障和主lun存储单元所在存储设备故障这两种场景,对上述方法进行详细地说明。

假设双活存储系统的写模式为顺序写的模式,双活存储系统中的主lun存储单元为lun-a,从lun存储单元为lun-b。lun-a配置在设备a上,lun-b配置在设备b上。lun-b被预先配置为thin-lun存储单元。lun存储单元的逻辑子空间配置有状态标识位,其中主状态、从状态、临时主状态和临时从状态对应的状态标识的取值分别为1、2、3和4。临时主状态对应的逻辑子空间被配置有数据同步标识位,其中数据同步标识位取值为0时表示不对已写入的数据进行同步处理,数据同步标识位取值为1时表示对已写入的数据进行同步处理。

在双活存储系统处于正常状态时,当lun-a接收到写io请求后,可将该写io请求携带的数据写入本地,并不将该写入的数据同步至lun-b。在写入完成后,向应用服务器返回写入成功的响应消息。

当lun-b接收到写io请求后,可将该写io请求转发至lun-a,由lun-a将该写io请求中携带的数据写入lun-a,并不将该写入的数据同步至lun-b。在写入完成后,向lun-b返回写入成功的响应消息,由lun-b向应用服务器返回写入成功的响应消息。

当双活存储系统中的lun-a故障或者设备a故障时,可进行如下操作。

1)针对lun-a故障

当lun-a检测到自身变为故障状态时,lun-a可添加待反转标识,使得lun-a接收到的写io请求转发给lun-b。此外,lun-a还可通过储存的设备b的设备标识和lun-b的lun标识,向lun-b发送角色转换通知。

lun-b在接收到角色转换通知后,lun-b可添加待反转标识。当添加带反转标识后,接收到不论是应用服务器下发的还是lun-a转发的第一个写io请求后,可基于该第一个写io请求中携带的逻辑地址,对lun-b的逻辑空间进行划分。

假设该第一个写io请求携带的逻辑地址为60gb,假设划分为两段。假设lun-a与lun-b对应的逻辑地址段均为0gb-100gb。则lun-b可基于60gb的逻辑地址,将lun-b的逻辑地址段划分为0gb-60gb和60gb-100gb两个地址段,这里将0gb-60gb和60gb-100gb两个地址段对应的逻辑子空间即为逻辑子空间1和逻辑子空间2。lun-b可将起始逻辑地址大于等于该写io请求中的逻辑地址的地址段作为目标地址段,在此例中,60gb-100gb为上文所述目标地址段。该目标地址段对应的逻辑子空间2可为上文所述的目标逻辑子空间。

lun-b可将该逻辑子空间2的状态标识由2修改为3,使得该目标逻辑子空间由从状态转换为临时主状态,并将逻辑子空间的数据同步标识的取值修改为0。lun-b还可清除待反转标识。同时,lun-b可为该目标逻辑子空间开启扩容机制。此时,逻辑子空间1仍为从状态。

lun-b可向lun-a发送局部状态转换通知,该通知中可携带该写io请求的逻辑地址,即60gb。

lun-a在接收到该局部状态转换通知后,可依据该60gb的逻辑地址,将lun-a的逻辑地址段划分为0gb-60gb和60gb-100gb两个地址段。这两个地址段对应的逻辑子空间分别记做逻辑子空间1′和逻辑子空间2′。

lun-a可将逻辑子空间2′的状态标识由1修改为4,使得逻辑子空间2′由主状态转换为临时从状态。此时逻辑子空间1′仍为主状态。lun-a可清除待反转标识。

在lun-b接收到写io请求后,可将该写io请求携带的数据写入该逻辑子空间2中,并基于数据同步标识为0,不将写入的数据同步至逻辑子空间2′。

若lun-a在接收到写io请求,可把该写io请求转发给lun-b执行,lun-b可将该写io请求携带的数据写入该逻辑子空间2中,并基于数据同步标识为0,不将写入的数据同步至逻辑子空间2′。然后,lun-b可把该写请求的执行结果返回给lun-a,由lun-a返回给前端应用服务器。

若lun-b接收到读io请求,lun-b可获取该读io请求中携带的逻辑地址段。若该逻辑地址段位于目标逻辑地址段(即60gb-100gb),lun-b可判断是否存在与该逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回应用服务器。若不存在,lun-b可向应用服务器返回读取错误提示消息。

若lun-b接收到的该读io请求中携带的逻辑地址段位于已写入地址段(即0gb-60gb),lun-b可向lun-a发送该读io请求。若在lun-a上,该读io请求携带的逻辑地址段对应的逻辑子空间可正常访问,lun-a可读取该读io请求对应的数据,并将该数据返回lun-b,以由lun-b将读取到的数据返回应用服务器。若在lun-a上,该读io请求携带的逻辑地址段对应的逻辑子空间访问故障,lun-a可向lun-b返回读取错误提示消息,以由lun-b将读取错误提示消息返回应用服务器。

若lun-a接收到读io请求,lun-a可获取该读io请求携带的逻辑地址段。若该逻辑地址段位于已写入逻辑地址段,lun-a可读取该读io请求对应的数据。若在lun-a上,该读io请求携带的逻辑地址段对应的逻辑子空间可正常访问,lun-a可读取到该读io请求对应的数据,并将该数据返回应用服务器。若在在lun-a上,该读io请求携带的逻辑地址段对应的逻辑子空间访问故障,lun-a可向应用服务器返回读取错误提示消息。

若lun-a接收到读io请求的逻辑地址段位于目标逻辑地址段,lun-a可将该读io请求转发给lun-b。lun-b可判断是否存在与该读io请求携带的逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回lun-a,以由lun-a将读取到的数据返回应用服务器。若不存在,lun-b可向lun-a返回读取错误提示消息,以由lun-a向应用服务器返回读取错误提示消息。在lun-a检测到自身故障恢复时,可向lun-b发送数据同步指令。lun-b在接收到该数据同步指令后,可将逻辑子空间2的数据同步标识位取值置为1,然后基于该数据同步标识位1,将已写入的数据同步至逻辑子空间2′。

在数据同步过程中,若lun-b接收到写io请求,lun-b可将该写io请求携带的数据写入逻辑子空间2中,并将该数据同步至逻辑子空间2′。

若lun-a接收到写io请求,lun-a可将该写io请求转发至lun-b,lun-b可将该写io请求携带的数据写入逻辑子空间2中,并将该数据同步至逻辑子空间2′。

在数据同步过程中,若lun-b接收到的读io请求携带的逻辑地址段位于目标逻辑地址段(即60gb-100gb),lun-b可判断是否存在于该逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回应用服务器。若不存在,lun-b可向应用服务器返回读取错误提示消息。

若该读io请求中携带的逻辑地址段位于已写入地址段(即0gb-60gb),lun-b可向lun-a发送该读io请求。lun-a可读取该读io请求对应的数据,并将该数据返回lun-b,以由lun-b将读取到的数据返回应用服务器。

在数据同步的过程中,若lun-a接收到的读io请求携带的逻辑地址段位于目标逻辑地址段(即60gb-100gb),lun-a可将该读io请求转发给lun-b。lun-b可判断是否存在该读io请求携带的逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回lun-a,以由lun-a将读取到的数据返回应用服务器。若不存在,lun-b可向lun-a返回读取错误提示消息,以由lun-a向应用服务器返回读取错误提示消息。

若lun-a接收到的读io请求携带的逻辑地址段位于已写入逻辑地址段(即0gb-60gb),lun-a可读取该读io请求对应的数据,并将该数据返回应用服务器。

在数据同步完成后,lun-b可将逻辑子空间2的状态标识由3修改为2,使得其从临时主状态转换为从状态,并释放lun-b所占用的物理空间,同时关闭自动扩容机制。lun-b可将逻辑子空间1和逻辑子空间2进行合并,恢复原有的从lun存储单元的状态。

lun-b向lun-a发送恢复指令,lun-a在接收到该恢复指令后,可将逻辑子空间2′的状态标识由4修改为1,使得逻辑子空间2′由临时从状态转换主状态,并合并逻辑子空间1′和逻辑子空间2′,以恢复原有的主lun存储单元的状态。

2)针对设备a故障

设备b可通过与设备a之间的心跳报文检测设备a是否故障。当设备b检测到设备a故障后,设备b可通过本地记录的与设备a中的作为主lun存储单元对应的从lun存储单元对应关系等,查找与lun-a对应的lun-b。然后设备b可向lun-b发送状态转换指令。

lun-b在接收到该状态转换指令后,可将lun-b添加待反转标识。当添加待反转标识后,接收到第一个写io请求后,可基于该写io请求中携带的逻辑地址,对lun-b的逻辑空间进行划分。

假设写io请求携带的逻辑地址为60gb,假设划分为两段。假设lun-a与lun-b对应的逻辑地址段均为0gb-100gb。则lun-b可基于60gb的逻辑地址,将lun-b的逻辑地址段划分为0gb-60gb和60gb-100gb两个地址段,这里将0gb-60gb和60gb-100gb两个地址段对应的逻辑子空间即为逻辑子空间1和逻辑子空间2。lun-b可将以地址段起始地址大于等于该写io请求中的逻辑地址的地址段作为目标地址段,在此例中,60gb-100gb为上文所述目标地址段。该目标地址段对应的逻辑子空间2为上文所述的目标逻辑子空间。

lun-b可将该逻辑子空间2的状态标识由2修改为3,使得该目标逻辑子空间由从状态转换为临时主状态,并将逻辑子空间的数据同步标识的取值修改为0。lun-b可清除待反转标识。同时,lun-b可为该目标逻辑子空间开启扩容机制。此时,逻辑子空间1仍为从状态。

在lun-b接收到写io请求后,可将该写io请求携带的数据写入该逻辑子空间2中,并基于数据同步标识为0,不将写入的数据同步至逻辑子空间2′。

若lun-b接收到读io请求,lun-b可获取该读io请求中携带的逻辑地址段。若该逻辑地址段位于目标逻辑地址段(即60gb-100gb),lun-b可判断是否存在于该逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回应用服务器。若不存在,lun-b可向应用服务器返回读取错误提示消息。

若该读io请求中携带的逻辑地址段位于已写入地址段(即0gb-60gb),lun-b向应用服务器返回读取错误提示消息。

当设备b检测到设备a故障恢复时,lun-b可与lun-a进行各个逻辑子空间的状态协商。

例如,lun-b可将逻辑子空间1和逻辑子空间2所对应逻辑地址段及其状态通知给lun-a,lun-a基于该通知,可将本地的逻辑空间划分为逻辑子空间1′和逻辑子空间2′,其对应的逻辑地址段分别为0gb-60gb和60gb-100gb。lun-a可将逻辑子空间2′的状态标识设置为4,使得其为临时从状态,并将逻辑子空间1′的状态标识设置为1,使得其为主状态。然后lun-a可向lun-b发送数据同步指令。

lun-b在接收到该数据同步指令后,可将逻辑子空间2的数据同步标识修改为1,然后基于该数据同步标识为1,将已写入的数据同步至逻辑子空间2′。

在数据同步过程中,若lun-b接收到写io请求,lun-b可将该写io请求携带的数据写入逻辑子空间2中,并将该数据同步至逻辑子空间2′。

若lun-a接收到写io请求,lun-a可将该写io请求转发至lun-b,lun-b可将该写io请求携带的数据写入逻辑子空间2中,并将该数据同步至逻辑子空间2′。

在数据同步过程中,若lun-b接收到的读io请求携带的逻辑地址段位于目标逻辑地址段(即60gb-100gb),lun-b可判断是否存在于该逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回应用服务器。若不存在,lun-b可向应用服务器返回读取错误提示消息。

若该读io请求中携带的逻辑地址段位于已写入地址段(即0gb-60gb),lun-b可向lun-a发送该读io请求。lun-a可读取该读io请求对应的数据,并将该数据返回lun-b,以由lun-b将读取到的数据返回应用服务器。

在数据同步的过程中,若lun-a接收到的读io请求携带的逻辑地址段位于目标逻辑地址段(即60gb-100gb),lun-a可将该读io请求转发给lun-b。lun-b可判断是否存在该读io请求携带的逻辑地址段对应的逻辑地址映射记录。若存在,lun-b可读取该读io请求对应的数据,并将读取到的数据返回lun-a,以由lun-a将读取到的数据返回应用服务器。若不存在,lun-b可向lun-a返回读取错误提示消息,以由lun-a向应用服务器返回读取错误提示消息。

若lun-a接收到的读io请求携带的逻辑地址段位于已写入逻辑地址段(即0gb-60gb),lun-a可读取该读io请求对应的数据,并将该数据返回应用服务器。在数据同步完成后,lun-b可将逻辑子空间2的状态标识由3修改为2,使得其从临时主状态转换为从状态,并释放lun-b所占用的物理空间,同时关闭自动扩容机制。lun-b可将逻辑子空间1和逻辑子空间2进行合并,恢复原有的从lun存储单元的状态。

lun-b向lun-a发送恢复指令,lun-a在接收到该恢复指令后,可将逻辑子空间2′的状态标识由4修改为1,使得逻辑子空间2′由临时从状态转换主状态,并合并逻辑子空间1′和逻辑子空间2′,以恢复原有的主lun存储单元的状态。

本申请提出一种数据保护方法,该方法可应用于双活存储系统。

在接收到应用服务器下发的写io请求时,该双活存储系统中的主lun存储单元处理该写io请求,并不将该写io请求中携带的数据同步至从lun存储单元。

该双活存储系统中的从lun存储单元被配置为thin-lun存储单元,在所述主lun存储单元或者所述主lun存储单元所在存储设备故障后,从lun存储单元可基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间,并将该目标逻辑子空间的状态转换为临时主状态,为所述目标逻辑子空间开启自动扩容机制,并将所述写io请求携带的数据写入该目标逻辑子空间,且不执行数据同步。在故障恢复后,从lun存储单元触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步,并在同步完成后,释放该目标逻辑子空间所占用的物理空间,并恢复本lun存储单元和所述主lun存储单元。

一方面,由于在主lun存储单元或者其所在存储设备正常时,双活存储系统中只保存一份写io请求携带的数据,而在主lun存储单元或者其所在存储设备故障恢复后同步数据的过程中,双活存储系统才保存两份写io请求携带的数据,采用这种数据保护机制既可以尽量减少正常时保存两份数据导致的硬件成本和硬件维护复杂度以及额外的io响应时间,还可实现在主lun存储单元或其所在存储设备故障时,写io的正常写入,以及故障恢复后的主lun存储单元的数据恢复。

另一方面,主lun存储单元和从lun存储单元的逻辑空间被划分为若干个逻辑子空间,每个逻辑子空间对应有双活状态。这种基于逻辑子空间来管理lun双活状态机制,可以使得在主lun存储单元或者其所在存储设备故障后,针对写io请求,继续写入从lun存储单元中临时主状态的目标逻辑子空间,使得写io请求被成功处理;同时,针对读io请求,只要主lun存储单元中主状态的逻辑子空间可以被访问,则可实时读取数据,从而解决了从lun存储单元上未写入数据的空间不能读取数据,必须等待主lun存储单元或者其所在存储设备恢复且数据同步完成后才能读取数据的问题。

第三方面,从lun存储单元被配置为thin-lun存储单元,该从lun存储单元中的目标逻辑子空间在变为临时主状态后,可开启自动扩容机制,采用这种按需申请存储空间的方式来扩大存储容量,在故障恢复,该临时主状态的目标逻辑子空间执行数据同步后,可释放该目标逻辑子空间所占用的存储空间。采用这种机制既可以尽量降低从lun存储单元对存储空间的要求,减少存储空间的浪费,提高存储空间的利用率,还可以快速找到待同步数据,提高数据同步的效率。

与前述数据保护方法的实施例相对应,本申请还提供了数据保护装置的实施例。

本申请数据保护装置的实施例可以应用在存储设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在存储设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请数据保护装置所在存储设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及存储介质之外,实施例中装置所在的存储设备通常根据该存储设备的实际功能,还可以包括其他硬件,对此不再赘述。

上述存储设备的处理器可调用存储介质中储存的与上述数据保护逻辑对应的机器可执行指令,来执行上述数据保护方法。

请参考图5,图5是本申请一示例性实施例示出的一种数据保护装置的框图。所述装置应用于顺序写模式下的双活存储系统中的从逻辑单元号lun存储单元,所述双活存储系统还包括主lun存储单元;所述双活存储系统在接收写io请求后,由该双活存储系统中的主lun存储单元处理该写io请求,且该主lun存储单元不将该写io请求中的数据同步至所述从lun存储单元;所述从lun存储单元被预配置为瘦逻辑单元号thin-lun存储单元。

从功能上划分,上述数据保护逻辑可为该数据保护装置,可包括确定单元510、转换单元520、同步单元530和恢复单元540。

其中,上述确定单元510,在所述主lun存储单元或者所述主lun存储单元所在存储设备故障后,基于故障后接收到的写io请求中携带的逻辑地址,确定本lun存储单元上的目标逻辑子空间;其中,所述目标逻辑子空间对应的目标逻辑地址段的起始逻辑地址大于等于所述写io请求中携带的逻辑地址;

转换单元520,将所述目标逻辑子空间的状态转换为临时主状态,为所述目标逻辑子空间开启自动扩容机制,并将所述写io请求携带的数据写入该目标逻辑子空间,且不执行数据同步;

同步单元530,在故障恢复后,触发所述目标逻辑子空间和转换为临时从状态的与所述目标逻辑地址段对应的位于所述主lun存储单元中的逻辑子空间的数据同步;

恢复单元540,用于在同步完成后,释放该目标逻辑子空间所占用的物理空间,并恢复本lun存储单元和所述主lun存储单元。

在一种可选的实现方式中,上述确定单元510,具体用于基于预设的划分规则,将所述本lun存储单元对应的逻辑空间划分为若干逻辑子空间,使得在所述若干逻辑子空间对应的若干逻辑地址段中,至少包括起始逻辑地址大于等于所述写io请求中携带的逻辑地址的目标逻辑地址段;将所述目标逻辑地址段对应的逻辑子空间确定为目标逻辑子空间。

在另一种可选的实现方式中,所述若干逻辑地址段至少包括结束逻辑地址小于所述写io请求中携带的逻辑地址的已写入逻辑地址段;所述已写入逻辑地址段对应的主lun存储单元上的逻辑子空间的状态为主状态;所述已写入逻辑地址段对应的从lun存储单元上的逻辑子空间的状态为从状态;

所述装置还包括:

读取单元550,用于在接收到应用服务器下发的读io请求后,获取该读io请求携带的逻辑地址段;如果获取到的所述逻辑地址段在所述已写入逻辑地址段,向应用服务器返回读取错误提示消息;或者将所述读io请求转发给所述主lun存储单元,以使所述主lun存储单元基于所述读io请求中携带的逻辑地址,在所述已写入逻辑地址段对应的主状态的逻辑子空间中读取对应的数据,若读取到数据,则向所述从lun存储单元返回读取到的数据;若未读取到数据,则向所述从lun存储单元返回读取错误提示消息;在接收到所述主lun存储单元返回的所述数据或者所述读取错误提示消息后,将所述数据或者所述读取错误提示消息返回应用服务器。

在另一种可选的实现方式中,所述读取单元550,还用于在接收到应用服务器下发的读io请求后,获取该读io请求携带的逻辑地址段;如果获取到的所述逻辑地址段在所述目标逻辑地址段,判断是否存在与该逻辑地址段对应的逻辑地址映射记录;如果是,则在该临时主状态的目标逻辑子空间读取该读io请求对应的数据,并将读取到的该数据返回应用服务器;如果否,则向应用服务器返回读取错误提示信息。

在另一种可选的实现方式中,所述主lun存储单元在接收到读io请求后,若该读io请求携带的逻辑地址段在所述已写入地址段,则读取该读io请求对应的数据,若能读取到数据,将读取到的数据返回应用服务器;若不能读取到数据,向应用服务器返回读取错误提示消息。

在另一种可选的实现方式中,所述主lun存储单元在接收到读io请求后,若该读io请求携带的逻辑地址段在目标逻辑地址段,则将该读io请求转发至所述从lun存储单元,以由从lun存储单元判断是否存在与该逻辑地址段对应的逻辑地址映射记录,如果存在,由从lun存储单元在临时主状态的目标逻辑子空间中读取数据,并将该读取到的数据返回主lun存储单元,由主lun存储单元将该数据返回应用服务器,如果不存在,所述从lun存储单元向所述主lun存储单元返回读取错误提示消息,由所述主lun存储单元将该读取错误提示消息返回应用服务器。

在另一种可选的实现方式中,所述恢复单元540,具体用于将所述临时主状态的目标逻辑子空间转换为从状态,并将本lun存储单元上的划分出的若干连续的从状态的逻辑子空间进行合并;以及,通知所述主lun存储单元上的临时从状态的逻辑子空间转换为主状态,以使所述主lun存储单元将其上划分出的若干连续的主状态的逻辑子空间进行合并。

在另一种可选的实现方式中,如果所述逻辑子空间的初始容量为零,该逻辑子空间的自动扩容机制为关闭状态;

所述装置还包括:关闭单元560,用于在将所述临时主状态的目标逻辑子空间转换为从状态之后,关闭所述自动扩容机制。

在另一种可选的实现方式中,在所述主lun存储单元故障时,所述主lun存储单元在接收到所述临时主lun存储单元发送的局部状态转换通知后,基于该局部状态转换通知中携带的所述写io请求中的逻辑地址,确定该主lun存储单元上的与所述目标逻辑地址段对应的逻辑子空间,并将该逻辑子空间的状态转换为临时从状态。

在另一种可选的实现方式中,在所述主lun存储单元所在存储设备故障时,所述主lun存储单元在该主lun存储单元所在存储设备的故障恢复后,基于与所述临时主lun存储单元针对各个逻辑子空间状态的协商结果,分别更新该主lun存储单元上的各个逻辑子空间的状态,以使所述主lun存储单元上的与所述目标逻辑地址对应的逻辑子空间的状态更新为临时从状态。

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

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

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

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