本发明涉及通信领域,具体而言,涉及一种数据读写方法及装置。
背景技术:
相关技术中的容灾解决方案一般是单一的数据中心,数据中心内的存储由存储磁阵提供服务。存储磁阵由存储控制器和磁盘两部分构成。其中,存储控制器为双控,存储控制器后端为双控可见的若干磁盘,当一个存储控制器节点故障后,双控另一节点自动接管达到抗击单点存储控制器故障的目的。通过异步备份的方式备份到另一个地点,以实现异地数据容灾。这种方式一旦数据中心的磁阵特别是磁盘发生灾难损坏,只能依靠上述的异步备份来恢复,异步恢复的时间长并且数据非实时同步备份会有部分数据丢失。相关技术中的另外一种解决方法是设置两个数据中心,主数据中心数据实时备份到备用数据中心,但是备用数据中心不能提供服务,灾难发生后需要手动切换到备用数据中心,恢复时间无法满足不断业务的需求。主备模式下,备用站点无法提供服务,造成资源浪费,并且用户的数据需要两数据中心都成功写入,每秒进行读写操作的次数(input/outputoperationspersecond,简称为iops)会有一定的下降。
针对相关技术中存在的资源浪费以及数据读写效率低的问题,目前尚未提出有效的解决方案。
技术实现要素:
本发明提供了一种数据读写方法及装置,以至少解决相关技术中存在的资源浪费以及数据读写效率低的问题。
根据本发明的一个方面,提供了一种数据读写方法,包括:确定两个以上用于数据读写的存储磁阵;利用所述两个以上的存储磁阵进行数据读写。
可选地,在上述两个以上的存储磁阵为两个存储磁阵的情况下,利用上述两个以上的存储磁阵进行数据读写包括:接收用于请求写入第一预定数据的数据写请求;依据所述数据写请求,将所述第一预定数据写入所述两个存储磁阵。
可选地,将上述第一预定数据写入所述两个存储磁阵包括:确定所述两个存储磁阵中第一存储磁阵写数据成功,第二存储磁阵写数据失败;记录用于存储所述第一预定数据的所述两个存储磁阵中相同的存储块;在所述第二存储磁阵恢复正常的情况下,依据所述相同的存储块,将所述第一存储磁阵写入成功的数据镜像同步到所述第二存储磁阵中。
可选地,在确定所述两个存储磁阵中第一存储磁阵写数据成功,所述第二存储磁阵写数据失败之后,还包括:停止向所述第二存储磁阵写入所述第一预定数据。
可选地,记录用于存储所述第一预定数据的所述两个存储磁阵中相同的所述存储块包括:利用位图bitmap标识的方式记录所述存储块,和/或,通过日志记录的方式记录所述存储块。
可选地,利用上述两个以上的存储磁阵进行数据读写包括:接收用于请求读取第二预定数据的数据读请求;接收所述两个以上的存储磁阵中的第三存储磁阵返回的所述第二预定数据中的部分数据和所述两个以上的存储磁阵中的第四存储磁阵返回的所述第二预定数据中除所述部分数据外的数据。
可选地,确定两个以上用于数据读写的存储磁阵包括:创建两个以上新的存储磁阵;或者,将已存在的预定存储磁阵升级为双活存储磁阵,其中,所述双活存储磁阵包括所述预定存储磁阵和复制所述预定存储磁阵后得到的复制存储磁阵。
根据本发明的另一方面,提供了一种数据读写装置,其特征在于,包括:确定模块,用于确定两个以上用于数据读写的存储磁阵;读写模块,用于利用所述两个以上的存储磁阵进行数据读写。
可选地,所述读写模块包括:第一接收单元,用于在所述两个以上的存储磁阵为两个存储磁阵的情况下,接收用于请求写入第一预定数据的数据写请求;写入单元,用于依据所述数据写请求,将所述第一预定数据写入所述两个存储磁阵。
可选地,所述写入单元包括:确定子单元,用于确定所述两个存储磁阵中第一存储磁阵写数据成功,第二存储磁阵写数据失败;记录子单元,用于记录用于存储所述第一预定数据的所述两个存储磁阵中相同的存储块;同步子单元,用于在所述第二存储磁阵恢复正常的情况下,依据所述相同的存储块,将所述第一存储磁阵写入成功的数据镜像同步到所述第二存储磁阵中。
可选地,所述写入单元还包括:停止子单元,用于在确定所述两个存储磁阵中第一存储磁阵写数据成功,所述第二存储磁阵写数据失败之后,停止向所述第二存储磁阵写入所述第一预定数据。
可选地,所述记录子单元通过如下方式记录用于存储所述第一预定数据的所述两个存储磁阵中相同的存储块:利用位图bitmap标识的方式记录所述存储块,和/或,通过日志记录的方式记录所述存储块。
可选地,所述读写模块包括:第二接收单元,用于接收用于请求读取第二预定数据的数据读请求;第三接收单元,用于接收所述两个以上的存储磁阵中的第三存储磁阵返回的所述第二预定数据中的部分数据和所述两个以上的存储磁阵中的第四存储磁阵返回的所述第二预定数据中除所述部分数据外的数据。
可选地,所述确定模块包括:创建单元,用于创建两个以上新的存储磁阵;或者,升级单元,用于将已存在的预定存储磁阵升级为双活存储磁阵,其中,所述双活存储磁阵包括所述预定存储磁阵和复制所述预定存储磁阵后得到的复制存储磁阵。
通过本发明,采用确定两个以上用于数据读写的存储磁阵;利用所述两个以上的存储磁阵进行数据读写,解决了相关技术中存在的资源浪费以及数据读写效率低的问题,进而达到了避免资源浪费以及提高数据读写效率的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的数据读写方法的流程图;
图2是根据本发明实施例的数据读写装置的结构框图;
图3是根据本发明实施例的数据读写装置中读写模块24的结构框图一;
图4是根据本发明实施例的数据读写装置中写入单元34的结构框图;
图5是根据本发明实施例的数据读写装置中写入单元34的优选结构框图;
图6是根据本发明实施例的数据读写装置中读写模块24的结构框图二;
图7是根据本发明实施例的数据读写装置中确定模块22的结构框图;
图8是根据本发明实施例的整体双活系统结构框图;
图9是根据本发明实施例的双活lun的创建,双活数据分发以及异常处理的流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
在本实施例中提供了一种数据读写方法,图1是根据本发明实施例的数据读写方法的流程图,如图1所示,该流程包括如下步骤:
步骤s102,确定两个以上用于数据读写的存储磁阵;
步骤s104,利用该两个以上的存储磁阵进行数据读写。
通过上述方法,利用两个以上存储磁阵进行数据读写,可以在保证各存储磁阵互为备份的前提下,提高各存储磁阵的资源效率,并且,利用多个存储磁阵提供数据读写服务还可以提高数据读写的效率,从而解决了相关技术中存在的资源浪费以及数据读写效率低的问题,进而达到了避免资源浪费以及提高数据读写效率的效果。
在一个可选的实施例中,在上述两个以上的存储磁阵为两个存储磁阵的情况下,利用上述两个以上的存储磁阵进行数据读写包括:接收用于请求写入第一预定数据的数据写请求;依据该数据写请求,将第一预定数据写入上述两个存储磁阵。
在一个可选的实施例中,在将上述第一预定数据写入上述两个存储磁阵包括:确定两个存储磁阵中第一存储磁阵写数据成功,第二存储磁阵写数据失败;记录用于存储该第一预定数据的两个存储磁阵中相同的存储块;在该第二存储磁阵恢复正常的情况下,依据上述相同的存储块,将第一存储磁阵写入成功的数据镜像同步到第二存储磁阵中。通过该实施例,可以保证两个存储磁阵中的数据始终一致,从而可以在一个存储磁阵发生故障后,由另一个存储磁阵提供数据读写服务,保证业务的正常进行。
在一个可选的实施例中,在确定上述两个存储磁阵中第一存储磁阵写数据成功,第二存储磁阵写数据失败之后,还包括:停止向第二存储磁阵写入第一预定数据。即,当第二存储磁阵中无法成功写入数据后,说明该第二存储磁阵可能出现了故障,或者可能是当前用于写入数据的磁盘出现了故障,而导致第二存储磁阵无法提供正常的数据读写服务,此时可以将该第二存储磁阵置于不可用状态,等第二存储磁阵恢复正常后,再利用该第二存储磁阵进行数据读写服务。从而有效保证了数据读写的正确率。
在一个可选的实施例中,记录用于存储上述第一预定数据的两个存储磁阵中相同的存储块包括:利用位图bitmap标识的方式记录上述存储块,和/或,通过日志记录的方式记录上述存储块。当然,上述的存储方式仅是两种示例,还可以采用其他的方式记录,在此,不一一列举。
在一个可选的实施例中,利用上述两个以上的存储磁阵进行数据读写包括:接收用于请求读取第二预定数据的数据读请求;接收上述两个以上的存储磁阵中的第三存储磁阵返回的上述第二预定数据中的部分数据和上述两个以上的存储磁阵中的第四存储磁阵返回的上述第二预定数据中除上述部分数据外的数据。其中,上述的第三存储磁阵可以是一个或多个,上述的第四存储磁阵也可以是一个或多个,通过上述的第三存储磁阵和第四存储磁阵同时提供数据读服务,可以提高数据读取效率,节省数据读取时间。
上述的确定存储磁阵的方式有多种,在一个可选的实施例中,确定两个以上用于数据读写的存储磁阵包括:创建两个以上新的存储磁阵;或者,将已存在的预定存储磁阵升级为双活存储磁阵,其中,该双活存储磁阵包括上述预定存储磁阵和复制该预定存储磁阵后得到的复制存储磁阵。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种数据读写装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图2是根据本发明实施例的数据读写装置的结构框图,如图2所示,该装置包括确定模块22和读写模块24,下面对该装置进行说明。
确定模块22,用于确定两个以上用于数据读写的存储磁阵;读写模块24,连接至上述确定模块22,用于利用上述两个以上的存储磁阵进行数据读写。
图3是根据本发明实施例的数据读写装置中读写模块24的结构框图一,如图3所示,该读写模块24包括第一接收单元32和写入单元34,下面对该读写模块24进行说明。
第一接收单元32,用于在上述两个以上的存储磁阵为两个存储磁阵的情况下,接收用于请求写入第一预定数据的数据写请求;写入单元34,连接至上述第一接收单元32,用于依据上述数据写请求,将第一预定数据写入两个存储磁阵。
图4是根据本发明实施例的数据读写装置中写入单元34的结构框图,如图4所示,该写入单元34包括确定子单元42、记录子单元44和同步子单元46,下面对该写入单元34进行说明。
确定子单元42,用于确定两个存储磁阵中第一存储磁阵写数据成功,第二存储磁阵写数据失败;记录子单元44,连接至上述确定子单元42,用于记录用于存储上述第一预定数据的两个存储磁阵中相同的存储块;同步子单元46,连接至上述记录子单元44,用于在上述第二存储磁阵恢复正常的情况下,依据上述相同的存储块,将第一存储磁阵写入成功的数据镜像同步到上述第二存储磁阵中。
图5是根据本发明实施例的数据读写装置中写入单元34的优选结构框图,如图5所示,该写入单元34除包括图4所示的单元外,还包括停止子单元52,下面对该写入单元34进行说明。
停止子单元52,连接至上述确定子单元42,用于在确定上述两个存储磁阵中第一存储磁阵写数据成功,第二存储磁阵写数据失败之后,停止向第二存储磁阵写入上述第一预定数据。
在一个可选的实施例中,上述记录子单元44可以通过如下方式记录用于存储第一预定数据的两个存储磁阵中相同的存储块:利用位图bitmap标识的方式记录上述存储块,和/或,通过日志记录的方式记录上述存储块。
图6是根据本发明实施例的数据读写装置中读写模块24的结构框图二,如图6所示,该读写模块24包括第二接收单元62和第三接收单元64,下面对该读写模块24进行说明。
第二接收单元62,用于接收用于请求读取第二预定数据的数据读请求;第三接收单元64,连接至上述第二接收单元62,用于接收上述两个以上的存储磁阵中的第三存储磁阵返回的第二预定数据中的部分数据和上述两个以上的存储磁阵中的第四存储磁阵返回的第二预定数据中除上述部分数据外的数据。
图7是根据本发明实施例的数据读写装置中确定模块22的结构框图,如图7所示,该确定模块22包括创建单元72或者升级单元74,下面对该确定模块22进行说明。
创建单元72,用于创建两个以上新的存储磁阵;
升级单元74,用于将已存在的预定存储磁阵升级为双活存储磁阵,其中,该双活存储磁阵包括上述预定存储磁阵和复制该预定存储磁阵后得到的复制存储磁阵。
下面以两个存储磁阵为例,对本发明进行说明:
在本发明实施例中提出了一种两个数据中心(每个数据中心中均包括一个存储磁阵)可以同时提供业务服务,由于同时可以接入,通过负载均衡机制效率得到较大提升,通过同步镜像技术,数据中心数据完全实时一致,并且站点资源可以互相接管,无论是出现单点磁阵控制器故障还是磁盘故障都不会对用户业务造成中断。
为达到上述目的,本发明实施例中提供了一种两地双活存储系统,该系统包括两个数据中心。其中,每个数据中心包括一套存储磁阵以及光纤交换机若干。存储磁阵由双控存储控制器和磁盘构成。其中双控存储控制器是两个高可用可互相接管的单板组成,每个单板为一个节点。两个数据中心可以使用光纤连接,并且每个存储磁阵的两个双控存储控制器组成集群,形成双活的控制器主体。为了保证系统的可靠性,集群需要一个仲裁设备,以防止集群通信异常后发生脑裂造成的资源争抢问题。下面对该系统中的各部分进行说明:
存储磁阵,在双活存储系统中,是存储用户数据的主体。存储磁阵对用户通过小型计算机系统接口(internetsmallcomputersysteminterface,简称为iscsi)或者光纤通道(fibrechannel,简称为fc)提供逻辑单元号(logicalunitnumbe,简称为lun)访问服务。两地存储磁阵中的双活存储控制器构成一个集群。存储控制器用于双活的核心控制设备,负责双活集群管理,以及卷管理,以及同步镜像实现。
光纤交换机,两地的双活存储控制器的用户接入前端以及内部数据传输的后端网络的连接都使用光纤,以达到低延时目的。
仲裁设备,通常仲裁设备放在第三地点,可以是一个仲裁服务器来进行投票决定集群中的成员哪些可以继续提供服务。也可以使一个以ip网络构建的存储网络ipsan设备,通过资源争抢,占用多数资源者继续提供服务。
在本发明实施例中提供了一种两地双活存储系统及实现方法,其中,系统中存储两个真实的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的用户访问服务,每,以提高系统利用率,提升iops。存储磁阵接收到用户的写请求时,进行主副lun的同时分发,并且只要都成功才会返回用户成功,保证主副lun的数据实时一致。
当用户写主副lun发生异常后,例如写副lun失败,则用户的写当次写操作就会记录下来,可以使用bitmap来标识当前写的是哪个块,也可以将此操作记录日志。并标识副lun不可用,避免读取副lun造成数据错误。后续异常排除后,系统触发进行副lun数据的恢复,同步镜像模块就开始重放bitmap,将bitmap中标识的被更改的块从主lun中读取出来并写到副lun中,最终主副lun的数据会达到一致,副lun开始提供服务。如果是采用记录日志的方式,同样的将日志重放完后,主副lun的数据达到一致,副lun开始提供服务。
当用户写操作发生异常后,会有集群决策模块(同上述的写入单元34)来决策本次写操作的操作结果以及更改主副lun的可用状态,以避免集群多节点间的得到的信息不能严格实时一致的问题。集群决策模块可以通过集群事务的方式,来达到集群间的操作更改一致,当多个集群成员同时发生错误时,通过这种机制可以有效做到错误通知顺序被集群决策模块执行,各个错误的处理时,都能及时得到正确的信息。
为避免集群通道网络异常引起的脑裂问题,还需要一个第三方仲裁设备,可以是一个ipsan设备,通过争抢此设备的方式决定可以继续提供服务的节点,也可以是一个仲裁服务器进行投票决定继续提供服务的节点。
图8是根据本发明实施例的整体双活系统结构框图,如图8所示,整个双活系统时部署在两个数据中心,分别是数据中心a和数据中心b。每个数据中心包括若干实体,例如数据中心a中,包含用户a以及用户a工作的用户服务器a(同上述的第一接收单元32和第二接收单元62、第三接收单元64)。用户服务器a通过光纤以及fc交换机连接到存储磁阵a上。存储磁阵a包括双控存储控制器a(同上述的写入单元34),双控存储控制器a连接磁盘a,磁盘a是指若干块磁盘的总体。
如图8所示,两个数据中心的用户服务器a和用户服务器b通过fc交换机相互连通,并且数据中心a和数据中心b的双控存储控制器对用户的接入网络通过fc交换机是相互连通的。数据中心的两个双控存储控制器的后端网络用于内部数据的传送,如本专利中的同步镜像通道,也使用fc交换机连通。两个数据中心需要有集群通道进行集群消息以及心跳检测。另外,集群间还需要一个第三方仲裁,防止集群通道发生异常后产生的脑裂问题。
图9是根据本发明实施例的双活lun的创建,双活数据分发以及异常处理的流程图,如图9所示,该流程包括如下步骤:
步骤s901:用户发起创建一个双活lun或将一个lun升级为双活lun。
本发明实施例中双活lun保护两个对象主lun和副lun。对用户呈现用户看到的双活lun就是主lun。副lun不对外呈现。
步骤s902:如果是创建一个双活lun,则两地的存储磁阵分别新建主lun和副lun的请求。如果是将lun升级为双活,则是将该lun变成主lun,并向另一个数据中心的存储磁阵发起创建副lun的请求。对用户呈现的是主lun。
步骤s903:在后台,同步镜像模块将主lun的数据全部复制到副lun上,此时主副lun数据完全一致,副lun开始提供访问。
双活lun创建后,如果是新创建的双活lun,则说明主副lun没有数据,都可以立即提供访问。如果是将lun升级为双活,则主lun可能会有数据,只能通过后台将主lun的数据都镜像到副lun上,等数据完全一致后,副lun可以提供访问。
步骤s904:双活存储系统的各个节点都可以提供服务,并且写io会同时分发给主副lun。
经过步骤s903后,用户的写请求的io会同时分发给主副lun,以达到主副lun数据完全一致的效果。
步骤s905:返回给用户写成功,继续等待用户的读写请求。
如果步骤s904中写io同时分发给主副lun后,如果主副lun都返回写成功,则返回给用户写成功,继续等待用户的读写请求。这样就保证主副lun数据是实时一致。下一次用户io请求则跟步骤s904一样,如果用户io主副lun都写成功,则整个双活系统健康的持续下去。
步骤s906:如果都写失败,返回用户失败,如果有一个成功,则通知集群决策模块,集群决策将写失败的lun置为不可用。如副lun写失败,置副lun不可用。
当用户写操作发生异常后,需要通知双活系统的集群决策模块,决策模块将写失败的lun置为不可用。集群决策模块可以通过集群事务的方式,来达到集群间的操作更改一致,当多个集群成员同时发生错误时,通过这种机制可以有效做到错误通知顺序被集群决策模块执行,各个错误的处理时,都能及时得到正确的信息。
步骤s907:系统用bitmap来标识本次更改的数据块,或者用日志记录本次更改的信息。
用户的写当次写操作就会记录下来,例如写副lun失败,则可以使用bitmap来标识当前写的是哪个块,也可以将此操作记录日志。为后续副lun的数据恢复做基础。
步骤s908:后续副lun的写入可以恢复后,系统更加失败时的记录信息进行回放,将主lun中的数据镜像到副lun,直至全部完成。副lun可以继续提供服务。
经过s908步骤后,双活系统的主副lun又可以继续提供服务,下次用户的写请求io下发时,就会跟步骤s904一样,无论是s904步骤正常写入还是异常,都会得到正确处理,并最终回到主副lun都可以提供服务的状态,保证整个系统中出现单点故障时,不影响用户的访问。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
s1,确定两个以上用于数据读写的存储磁阵;
s2,利用该两个以上的存储磁阵进行数据读写。
可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述的步骤s1-s2。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。