CN107133132B - 数据发送方法、数据接收方法和存储设备 - Google Patents
数据发送方法、数据接收方法和存储设备 Download PDFInfo
- Publication number
- CN107133132B CN107133132B CN201710215599.4A CN201710215599A CN107133132B CN 107133132 B CN107133132 B CN 107133132B CN 201710215599 A CN201710215599 A CN 201710215599A CN 107133132 B CN107133132 B CN 107133132B
- Authority
- CN
- China
- Prior art keywords
- data
- storage device
- written
- current time
- time slice
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2094—Redundant storage or storage space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2097—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供了一种数据发送方法、接收方法和存储设备,包括:第一存储设备接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息;将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号;从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息;修改所述当前时间片编号以标识后续写数据请求携带的信息;将所述待写入数据和地址信息发送给第二存储设备。可以提高数据复制的效率。
Description
本申请要求于2013年7月26日提交中国专利局、申请号为PCT/CN2013/080203、发明名称为“数据发送方法、数据接收方法和存储设备”的国际专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本发明涉及存储技术,尤其涉及一种数据发送方法、数据接收方法和存储设备。
背景技术
数据容灾,又称为远程数据复制技术,是指建立一个异地的数据***,该***是本地数据的一个可用复制。在本地数据及整个应用***出现灾难时,***至少在异地保存有一份可用的关键业务的数据。
典型的数据容灾***包括生产中心和灾备中心。在生产中心,部署有主机、存储阵列,用于正常的业务运行;在灾备中心,部署有主机、存储阵列,用于在生产中心发生灾难后,接管其业务。其中,生产中心或灾备中心的存储阵列均包含多个数据卷,数据卷是物理存储空间映射而成的一段逻辑存储空间。生产中心的业务产生的数据写入生产阵列后,可以经容灾链路复制到灾备中心,写入灾备阵列。为了保证灾难发生后,灾备中心的数据能够支撑业务接管,复制到灾备阵列的数据必须保证一致性(consistency)。保证数据一致性本质上是指,有依赖关系的写数据请求,该依赖关系需要得到保证。应用程序、操作***、数据库都内在地依靠这种写数据请求的依赖关系的逻辑来运行其业务,例如:先完成写数据请求1,再完成写数据请求2,顺序是固定的。也就是说,***会确保写数据请求1完全返回成功后,才会下发写数据请求2。由此,才能实现当出现故障导致执行过程中断时,可以依靠固有的办法来恢复业务。否则,可能会出现这样的情况,例如:在读取数据时,可以读到写数据请求2存储的数据,却读不到写数据请求1存储的数据,这将导致业务无法恢复。
在现有技术中,可以利用快照技术解决这个问题。快照是数据在某个时间点(拷贝开始的时间点)的映像。快照的目的是为数据卷创建一个在特定时间点的状态视图,通过这个视图只可以看到数据卷在创建时刻的数据,在此时间点之后数据卷的修改(有新的数据写入),不会反映在快照视图中。利用这个快照视图,就可以做数据的复制。对于生产中心而言,由于快照数据是“静止的”,因此生产中心可以在将各个时间点的数据增加快照之后,再将快照数据复制到灾备中心,既可以完成远程数据复制,也不会影响在生产中心继续执行写数据请求。对于灾备中心而言,也可以满足数据一致性的要求。例如,写数据请求2的数据成功复制到灾备中心,写数据请求1的数据没有成功复制,可以利用写数据请求2之前的快照数据,将灾备中心的数据恢复到之前的状态。
由于生产中心在执行写数据请求的时候要进行快照处理,将生成的快照数据保存在专门用于存储快照数据的数据卷中,因此生产中心在将快照数据复制到灾备中心时,需要先将数据卷中存储的快照数据读到缓存,然后再发送给灾备中心。然而,用于生成快照数据的数据可能还存在缓存中,但这部分数据不能被合理利用,每次复制都需要先到数据卷中读取快照数据,导致数据复制的时间较长,效率较低。
发明内容
本发明实施例提供了一种数据发送方法,可以直接从第一存储设备的缓存中将写数据请求携带的信息发送给第二存储设备,提高了数据复制的效率。
本发明实施例第一方面提供了一种数据发送方法,包括:
第一存储设备接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息;
将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号;
从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息;
修改所述当前时间片编号以标识后续写数据请求携带的信息;
将所述待写入数据和地址信息发送给第二存储设备。
在本发明实施例第一方面的第一种可能的实现方式中,所述第一编号用于标识当前的复制任务;所述方法还包括:
记录第二编号,所述第二编号是当前的复制任务之前,最近一次已完成的复制任务对应的编号。
结合本发明实施例第一方面的第一种实现方式,第一方面的第二种可能的实现方式还包括:
从所述缓存中读取所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息;
将所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息发送给所述第二存储设备。
本发明实施例第一方面的第三种可能的实现方式,还包括:记录当前时间片编号,所述当前时间片编号用于生成所述第一编号。
本发明实施例第二方面提供了一种数据接收方法,包括:
第二存储设备接收第一存储设备发送的地址信息;
当确定所述第一存储设备故障时,所述第二存储设备根据所述地址信息,获取第一编号对应的待写入数据,所述第一编号对应的地址信息与所述接收到的地址信息相同,所述第一编号为当前时间片编号之前的编号;
将所述第一编号对应的待写入数据和地址信息增加第二编号,写入缓存。
在本发明实施例第二方面的第一种可能的实现方式中,还包括:记录所述当前时间片编号,所述当前时间片编号用于生成所述第二编号。
在本发明实施例第二方面的第二种可能的实现方式中,还包括:
接收主机发送的读数据请求,所述读数据请求包含所述接收到的地址信息;
确定所述接收到的地址信息对应的最新的编号是所述第二编号;
将所述第二编号对应的待写入数据发送给所述主机。
本发明实施例第三方面提供了一种存储设备,包括:
接收模块,用于接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息;
读写模块,用于将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号;从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息;
当前时间片编号管理器,用于修改所述当前时间片编号以标识后续写数据请求携带的信息;
发送模块,用于将所述待写入数据和地址信息发送给第二存储设备。
在本发明实施例第三方面的第一种可能的实现方式中,所述第一编号用于标识当前的复制任务;
所述当前时间片编号管理器,还用于记录第二编号,所述第二编号是当前的复制任务之前,最近一次已完成的复制任务对应的编号。
结合本发明实施例第三方面的第一种实现方式,在第三方面的第二种可能的实现方式中:所述读写模块,还用于从所述缓存中读取所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息;
所述发送模块,还用于将所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息发送给所述第二存储设备。
在本发明实施例第三方面的第三种可能的实现方式中,所述当前时间片编号管理器,还用于记录当前时间片编号,所述当前时间片编号用于生成所述第一编号。
本发明实施例第四方面提供了一种存储设备,包括:
接收模块,用于接收第一存储设备发送的地址信息;
查找模块,用于当确定所述第一存储设备故障时,所述第二存储设备根据所述地址信息,获取第一编号对应的待写入数据,所述第一编号对应的地址信息与所述接收到的地址信息相同,所述第一编号为当前时间片编号之前的编号;
写入模块,用于将所述第一编号对应的待写入数据和地址信息增加第二编号,写入缓存。
在本发明实施例第四方面的第一种可能的实现方式中,还包括:
当前时间片编号管理器,用于记录所述当前时间片编号,所述当前时间片编号用于生成所述第二编号。
在本发明实施例第四方面的第二种可能的实现方式中,所述接收模块,还用于接收主机发送的读数据请求,所述读数据请求包含所述接收到的地址信息;
所述查找模块,还用于确定所述接收到的地址信息对应的最新的编号是所述第二编号;
所述存储设备还包括发送模块,所述发送模块用于将所述第二编号对应的待写入数据发送给所述主机。
本发明实施例第五方面提供了一种存储设备,包括:处理器、存储器和通信总线;
其中,所述处理器和所述存储器通过所述通信总线进行通信;
所述存储器用于保存程序;
所述处理器用于执行所述程序,以实现:
接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息;将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号;从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息;修改所述当前时间片编号以标识后续写数据请求携带的信息;将所述待写入数据和地址信息发送给第二存储设备。
在本发明实施例第五方面的第一种可能的实现方式中,所述第一编号用于标识当前的复制任务;所述处理器还用于:
记录第二编号,所述第二编号是当前的复制任务之前,最近一次已完成的复制任务对应的编号。
结合本发明实施例第五方面的第一种实现方式,在第五方面的第二种可能的实现方式中,所述处理器还用于:从所述缓存中读取所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息;将所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息发送给所述第二存储设备。
在本发明实施例第五方面的第三种可能的实现方式中,所述处理器还用于:记录当前时间片编号,所述当前时间片编号用于生成所述第一编号。
本发明实施例第六方面提供了一种存储设备,包括:处理器、存储器和通信总线;
其中,所述处理器和所述存储器通过所述通信总线进行通信;
所述存储器用于保存程序;
所述处理器用于执行所述程序,以实现:
接收第一存储设备发送的地址信息;
当确定所述第一存储设备故障时,所述第二存储设备根据所述地址信息,获取第一编号对应的待写入数据,所述第一编号对应的地址信息与所述接收到的地址信息相同,所述第一编号为当前时间片编号之前的编号;
将所述第一编号对应的待写入数据和地址信息增加第二编号,写入缓存。
在本发明实施例第六方面的第一种可能的实现方式中,所述处理器还用于记录所述当前时间片编号,所述当前时间片编号用于生成所述第二编号。
在本发明实施例第六方面的第二种可能的实现方式中,所述处理器还用于接收主机发送的读数据请求,所述读数据请求包含所述接收到的地址信息;确定所述接收到的地址信息对应的最新的编号是所述第二编号;将所述第二编号对应的待写入数据发送给所述主机。
本发明实施例第七方面提供了一种数据复制方法,包括:
当当前复制任务触发时第一存储设备读取当前时间片编号;
读取第二编号,所述第二编号是与所述当前复制任务相关联的、最近一次已完成的复制任务对应的编号;
根据所述当前时间片编号和所述第二编号,确定第一编号,所述第一编号是所述当前复制任务触发时的当前时间片编号之前的编号,并且所述第一编号是所述第二编号之后的编号;
将所述第一编号对应的缓存中保存的待复制数据和所述待复制数据的地址信息复制到第二存储设备。
在本发明实施例第七方面的第一种实施方式中,与所述当前复制任务相关联的复制任务是指与所述当前复制任务属于一个复制关系的复制任务;
当所述当前复制任务触发时还包括:接收所述复制关系对应的标识;
所述读取第二编号包括:
根据所述标识读取所述第二编号。
在本发明实施例第七方面的第二种实施方式中,在所述当前复制任务触发之前还包括:
接收第一写数据请求,所述第一写数据请求包括所述待复制数据和所述待复制数据的地址信息;
在所述待复制数据和所述待复制数据的地址信息中增加所述第一编号,写入所述缓存,所述第一编号为历史时间片编号。
结合本发明实施例第七方面的第二种实施方式,在本发明实施例第七方面的第三种实施方式中,所述当前时间片编号是由所述历史时间片编号修改而成的。
本发明实施例第八方面提供了一种存储设备,包括:
读写模块,用于当当前复制任务触发时读取当前时间片编号;以及读取第二编号,所述第二编号是与所述当前复制任务相关联的、最近一次已完成的复制任务对应的编号;
确定模块,用于根据所述当前时间片编号和所述第二编号,确定第一编号,所述第一编号是所述当前复制任务触发时的当前时间片编号之前的编号,并且所述第一编号是所述第二编号之后的编号;
复制模块,用于将所述第一编号对应的缓存中保存的待复制数据和所述待复制数据的地址信息复制到第二存储设备。
在本发明实施例第八方面的第一种实施方式中,与所述当前复制任务相关联的复制任务是指与所述当前复制任务属于一个复制关系的复制任务;
所述存储设备还包括:接收模块;
所述接收模块,用于接收所述复制关系对应的标识;
所述读写模块,具体用于根据所述标识读取所述第二编号。
在本发明实施例第八方面的第二种实施方式中,所述接收模块还用于在所述当前复制任务触发之前,接收第一写数据请求,所述第一写数据请求包括所述待复制数据和所述待复制数据的地址信息;
所述读写模块还用于:在所述待复制数据和所述待复制数据的地址信息中增加所述第一编号,写入所述缓存,所述第一编号为历史时间片编号。
结合本发明实施例第八方面的第二种实施方式,在本发明实施例第八方面的第三种实施方式中,所述当前时间片编号是由所述历史时间片编号修改而成的。
本发明实施例第九方面提供了一种存储设备,包括:处理器、存储器和通信总线;
其中,所述处理器和所述存储器通过所述通信总线进行通信;
所述存储器用于保存程序;
所述处理器用于执行所述程序,以实现:本发明实施例第七方面任一种实施方式所述的方法。
本发明实施例中,第一存储设备在接收主机发送的写数据请求后,所述写数据请求携带的信息包括待写入数据和地址信息,在待写入数据和地址信息中增加第一编号,写入缓存,第一编号为当前时间片编号,在复制任务触发时,从缓存中读取第一编号对应的待写入数据和地址信息,发送给第二存储设备,另外,在复制任务触发时,修改当前时间片编号,使得第一存储设备在后续接收写数据请求时,在其携带的信息中增加与修改后的当前时间片编号相同的编号,由此在缓存中将需要发送给第二存储设备的写数据请求携带的信息,与第一存储设备正在接收的写数据请求携带的信息区分开来,实现了直接从缓存中将写数据请求携带的信息发送给第二存储设备,由于信息是直接从缓存中发送的,不需要从数据卷中读取数据,因此数据复制的时间较短,提高了数据复制的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据发送方法的应用网络架构示意图;
图2为本发明实施例提供的一种数据发送方法的流程图;
图3为本发明实施例提供的一种数据接收方法的流程图;
图4为本发明实施例提供的一种数据发送方法的信令图;
图5为本发明实施例提供的一种存储设备的结构示意图;
图6为本发明实施例提供的另一种存储设备的结构示意图;
图7为本发明实施例提供的再一种存储设备的结构示意图;
图8为本发明实施例提供的又一种存储设备的结构示意图;
图9为本发明实施例提供的一种数据复制方法的应用网络架构示意图;
图10为本发明实施例提供的一种数据复制方法的流程图;
图11为本发明实施例提供的又一种存储设备的结构示意图;
图12为本发明实施例提供的又一种存储设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的数据发送方法可以在存储设备中实现。图1为本发明实施例提供的数据发送方法的***架构示意图,如图1所示,生产中心包括生产主机、连接设备和生产阵列(对应下面实施例的第一存储设备);灾备中心的***架构与生产中心类似,包括灾备主机、连接设备和灾备阵列(对应下面实施例的第二存储设备)。在本发明实施例中,灾备中心可以不止一个。其中,生产中心与灾备中心可以通过IP(Internet Protocol)或者FC(Fiber Chanel)进行数据传输。生产中心和灾备中心之间可以有一个控制中心,所述控制中心可以部署在生产中心侧,也可以部署在灾备中心侧,还可以部署在生产中心和灾备中心之间的第三方设备中。所述控制中心用于当生产阵列发生故障时,向灾备阵列发出信号让其接替生产阵列处理主机业务。
生产主机和灾备主机均可以是当前技术已知的任何计算设备,如服务器、台式计算机等等。在主机内部,安装有操作***以及其他应用程序。
连接设备可以包括当前技术已知的存储设备和主机之间的任何接口,如光纤交换机,或者其他现有的交换机。
生产阵列和灾备阵列均可以是当前技术已知的存储设备,如独立磁盘冗余阵列(Redundant Arrays of Inexpensive Disks,RAID)、磁盘簇(Just a Bunch Of Disks,JBOD)、直接存取存储器(Direct Access Storage Device,DASD)的一个或多个互连的磁盘驱动器,诸如磁带库、一个或多个存储单元的磁带存储设备。
生产阵列的存储空间可以包括多个数据卷,数据卷是由物理存储空间映射而成的一段逻辑存储空间,例如,数据卷可以是逻辑单元(Logic Unit Number,LUN),也可以是文件***。在本发明实施例中,灾备阵列的结构和生产阵列类似。
请参考图1,图1是本发明一种数据发送方法的实施例,本发明实施例应用在第一存储设备中,其中,第一存储设备包括控制器、高速缓冲存储器(以下简称缓存或cache)和存储介质。其中,控制器是第一存储设备的处理器,用于执行IO命令以及其他数据业务;缓存是存在于控制器与硬盘之间的存储器,容量较硬盘小但速度比硬盘高得多;存储介质是第一存储设备主要的存储器,通常情况下是指非易失性存储介质,例如,磁盘,在本发明实施例中将第一存储设备包含的物理存储空间都称为存储介质。具体执行下述步骤的可以是第一存储设备中的控制器。
步骤S101:第一存储设备接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息。
其中,地址信息可以包括逻辑块地址(Logic Unit Address,LBA),当第一存储设备中包含多个数据卷时,地址信息还可以包括第一存储设备的数据卷的ID。
步骤S102:将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号。
在第一存储设备中可以包含一个当前时间片编号管理器,所述当前时间片编号管理器中保存有当前时间片编号,当前时间片编号可以用数值表示,例如0、1、2,也可以用字母表示,例如a、b、c,在此不做限定。
当接收到第一写数据请求时,在第一写数据请求携带的待写入数据和地址信息中增加第一编号,所述第一编号是由当前时间片编号赋值给它的。
在第一写数据请求携带的信息中增加第一编号后,再将修改后的第一写数据请求携带的信息写入缓存,使得第一写数据请求携带的待写入数据、地址信息和第一编号都保存在缓存中。
另外,在一段时间内,还可以接收到其他写数据请求,同样需要在其携带的信息中增加第一编号,并写入缓存。需要说明的是在当前时间片编号改变之前,在写数据请求携带的信息中增加的都是第一编号。
步骤S103:从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息。
当复制任务触发时,第一存储设备可以从缓存中将第一编号对应的待写入数据和地址信息读取出来,可以理解的是,第一编号对应的待写入数据和地址信息可以不止一条。
复制任务是指第一存储设备将一段时间内一个数据卷接收到的写数据请求携带的信息发送给第二存储设备,这些写数据请求携带的信息都被增加了与当前时间片编号相同的编号。复制任务触发可以是由定时器触发,也可以是人为触发,在此不做限定。复制的目的是将第一存储设备接收的写数据请求携带的待写入数据发送给第二存储设备存储,使得第一存储设备故障时,第二存储设备可以接替第一存储设备工作。可以理解的是,写数据请求携带的地址信息(例如LBA)也需要发送给第二存储设备,所述LBA用于指示第二存储设备存储待写入数据的地址。由于第二存储设备具有与第一存储设备相同的物理结构,因此适用于第一存储设备的LBA,也适用于第二存储设备。
在本发明实施例中,复制任务是针对第一存储设备的一个数据卷而言的,当第一存储设备包含多个数据卷时,每个数据卷对应的一个复制任务。
步骤S104:修改所述当前时间片编号以标识后续写数据请求携带的信息。
当复制任务触发时,当前时间片编号管理器需要修改当前时间片编号,当接收到后续写数据请求时,则后续的写数据请求携带的信息则需增加另一个编号,所述另一个编号是由修改后的当前时间片编号赋值给它的。由此,可以在缓存中将需要发送给第二存储设备的写数据请求携带的信息,与第一存储设备正在接收的写数据请求携带的信息区分开来。
需要说明的是,步骤S103和步骤S104之间没有先后顺序之分。
步骤S105:将所述待写入数据和地址信息发送给第二存储设备。
第一存储设备将从缓存中读取的第一编号对应的待写入数据和地址信息,发送给第二设备。
具体的,第一存储设备可以将读取到的所有的待写入数据和地址信息直接发送给第二存储设备;也可以在获得第二存储设备的数据卷的ID后,根据每一个写数据请求携带的待写入数据和地址信息,以及第二存储设备的数据卷的ID,分别生成新的写数据请求,再发送给第二存储设备。
本发明实施例中,第一存储设备在接收主机发送的写数据请求后,所述写数据请求携带的信息包括待写入数据和地址信息,在待写入数据和地址信息中增加第一编号,写入缓存,第一编号为当前时间片编号,在复制任务触发时,从缓存中读取第一编号对应的待写入数据和地址信息,发送给第二存储设备,另外,在复制任务触发时,修改当前时间片编号,使得第一存储设备在后续接收写数据请求时,在其携带的信息中增加与修改后的当前时间片编号相同的编号,由此在缓存中将需要发送给第二存储设备的写数据请求携带的信息,与第一存储设备正在接收的写数据请求携带的信息区分开来,实现了直接从缓存中将写数据请求携带的信息发送给第二存储设备,由于信息是直接从缓存中发送的,不需要从数据卷中读取数据,因此数据复制的时间较短,提高了数据复制的效率。
可以理解的是,在上述实施例中,第一存储设备在复制任务触发时,将当前时间片编号对应的待写入数据和地址信息,发送给第二存储设备,同时修改当前时间片编号以标识后续写数据请求携带的信息。在下一次复制任务触发时,将修改后的当前时间片编号对应的待写入数据和地址信息发送给第二存储设备,同时再次修改当前时间片编号。可以保证第一存储设备分批次地完整地将其接收到的写数据请求携带的信息,发送给第二存储设备。
然而,当存在多个灾备中心时,假设第二个灾备中心对应的存储设备是第三设备,第一存储设备还需要将其接收到的写数据请求携带的信息,发送给第三存储设备。对于第二存储设备而言,复制任务触发时,当前时间片编号管理器将修改当前时间片编号,此时,当前时间片编号赋值给第二存储设备和第三存储设备的编号都是修改后的编号。然而,当前时间片编号修改之前的编号对应的写数据请求携带信息还没有发送给第三存储设备。
因此,对于多个灾备中心的场景,上述实施例还可以包括以下步骤:
步骤S106:记录第二编号,所述第二编号是当前的复制任务之前,最近一次已完成的复制任务对应的编号。
在上述实施例中,第一编号与当前时间片编号相同,可以用于标识当前的复制任务,当前的复制任务是指第一存储设备将当前时间段内一个数据卷接收到的写数据请求携带的信息发送给第二存储设备,这些写数据请求携带的信息都被增加了与当前时间片编号相同的编号。
第二编号是当前的复制任务之前,最近一次已完成的复制任务对应的编号。
当存在多个灾备中心时,当前时间片编号可能在向其他灾备中心的存储设备发起复制任务时修改的,因此需要将上一次已完成的复制任务对应的编号记录下来。
如果在第二编号和第一编号之间还存在其他编号,那么该编号对应的写数据请求携带的信息是没有发送给第二存储设备的,需要执行步骤S107。
步骤S107:从所述缓存中读取所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息。
具体的读取过程,与步骤S103类似,这里不再赘述。
需要说明的是,步骤S107可以和步骤S103没有先后顺序之分,也可以同时执行。
步骤S108:将所述第二编号之后,所述第一编号之前的编号对应的待写入数据和地址信息发送给所述第二存储设备。
具体的发送过程,与步骤S105类似,这里不再赘述。
本发明实施例,除了将当前时间片编号对应的写数据请求携带的信息发送给第二存储设备以外,还可以将上一次已完成的复制任务对应的编号,与当前时间片编号之间的编号对应的写数据请求携带的信息发送给第二存储设备,适用于多个灾备中心的场景,保证了数据复制的完整性。
请参考图2,图2是本发明一种数据接收方法的实施例,本发明实施例用于灾备中心在接收到生产中心发送的写数据请求携带的信息的应用场景。所述方法可以包括:
步骤S201:第二存储设备接收第一存储设备发送的地址信息。
具体的,第二存储设备可以接收第一存储设备发送的待写入数据和地址信息;也可以接收第一存储设备发送的写数据请求,其中,所述写数据请求包括待写入数据和地址信息,所述地址信息可以是逻辑块地址(Logic Unit Address,LBA)。当第二存储设备包括多个数据卷时,所述地址信息还可以包括第二存储设备的数据卷的ID。可以理解的是,这里的地址信息可以不止一条。
第二存储设备在接收到待写入数据和地址信息后,在待写入数据和地址信息中增加与当前时间片编号相同的编号,写入缓存,使得在缓存中保存与当前时间片编号相同的编号、待写入数据和地址信息。
需要说明的是,第二存储设备中也包含有一个当前时间片编号管理器,所述当前时间片编号管理器中保存有当前时间片编号,当前时间片编号可以用数值表示,例如0、1、2,可以用字母表示,例如a、b、c,在此不做限定。这里的当前时间片编号可以和第一存储设备中的当前时间片编号没有联系。
步骤S202:当确定所述第一存储设备故障时,所述第二存储设备根据所述地址信息,获取第一编号对应的待写入数据,所述第一编号对应的地址信息与所述接收到的地址信息相同,所述第一编号为当前时间片编号之前的编号。
通常情况下,若第一存储设备和第二存储设备均运行正常,那么第一存储设备发送多少条写数据请求携带的信息,第二存储设备就可以接收多少条写数据请求携带的信息,并且将每个写数据请求携带的信息都加上与当前时间片编号相同的编号,保存在缓存中。然而,如果第一存储设备发生故障,那么第二存储设备可能只接收到了第一存储设备的当前时间片编号的对应的部分待写入数据,在这种情况下,第二存储设备保存的数据可能是不真实的数据,如果直接接替第一存储设备工作,数据一致性就不能得到保证。举例来说,若此时主机向第二存储设备发送一个读数据请求,要求读取所述地址信息上保存的数据,第二存储设备会查找与所述地址信息对应的最新的编号,然后将当前时间片编号对应的待写入发送给主机,然而该数据是不真实的。因此,此时需要将第二存储设备的缓存中的数据恢复成第二存储设备的当前时间片编号之前的编号对应的数据。
具体的,确定第一存储设备发生故障的方式可以是控制中心向第二存储设备发送一个信号,该信号用于指示第一存储设备故障,第二存储设备需接替第一存储设备处理主机业务。
通常情况下,当一个复制任务完成时,控制中心可以分别向第一存储设备和第二存储设备发送复制成功的指示。如果第二存储设备没有接收该指示,则说明当前复制任务没有完成。复制任务完成是指,第一存储设备将当前时间片编号对应的所有写数据请求携带的信息都发送给了第二存储设备,并且第二存储设备也接收完成。
当第二存储设备确定第一存储设备发生故障时,若当前的复制任务已完成,则第二存储设备可以直接接替第一存储设备工作,数据一致性可以得到保证。这种情况不在本发明实施例的讨论范围之内。
然而,若当前的复制任务没有完成,则需要将第二存储设备的缓存中的数据恢复成其当前时间片编号之前的编号对应的数据。
具体的恢复方式可以是,根据接收到的地址信息,在当前时间片编号的上一个编号对应的地址信息中查找是否有与所述地址信息相同的地址信息,如果没有,则继续在再上一个编号对应的地址信息中查找,直至找到所述地址信息,然后获得该编号对应的待写入数据。
步骤S203:将所述第一编号对应的待写入数据和地址信息增加第二编号,写入缓存。
其中,第二编号是对当前时间片编号进行修改后的编号,也是在本实施例中缓存中保存的最新的编号。当主机向第二存储设备发送一个读数据请求,要求读取所述地址信息上保存的数据时,第二存储设备经过查找得知与所述地址信息对应的最新的编号是第二编号,将第二编号对应的待写入数据发送给主机。由此,保证了数据的一致性。
本发明实施例中,第二存储设备接收第一存储设备发送的地址信息,在第一存储设备发生故障时,根据该地址信息获得当前时间片编号之前的编号对应的待写入数据,并且将当前时间片编号之前的编号对应的待写入数据和地址信息增加第二编号,保存在缓存中。由此,保证了数据一致性。
请参考图3,图3是本发明一种数据发送方法的实施例,在本发明实施例中,为了将生产阵列中的缓存与灾备阵列中的缓存相区别,在本发明实施例中,将生产阵列中的缓存称为第一缓存,灾备阵列中的缓存称为第二缓存。
如图3所示,所述方法包括:
步骤S301:生产阵列接收生产主机发送的写数据请求A。
所述写数据请求A包括卷ID、待写入地址A和待写入数据A,待写入地址A是指待写入数据A将要写入的生产阵列的逻辑地址,例如LBA,通常情况下,生产阵列在执行所述写数据请求A时需要将LBA转换为PBA(Phys ics Block Address)后,再根据PBA将待写入数据A写入存储介质中。卷ID是写数据请求A对应的数据卷的ID。本实施例以生产阵列包含一个卷(以下称为主卷)为例,那么写数据请求A携带的信息中包含主卷ID、待写入地址A和待写入数据A。
步骤S302:生产阵列将写数据请求A修改为写数据请求A’,写数据请求A’包含写数据请求A携带的信息以及第一编号。
在本发明实施例中,生产阵列的控制器中可以包含一个当前时间片编号(CurrentTime Per iod Number,CTPN)管理器,在CTPN管理器中记录有当前时间片编号,所述当前时间片编号用于生成第一编号,具体的,第一编号等于当前时间片编号。
在生产阵列接收到写数据请求A后,将写数据请求A修改为写数据请求A’。具体的,其修改方式可以是在所述写数据请求A携带的信息中增加第一编号,例如,当前时间片编号可以为1,那么第一编号也为1。
可选的,也可以在接收写数据请求A时,记录时间戳,将所述时间戳在预先保存的编号序列中进行匹配,从而确定所述时间戳对应的编号。具体的,所述编号序列可以是映射表或者其他形式,在此不做限定。所述编号序列包括多个编号,每个编号对应一段时间戳的区间。如表1所示:
表1
以接收所述写数据请求A的时间戳是9:30为例,其对应的编号为1,则可以根据所述编号,将写数据请求A修改为写数据请求A’。
步骤S303:生产阵列将所述写数据请求A’写入第一缓存,使得在所述第一缓存中保存写数据请求A’携带的信息。其中,写数据请求A’携带的信息包括第一编号、主卷ID、待写入地址A和待写入数据A。
在本发明实施例中,第一编号对应的写数据请求可以有多个。在CTPN管理器中记录的当前时间片编号修改之前,接收到所有的写数据请求携带的信息都会加上第一编号。
可以理解的是,在接收写数据请求A之后,还可以接收写数据请求B,将写数据请求B修改为写数据请求B’,使得写数据请求B’中还包含所述第一编号;还可以接收写数据请求C,将写数据请求C修改为写数据请求C’,使得写数据请求C’中还包含所述第一编号。
举例来说,将写数据请求A’,写数据请求B’,写数据请求C’写入第一缓存后,第一缓存中的保存的信息可以如表2所示:
编号 | 卷ID | 待写入地址 | 待写入数据 |
1 | 主卷ID | 待写入地址A | 待写入数据A |
1 | 主卷ID | 待写入地址B | 待写入数据B |
1 | 主卷ID | 待写入地址C | 待写入数据C |
表2
需要说明的是,在本发明实施例中,以生产阵列包含一个数据卷(可以称为主卷)为例,所述写数据请求A’、写数据请求B’和写数据请求C’携带的数据卷的ID均是主卷ID。在本发明另一个实施例中,生产阵列可以包含多个数据卷,所以写数据请求A、写数据请求B和写数据请求C携带的数据卷的ID可以不同。另外,表2只是写数据请求携带的信息在第一缓存中保存形式的一个示例,还可以采用树的形式进行保存,在此不作限定。
以表2为例,编号、卷ID、待写入地址可以看作表2的索引,根据所述索引可以查到其对应的待写入数据,当索引相同时,其对应的待写入数据也应该相同。因此,当写入一个新的写数据请求时,需判断第一缓存中是否存储有与新的写数据请求的编号、卷ID以及待写入地址均相同的信息,如果有,则用新的写数据请求携带的信息覆盖原来的信息。可以理解的是,在将写数据请求A’、写数据请求B’、写数据请求C’写入第一缓存时,也需要判断其编号、卷ID、待写入地址是否与第一缓存中已保存的信息相同,因为不相同,所以可以将写数据请求A’、写数据请求B’、写数据请求C’都写入第一缓存。
举例来说,如果此时接收到写数据请求D,所述写数据请求D包含主卷ID、待写入地址B、待写入数据D,将写数据请求D修改为写数据请求D’,使得写数据请求D’中还包含所述第一编号。那么,将所述写数据请求D’写入第一缓存时,则需判断第一缓存中是否存储与写数据请求D’的编号、卷ID以及待写入地址均相同的信息,如果有,则用写数据请求D’携带的数据覆盖原来的信息。由于写数据请求D’中携带的编号、卷ID、待写入地址均与写数据请求B’中包含的编号、卷ID、待写入地址相同,因此在第一缓存中,写数据请求D’的信息将覆盖写数据请求B’的信息。
具体的,在将所述写数据请求D’写入第一缓存后,第一缓存中保存的信息可以如表3所示:
编号 | 卷ID | 待写入地址 | 待写入数据 |
1 | 主卷ID | 待写入地址A | 待写入数据A |
1 | 主卷ID | 待写入地址B | 待写入数据D |
1 | 主卷ID | 待写入地址C | 待写入数据C |
表3
步骤S304:当复制任务触发时,生产阵列修改CTPN管理器包含的当前时间片编号;举例来说,可以将当前时间片编号由1修改为2。
为了将生产阵列的当前时间片编号与灾备阵列的当前时间片编号区别开,在本发明实施例中,将生产阵列的当前时间片编号称为第一当前时间片编号,将灾备阵列的当前时间片编号称为第二当前时间片编号。
可以理解的是,当第一当前时间片编号由1修改为2之后,相应地,此后接收到的写数据请求携带的信息都会加上与编号2。例如,接收到写数据请求E,所述写数据请求E包含主卷ID、待写入地址A、待写入数据E,将写数据请求E修改为写数据请求E’,使得写数据请求E’中还包含编号2;接收到写数据请求F,所述写数据请求F包含主卷ID、待写入地址F、待写入数据F,将写数据请求F修改为写数据请求F’,使得写数据请求F’中还包含编号2。在将写数据请求E’和写数据请求F’写入第一缓存之后,第一缓存中保存的信息可以如表4所示:
编号 | 卷ID | 待写入地址 | 待写入数据 |
1 | 主卷ID | 待写入地址A | 待写入数据A |
1 | 主卷ID | 待写入地址B | 待写入数据D |
1 | 主卷ID | 待写入地址C | 待写入数据C |
2 | 主卷ID | 待写入地址A | 待写入数据E |
2 | 主卷ID | 待写入地址F | 待写入数据F |
表4
步骤S305:灾备阵列修改其CTPN管理器包含的第二当前时间片编号;举例来说,可以由11修改为12。
在本发明实施例中,灾备阵列中也可以包含自己的CTPN管理器。当生产阵列的复制任务触发时,生产阵列中的CTPN管理器修改第一当前时间片编号,此时,控制中心也可以给灾备阵列发送一个控制信号,让在灾备阵列也修改自己的CTPN管理器中包含的第二当前时间片编号。因此,步骤S305与步骤S304之间没有先后顺序之分。
步骤S306A:生产阵列从第一缓存中读取第一编号对应的写数据请求携带的信息。
具体的,由上面的描述可知,第一编号对应的写数据请求携带的信息如表3所示。
步骤S306B:生产阵列获得待写入灾备阵列的数据卷的ID;
步骤S306C:生产阵列根据所述数据卷的ID以及第一编号对应的写数据请求携带的信息,生成新的写数据请求;
具体的,可以根据数据卷的ID、待写入地址A、待写入数据A生成写数据请求A”;可以根据数据卷的ID、待写入地址B、待写入数据D生成写数据请求D”;可以根据数据卷的ID、待写入地址C、待写入数据C生成写数据请求C”。
在本发明另一个实施例中,生产阵列和灾备阵列均可以包含多个数据卷,那么写数据请求A”、写数据请求D”、写数据请求C”所包含的数据卷的ID可能是不相同的。然而,灾备阵列中每一个数据卷的ID是与生产阵列中每一个数据卷的ID一一对应的。
步骤S307:生产阵列向灾备阵列发送生成的新的写数据请求。
具体的,生产阵列向灾备阵列发送写数据请求A”、写数据请求D”、写数据请求C”。
步骤S308:灾备阵列修改接收到的写数据请求。
例如,可以根据CTPN管理器中记录的第二当前时间片编号,将写数据请求A”修改为写数据请求A”’。具体的,其修改方式可以是在所述写数据请求A”携带的信息中增加编号12。
同样的,可以在写数据请求B”携带的信息中增加编号12,将写数据请求B”修改为写数据请求B”’;在写数据请求C”携带的信息中增加编号12,将写数据请求C”修改为写数据请求C”’。
步骤S309:灾备阵列将修改后的写数据请求写入第二缓存。
具体的,保存在第二缓存中的信息可以如表5所示:
编号 | 卷ID | 待写入地址 | 待写入数据 |
12 | 从卷ID | 待写入地址A | 待写入数据A |
12 | 从卷ID | 待写入地址B | 待写入数据D |
12 | 从卷ID | 待写入地址C | 待写入数据C |
表5
步骤S310:灾备阵列根据写数据请求的待写入地址,将待写入数据写入待写入地址对应的存储介质中。
通常情况下,由于缓存空间是有限的,当其空间利用率达到一定阈值时,就需要将缓存中的数据写入硬盘。具体的,将待写入数据A写入待写入地址A对应的存储介质中,将待写入数据D写入待写入地址B对应的存储介质中,将待写入数据C写入待写入地址C对应的存储介质中。
步骤S311:生产阵列根据写数据请求的待写入地址,将待写入数据写入待写入地址对应的存储介质中。
同样的,生产阵列的缓存在其空间利用率达到一定阈值时,也需要将缓存中的数据写入硬盘。由上面的描述可知,此时第一缓存中保存有如下信息:
具体的,对于卷ID相同、待写入地址相同而编号不同的写数据请求,可以先写入编号较小的写数据请求携带的待写入数据,再写入编号较大的写数据请求携带的待写入数据,例如先写入待写入数据D,再写入待写入数据E;或者直接写入编号较大的写数据请求携带的待写入数据,而不写入编号较小的写数据请求携带的待写入数据,例如直接写入待写入数据E。
步骤S310和步骤S311之间没有先后顺序之分。
步骤S312:当复制任务触发时,生产阵列修改其CTPN管理器包含的第一当前时间片编号;举例来说,可以将当前时间片编号由2修改为3。
可以理解的是,当生产阵列的CTPN管理器中的第一当前时间片编号由2修改为3之后,相应地,此后生产阵列接收到的写数据请求携带的信息中都会加上编号3。
步骤S313:灾备阵列修改其CTPN管理器包含的第二当前时间片编号;举例来说,可以将第二当前时间片编号由12修改为13。
可以理解的是,当灾备阵列的CTPN管理器中的第二当前时间片编号由12修改为13之后,相应地,此后灾备阵列接收到的写数据请求携带的信息都会加上编号13。
步骤S314:生产阵列读取编号2对应的写数据请求携带的信息,生成相应的写数据请求发送给灾备阵列。
具体的,由上面的描述可知,编号2对应的写数据请求携带的信息包括写数据请求E携带的信息和写数据请求F携带的信息。同样的,生产阵列在获得灾备阵列的数据卷的ID后,可以根据数据卷的ID、待写入地址A、待写入数据E生成写数据请求E”;可以根据数据卷的ID、待写入地址F、待写入数据F生成写数据请求F”。所以,生产阵列向灾备阵列发送的写数据请求是写数据请求E”和写数据请求F”。
需要说明的是,在本发明实施例中,生产阵列在向灾备阵列发送写数据请求时并没有根据先后顺序之分,可以是随机发送的,具体而言,可以先发送写数据请求E”,再发送写数据请求F”;也可以先发送写数据请求F”,再发送写数据请求E”。
由上面的描述可知,此时,灾备阵列的CTPN管理器中的第二当前时间片编号是13,因此灾备阵列在接收到写数据请求E”之后需要将写数据请求E”修改为包含编号13的写数据请求E”’;同样的,灾备阵列在接收到写数据请求F”之后需要将写数据请求F”修改为包含编号13的写数据请求F”’。
步骤S315:灾备阵列收到指示接替生产阵列处理主机业务。
在本发明实施例中,如果生产阵列发生故障,灾备阵列就需要接替生产阵列处理主机业务,因此灾备阵列需要满足数据一致性的要求。
由步骤S314可知,在当前的复制任务中,灾备阵列需要接收的写数据请求包括写数据请求E”和写数据请求F”。当写数据请求E”和写数据请求F”,经修改后均已成功写入第二缓存中,灾备阵列才开始接替生产阵列处理主机业务时,说明当前的复制周期已经完成,具备数据一致性的要求。
若灾备阵列在将写数据请求E”修改为写数据请求E”’并成功写入第二缓存之后,写数据请求F”’成功写入第二缓存之前,生产阵列发生故障,灾备阵列开始接替生产阵列处理主机业务,那么当前的复制任务没有完成,不满足数据一致性的要求。同样的,若灾备阵列在将写数据请求F”修改为写数据请求F”’并成功写入第二缓存之后,写数据请求E”’成功写入第二缓存之前,生产阵列故障,灾备阵列开始接替生产阵列处理主机业务,那么当前的复制任务也没有完成,也不满足数据一致性的要求。
此时,需要将灾备阵列的缓存中的数据恢复成编号12对应的复制任务完成时的状态。下面以灾备阵列在将写数据请求E”修改为写数据请求E”’并成功写入第二缓存,而写数据请求F”’没有成功写入第二缓存为例。
步骤S316:灾备阵列获取当前复制周期中已成功写入第二缓存的写数据请求携带的待写入地址。
由上面的描述可知,在编号13对应的复制任务中,写数据请求E”’已成功写入第二缓存,其携带的待写入地址为待写入地址A。
步骤S317:灾备阵列根据所述待写入地址,在上一个编号对应的写数据请求携带的信息中进行匹配,查找到与所述待写入地址A相同的待写入地址。
当查找到与所述待写入地址相同的待写入地址时,执行步骤S318;若否,则继续在再上一个编号(例如编号11)对应的写数据请求携带的信息中进行匹配,直到查找到与写数据请求E”’携带的待写入地址A相同的待写入地址为止。
由上面的描述可知,编号12对应的写数据请求携带的信息如表5所示。其中,写数据请求A”携带待写入地址与写数据请求E”’携带的待写入地址相同。
可以理解的是,当灾备阵列包含多个数据卷,每个写数据请求携带的信息中包含数据卷的ID时,则需要待写入地址和数据卷的ID两者均相同时才满足条件。
步骤S318:根据查找到的待写入地址所在的信息,生成新的写数据请求写入所述第二缓存,所述新的写数据请求包含修改后的编号。
举例来说,从第二缓存中读取的信息包括待写入地址A和待写入数据A(还可以包含从卷ID),根据读取到的信息,再加上修改后的编号(例如,将编号由13修改为14),可以生成一条新的写数据请求。将所述新的写数据请求写入第二缓存后,此时缓存中保存的对应关系如表6所示:
编号 | 卷ID | 待写入地址 | 待写入数据 |
12 | 从卷ID | 待写入地址A | 待写入数据A |
12 | 从卷ID | 待写入地址B | 待写入数据D |
12 | 从卷ID | 待写入地址C | 待写入数据C |
13 | 从卷ID | 待写入地址A | 待写入数据E |
14 | 从卷ID | 待写入地址A | 待写入数据A |
表6
当主机发送读数据请求给灾备阵列,要求读取数据卷的ID为从卷ID、待写入地址为待写入地址A时,灾备阵列会在第二缓存中查找数据卷的ID为从卷ID、待写入地址为待写入地址A且最新的编号对应的待写入数据发送给主机。在本发明实施例中,则是从第二缓存中将编号14对应的待写入数据A发送给主机。
本发明实施例生产阵列可以直接从缓存中将接收到的写数据请求携带的信息,发送给灾备阵列,不用到数据卷中读取相关信息,因此可以提高数据复制的效率,并且对于灾备阵列来说也保证了数据一致性。
在现有技术中,数据复制是通过快照数据来实现的,这就要求在生产阵列每次执行写数据请求时,需要先将写数据请求携带的数据放入缓存,根据写数据请求中携带的待写入地址,将该地址中保存的旧数据读取出来,存储在数据卷中,再将缓存中的数据写入所述待写入地址,这些操作完成以后才能返回写数据请求的响应消息,由于增加了快照处理的步骤,因此增加了写数据请求处理的时延。而在本发明实施例中不需要对数据进行快照处理,虽然会对写数据请求进行修改,但耗时较小。所以,和现有技术相比,本发明实施例减小了写数据请求处理的时延。
请参考图5,图5是本发明实施例一种存储设备50的结构示意图,如图5所示,所述存储设备50包括:接收模块501、读写模块502、当前时间片编号管理器503和发送模块504。
接收模块501,用于接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息。
其中,地址信息可以包括逻辑块地址(Logic Unit Address,LBA),当存储设备50中包含多个数据卷时,地址信息还可以包括存储设备50的数据卷的ID。
读写模块502,用于将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号;从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息。
在存储设备50中可以包含一个当前时间片编号管理器503,所述当前时间片编号管理器503中保存有当前时间片编号,当前时间片编号可以用数值表示,例如0、1、2,可以用字母表示,例如a、b、c,在此不做限定。
当接收到第一写数据请求时,在第一写数据请求携带的待写入数据和地址信息中增加第一编号,所述第一编号是由当前时间片编号赋值给它的。
在第一写数据请求携带的信息中增加第一编号后,再将修改后的第一写数据请求携带的信息写入缓存,使得第一写数据请求携带的待写入数据、地址信息和第一编号都保存在缓存中。
另外,在一段时间内,还可以接收到其他写数据请求,同样需要在其携带的信息中增加第一编号,并写入缓存。需要说明的是在当前时间片编号改变之前,在写数据请求携带的信息增加的都是第一编号。
当复制任务触发时,存储设备50可以从缓存中将第一编号对应的待写入数据和地址信息读取出来,可以理解的是,第一编号对应的待写入数据和地址信息可以不止一条。
复制任务是指存储设备50将一段时间内一个数据卷接收到的写数据请求携带的信息发送给灾备中心的存储设备,这些写数据请求携带的信息都被增加了与当前时间片编号相同的编号。复制任务触发可以是由定时器触发,也可以是人为触发,在此不做限定。复制的目的是将存储设备50接收的写数据请求携带的待写入数据发送给灾备中心的存储设备存储,使得存储设备50故障时,灾备中心的存储设备可以接替存储设备50工作。可以理解的是,写数据请求携带的地址信息(例如LBA)也需要发送给灾备中心的存储设备,所述LBA用于指示灾备中心的存储设备存储待写入数据的地址。灾备中心的存储设备具有与存储设备50相同的物理结构,因此适用于存储设备50的LBA,也适用于灾备中心的存储设备。
在本发明实施例中,复制任务是针对存储设备50的一个数据卷而言的,当存储设备50包含多个数据卷时,每个数据卷对应的一个复制任务。
当前时间片编号管理器503,用于修改所述当前时间片编号以标识后续写数据请求携带的信息。
当复制任务触发时,当前时间片编号管理器503需要修改当前时间片编号,当接收到后续写数据请求时,则后续的写数据请求携带的信息则需增加另一个编号,所述另一个编号是由修改后的当前时间片编号赋值给它的。由此,可以在缓存中将需要发送给灾备中心的存储设备的写数据请求携带的信息,与存储设备50正在接收的写数据请求中携带的信息区分开来。
发送模块504,用于将所述待写入数据和地址信息发送给灾备中心的存储设备。
存储设备50将从缓存中读取的第一编号对应的待写入数据和地址信息,发送给灾备中心的存储设备。
具体的,存储设备50可以将读取到的所有的待写入数据和地址信息直接发送给灾备中心的存储设备;也可以在获得灾备中心的存储设备的数据卷的ID后,根据每一个写数据请求携带的待写入数据和地址信息,以及灾备中心的存储设备的数据卷的ID,分别生成新的写数据请求,再发送给灾备中心的存储设备。
本发明实施例中,存储设备50在接收主机发送的写数据请求后,所述写数据携带的信息包括待写入数据和地址信息,在待写入数据和地址信息中增加第一编号,写入缓存,第一编号为当前时间片编号,在复制任务触发时,从缓存中读取第一编号对应的待写入数据和地址信息,发送给灾备中心的存储设备,另外,在复制任务触发时,修改当前时间片编号,使得存储设备50在后续接收写数据请求时,在其携带的信息中增加与修改后的当前时间片编号相同的编号,由此在缓存中将需要发送给灾备中心的存储设备的写数据请求携带的信息,与存储设备50正在接收的写数据请求携带的信息区分开来,实现了直接从缓存中将写数据请求携带的信息发送给灾备中心的存储设备,由于信息是直接从缓存中发送的,不需要从数据卷中读取数据,因此数据复制的时间较短,提高了数据复制的效率。
请参考图6,图6是本发明实施例一种存储设备60的结构示意图,如图6所示,所述存储设备60包括:接收模块601、查找模块602和写入模块604。
接收模块601,用于接收存储设备50发送的地址信息。
具体的,存储设备60可以接收存储设备50发送的待写入数据和地址信息;也可以接收存储设备50发送的写数据请求,其中,所述写数据请求包括待写入数据和地址信息,所述地址信息可以是逻辑块地址(Logic Unit Address,LBA)。当存储设备60包括多个数据卷时,所述地址信息还可以包括存储设备60的数据卷的ID。可以理解的是,这里的地址信息可以不止一条。
存储设备60在接收到待写入数据和地址信息后,在待写入数据和地址信息中增加与当前时间片编号相同的编号,写入缓存,使得在缓存中保存与当前时间片编号相同的编号、待写入数据和地址信息。
需要说明的是,存储设备60中也可以包含有一个当前时间片编号管理器603,所述当前时间片编号管理器603中保存有当前时间片编号,当前时间片编号可以用数值表示,例如0、1、2,可以用字母表示,例如a、b、c,在此不做限定。这里的当前时间片编号可以和存储设备50中的当前时间片编号没有联系。
查找模块602,用于当确定所述存储设备50故障时,所述存储设备60根据所述地址信息,获取第一编号对应的待写入数据,所述第一编号对应的地址信息与所述接收到的地址信息相同,所述第一编号为当前时间片编号之前的编号。
通常情况下,若存储设备50和存储设备60均运行正常,那么存储设备50发送多少条写数据请求携带的信息,存储设备60就可以接收多少条写数据请求携带的信息,并且将每个写数据请求携带的信息都加上与当前时间片编号相同的编号,保存在缓存中。然而,如果存储设备50发生故障,那么存储设备60可能只接收到了存储设备50的当前时间片编号的对应的部分待写入数据,在这种情况下,存储设备60保存的数据可能是不真实的数据,如果直接接替存储设备50工作,数据一致性就不能得到保证。举例来说,若此时主机向存储设备60发送一个读数据请求,要求读取所述地址信息(例如,LBA)上保存的数据,存储设备60会查找与所述地址信息对应的最新的编号,然后将当前时间片编号对应的待写入发送给主机,然而该数据是不真实的。因此,此时需要将存储设备60的缓存中的数据恢复成存储设备60的当前时间片编号之前的编号对应的数据。
具体的,确定存储设备50发生故障的方式可以是控制中心向存储设备60发送一个信号,该信号用于指示存储设备50故障,存储设备60需接替存储设备50处理主机业务。
通常情况下,当一个复制任务完成时,控制中心可以分别向存储设备50和存储设备60发送复制成功的指示。如果存储设备60没有接收该指示,则说明当前复制任务没有完成。复制任务完成是指,存储设备50将当前时间片编号对应的所有写数据请求携带的信息都发送给了存储设备60,并且存储设备60也接收完成。
当存储设备60确定存储设备50发生故障时,若当前的复制任务已完成,则存储设备60可以直接接替存储设备50工作,数据一致性可以得到保证。这种情况不在本发明实施例的讨论范围之内。
然而,若当前的复制任务没有完成,则需要将存储设备60的缓存中的数据恢复成其当前时间片编号之前的编号对应的数据。
具体的恢复方式可以是,根据接收到的地址信息,在当前时间片编号的上一个编号对应的地址信息中查找是否有与所述地址信息相同的地址信息,如果没有,则继续在再上一个编号对应的地址信息中查找,直至找到所述地址信息,然后获得该编号对应的待写入数据。
写入模块604,用于将所述第一编号对应的待写入数据和地址信息增加第二编号,写入缓存。
其中,第二编号是对当前时间片编号进行修改后的编号,在本实施例中是缓存中保存的最新的编号。当主机向存储设备60发送一个读数据请求,要求读取所述地址信息(例如,LBA)上保存的数据时,存储设备60经过查找得知与所述地址信息对应的最新的编号是第二编号,将第二编号对应的待写入数据发送给主机。由此,保证了数据的一致性。
本发明实施例中,存储设备60接收存储设备50发送的地址信息,在存储设备50发生故障时,根据该地址信息获得当前时间片编号之前的编号对应的待写入数据,并且将当前时间片编号之前的编号对应的待写入数据和地址信息增加第二编号,保存在缓存中。由此,保证了数据一致性。
请参考图7,本发明实施例提供了一种存储设备700的示意图。存储设备700可以包括当前技术已知的存储设备,本发明具体实施例并不对存储设备700的具体实现做限定。存储设备700包括:
处理器(processor)710,通信接口(Communications Interface)720,存储器(memory)730,通信总线740。
处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。
通信接口720,用于与网元通信,比如与主机或者交换机等通信。
处理器710,用于执行程序732。
具体地,程序732可以包括程序代码,所述程序代码包括计算机操作指令。
处理器710可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器730,用于存放程序732。存储器730可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序732具体可以包括:
接收模块501,用于接收主机发送的第一写数据请求,所述第一写数据请求携带待写入数据和地址信息。
读写模块502,用于将所述待写入数据和地址信息增加第一编号,写入缓存,其中所述第一编号为当前时间片编号;从所述缓存中读取所述第一编号对应的所述待写入数据和地址信息。
当前时间片编号管理器503,用于修改所述当前时间片编号以标识后续写数据请求携带的信息。
发送模块504,用于将所述待写入数据和地址信息发送给灾备中心的存储设备。
程序732中各模块的具体实现可以参见图5所示实施例中的相应模块,在此不赘述。
请参考图8,本发明实施例提供了一种存储设备800的示意图。存储设备800可以包括当前技术已知的存储设备,本发明具体实施例并不对存储设备800的具体实现做限定。存储设备800包括:
处理器(processor)810,通信接口(Communications Interface)720,存储器(memory)830,通信总线840。
处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。
通信接口820,用于与网元通信,比如与主机或者交换机等通信。
处理器810,用于执行程序832。
具体地,程序832可以包括程序代码,所述程序代码包括计算机操作指令。
处理器810可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器830,用于存放程序832。存储器830可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序832具体可以包括:
接收模块601,用于接收存储设备50发送的地址信息。
查找模块602,用于当确定所述存储设备50故障时,所述存储设备60根据所述地址信息,获取第一编号对应的待写入数据,所述第一编号对应的地址信息与所述接收到的地址信息相同,所述第一编号为当前时间片编号之前的编号。
写入模块604,用于将所述第一编号对应的待写入数据和地址信息增加第二编号,写入缓存。
程序832中各模块的具体实现可以参见图6所示实施例中的相应模块,在此不赘述。
下面详细描述本发明实施例应用在包含至少两个灾备中心的场景。
如图9所示,存储***包含一个生产中心和至少两个灾备中心。
生产中心包括生产主机、连接设备和生产阵列。灾备中心的***架构与生产中心类似,包括灾备主机、连接设备和灾备阵列。生产中心与灾备中心可以通过IP(InternetProtocol)或者FC(Fiber Chanel)进行数据传输。生产中心和灾备中心之间可以有一个控制中心,所述控制中心可以部署在生产中心侧,也可以部署在灾备中心侧,还可以部署在生产中心和灾备中心之间的第三方设备中。所述控制中心用于当生产阵列发生故障时,向灾备阵列发出信号让其接替生产阵列处理主机业务。
生产主机和灾备主机均可以是当前技术已知的任何计算设备,如服务器、台式计算机等等。在主机内部,安装有操作***以及其他应用程序。
连接设备可以包括当前技术已知的存储设备和主机之间的任何接口,如光纤交换机,或者其他现有的交换机。
生产阵列和灾备阵列均可以是当前技术已知的存储设备,如独立磁盘冗余阵列(Redundant Arrays of Inexpensive Disks,RAID)、磁盘簇(Just a Bunch Of Disks,JBOD)、直接存取存储器(Direct Access Storage Device,DASD)的一个或多个互连的磁盘驱动器,诸如磁带库、一个或多个存储单元的磁带存储设备。
生产阵列的存储空间可以包括多个数据卷,数据卷是由物理存储空间映射而成的一段逻辑存储空间,例如,数据卷可以是逻辑单元(Logic Unit Number,LUN),也可以是文件***。在本发明实施例中,灾备阵列的结构和生产阵列类似。
为了保障生产中心数据的安全性,通常需要部署多个灾备中心,将生产中心的数据复制到多个灾备中心,使得在生产中心和一个灾备中心均发生灾难时,还有其他的灾备中心存储有数据,不至于丢失。在本发明实施例中,生产阵列将其存储的一个数据卷中的数据复制到一个灾备阵列的任务称为一个复制关系(又称,pair)。每个复制关系对应一个唯一的标识(例如,ID)。由于生产阵列在灾难发生之前,会持续地接收主机发送的写数据请求,因此生产阵列也需要持续地将其存储的数据复制到灾备阵列中。那么,可以将一个复制关系划分为若干个时间段,每段时间内生产阵列将一个数据卷接收到的写数据请求携带的信息发送给灾备阵列的任务称为一个复制任务。
在生产阵列中可以包含一个当前时间片编号管理器,所述当前时间片编号管理器中保存有当前时间片编号,当前时间片编号可以用数值表示,例如0、1、2,也可以用字母表示,例如a、b、c,在此不做限定。需要说明的是,所述当前时间片编号对每个灾备阵列均适用,每次复制任务触发时,都会修改所述当前时间片编号。
以当前时间片编号为1为例,当生产阵列接收写数据请求时,在写数据请求携带的待写入数据和地址信息中增加数值为1的编号,然后将所述写数据请求携带的待写入数据和地址信息,以及数值为1的编号均写入缓存。
当第一灾备阵列对应的复制任务触发时,生产阵列将当前时间片编号由数值1修改为数值2,使得在之后接收到的写数据请求携带的待写入数据和地址信息中增加数值为2的编号。再将数值为1的编号对应的待写入数据和地址信息发送给第一灾备阵列。
当第二灾备阵列对应的复制任务触发时,生产阵列将当前时间片编号由数值2修改为数值3,使得在之后接收到的写数据请求携带的待写入数据和地址信息中增加数值为3的编号。
当第三灾备阵列对应的复制任务触发时,生产阵列将当前时间片编号由数值3修改为数值4,使得在之后接收到的写数据请求携带的待写入数据和地址信息中增加数值为4的编号。
然而,当第一灾备阵列对应的复制任务再次触发时,生产阵列将当前时间片编号由数值4修改为数值5,使得在之后接收到的写数据请求携带的待写入数据和地址信息中增加数值为5的编号。假设在生产阵列中仅记录当前时间片编号,那么相应地,此时也只是将数值为4的编号对应的待写入数据和地址信息发送给第一灾备阵列,那么,数值为2的编号对应的待写入数据和地址信息,以及数值为3的编号对应的待写入数据和地址信息将会被遗漏,第一灾备阵列保存的数据就会和生产阵列不一致。同样的,第二灾备阵列、第三灾备阵列也都会面临接收的待写入数据和地址信息不完整的问题。
请参考图10,图10是本发明为了解决该问题而提出的一种数据复制方法的实施例,所述方法应用在对应至少两个灾备阵列的生产阵列中,在本发明实施例中,为了描述方便,将生产阵列称为第一存储设备,将至少两个灾备阵列中的其中一个称为第二存储设备。需要说明的是,下面步骤的执行具体可参考图2-图4所示的实施例。
所述方法包括:
步骤41:当当前复制任务触发时,第一存储设备读取当前时间片编号。
复制任务触发可以是由定时器触发,也可以是人为触发,以及其他的触发方式,在此不作限定。当复制任务触发时,第一存储设备可以从当前时间片编号管理器中读取当前时间片编号。需要说明的是,当复制任务触发时,第一存储设备会对触发时刻的当前时间片编号进行修改,这里的第一存储设备读取的当前时间片编号是指修改后的当前时间片编号。为了描述方便,在下面的步骤中,可以将修改前的当前时间片编号称为历史时间片编号。
步骤42:读取第二编号,所述第二编号是与所述当前复制任务相关联的、最近一次已完成的复制任务对应的编号。
在本发明实施例中,最近一次已完成的复制任务与当前复制任务相关联是指当前复制任务和最近一次已完成的复制任务属于同一个复制关系,由前面的描述可知,每个复制关系都有唯一的ID。当复制任务触发时,第一存储设备可以接收所述ID,根据所述ID读取第二编号。
具体的,当所述当前复制任务是由定时器触发时,所述ID可以携带在定时器中;当所述当前复制任务是由人为触发时,所述第一存储设备可以以信号等形式接收所述ID。
在本发明实施例中,每次完成一个复制任务都会记录所述已完成的复制任务对应的编号。可选的,可以只保存最近一次已完成的复制任务对应的编号,当下一次复制任务完成时对其编号进行更新;也可以保存已完成的所有的复制任务对应的编号,在此不做限定。
可以理解的是,在每个复制关系中都会记录一个最近一次已完成的复制任务对应的编号。
步骤43:根据所述当前时间片编号和所述第二编号,确定第一编号,所述第一编号是所述复制任务触发时的当前时间片编号之前的编号,并且所述第一编号是第二编号之后的编号。
举例来说,当前时间片编号为数值5,第二编号为数值2,那么在区间(2,5)之内的编号都可以确定为第一编号。需要说明的是,所述区间为开区间,不包括数值2以及数值5。
步骤44:将所述第一编号对应的所述缓存中保存的待复制数据和待复制数据的地址信息复制到第二存储设备。
具体的,从缓存中读取第一编号对应的待复制数据和待复制数据的地址信息,并将所述待复制数据和待复制数据的地址信息发送给第二存储设备。
可选的,第一存储设备可以直接将所述待复制数据和待复制数据的地址信息发送给第二存储设备,或者根据所述待复制数据和待复制数据的地址信息生成一条写数据请求,将所述写数据请求发送给第二存储设备。
可选的,当多个编号均满足在所述当前复制任务触发时的当前时间片编号之前,最近一次已完成的复制任务对应的编号之后的条件时,并且所述多个编号对应的地址信息相同,那么可以只将最新的编号对应的地址信息以及待复制数据发送给第二存储设备。最新的编号是指最近一次生成的编号。例如,假设是以每次加1的方式对当前时间片编号进行修改,那么最新的编号就是指数值最大的编号。
在本发明实施例中,当当前复制任务触发时,第一存储设备根据所述当前时间片编号和第二编号确定第一编号,其中,所述第二编号是所述当前复制任务之前,最近一次已完成的复制任务对应的编号,所述第一编号是所述当前复制任务触发时的当前时间片编号之前,且第二编号之后的编号,将第一编号对应的所述缓存中保存的待复制数据和待复制数据的地址信息复制到第二存储设备。由于在第二编号与当前时间片编号之间的所有编号都可以被确定为第一编号,只要被确定为第一编号都可以将其对应的待复制数据和待复制数据的地址信息复制到第二存储设备。因此即使其他灾备阵列对应的复制任务在触发时对当前时间片编号进行过修改,第一存储设备也可以通过第二编号找到没有复制到第二存储设备的待复制数据和待复制数据的地址信息,并将其复制到第二存储设备,确保了复制的完整性。
可选的,在上述实施例中,在当前复制任务触发之前所述方法还包括:
接收第一写数据请求,所述第一写数据请求包括所述待复制数据和待复制数据的地址信息;在所述待复制数据和待复制数据的地址信息中增加第一编号,写入所述缓存,所述第一编号为历史时间片编号。
具体的,所述历史时间片编号是指接收第一写数据请求的时刻对应的当前时间片编号。由图2-图4所示的实施例可知,当复制任务触发时需要将历史时间片编号修改为当前时间片编号。
可选的,还可以包括:
接收第二写数据请求,所述第二写数据请求包括目标数据和所述目标数据的地址信息;
在所述目标数据和所述目标数据的地址信息中增加第三编号;
判断所述第三编号与所述第一编号是否相同;
当所述第三编号与所述第一编号相同时,则判断所述目标数据的地址信息是否与所述待复制数据的地址信息相同;
当所述目标数据的地址信息与所述待复制数据的地址信息相同时,将所述缓存中保存的所述待复制数据替换为所述目标数据;
当所述目标数据的地址信息与所述待复制数据的地址信息不相同时,将增加第三编号后的目标数据和所述目标数据的地址信息写入所述缓存。
当所述第三编号与所述第一编号不相同时,将增加第三编号后的目标数据和所述目标数据的地址信息写入所述缓存。
请参考图11,图11是本发明实施例一种存储设备的结构示意图。如图11所示,所述存储设备包括:读写模块52、确定模块53和复制模块54。
其中,读写模块52,用于当当前复制任务触发时读取当前时间片编号;以及读取第二编号,所述第二编号是与所述当前复制任务相关联的、最近一次已完成的复制任务对应的编号。
确定模块53,用于根据所述当前时间片编号和所述第二编号,确定第一编号,所述第一编号是所述当前复制任务触发时的当前时间片编号之前的编号,并且所述第一编号是第二编号之后的编号。
复制模块54,用于将所述第一编号对应的所述缓存中保存的待复制数据和待复制数据的地址信息复制到第二存储设备。
在本发明实施例中,当当前复制任务触发时,第一存储设备根据所述当前时间片编号和第二编号确定第一编号,其中,所述第二编号是所述当前复制任务之前,最近一次已完成的复制任务对应的编号,所述第一编号是所述当前复制任务触发时的当前时间片编号之前,且第二编号之后的编号,将第一编号对应的所述缓存中保存的待复制数据和待复制数据的地址信息复制到第二存储设备。由于在第二编号与当前时间片编号之间的所有编号都可以被确定为第一编号,只要被确定为第一编号都可以将其对应的待复制数据和待复制数据的地址信息复制到第二存储设备。因此即使其他灾备阵列对应的复制任务在触发时对当前时间片编号进行过修改,第一存储设备也可以通过第二编号找到没有复制到第二存储设备的待复制数据和待复制数据的地址信息,并将其复制到第二存储设备,确保了复制的完整性。
可选的,所述存储设备还可以包括:记录模块55,用于记录所述第二编号。
可选的,最近一次已完成的复制任务与当前复制任务相关联,是指当前复制任务和最近一次已完成的复制任务属于一个复制关系;所述存储设备还包括接收模块51;
接收模块51,用于接收所述复制关系对应的标识;
所述读写模块,具体用于根据所述标识读取所述当前复制任务对应的第二编号。
可选的,接收模块51还用于在当前复制任务触发之前,接收第一写数据请求,所述第一写数据请求包括所述待复制数据和待复制数据的地址信息;
读写模块52还用于在所述待复制数据和待复制数据的地址信息中增加第一编号,写入所述缓存,所述第一编号为历史时间片编号。其中,所述当前时间片编号是由所述历史时间片编号修改而成的。
可选的,复制模块54,具体用于:当所述地址信息对应多个编号时,确定所述地址信息对应的编号中最新的编号是所述第一编号;将所述第一编号对应的缓存中保存的待复制数据和待复制数据的地址信息复制到第二存储设备。
本发明实施例所提供的存储设备,用于执行前面实施例所描述的数据复制方法,各个模块功能的详细描述可参见方法实施例中的描述,在此不再赘述。
如图12,为本发明实施例提供的存储设备,包括:
处理器101、存储器102、***总线(简称总线)105和通信接口103。处理器101、存储器102和通信接口103之间通过***总线105连接并完成相互间的通信。
处理器101可能为单核或多核中央处理单元,或者为特定集成电路,或者为被配置成实施本发明实施例的一个或多个集成电路。
存储器102可以为高速RAM存储器,也可以为非易失性存储器(non-volatilememory),例如至少一个硬盘存储器。
通信接口103用于与存储设备通信。
存储器102用于存储计算机执行指令1021。具体的,计算机执行指令1021中可以包括程序代码。
当计算机运行时,处理器101运行计算机执行指令1021,可以执行图10所述的方法流程。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个设备中,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理子模块,即可以位于一个地方,或者也可以分布到多个网络子模块上。可以根据实际的需要选择其中的部分或者全部,模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (15)
1.一种数据发送方法,其特征在于,包括:
当复制任务触发时,第一存储设备修改当前时间片编号,修改后的当前时间片编号用于标识所述复制任务触发之后所述第一存储设备从主机接收的写数据请求携带的数据;
所述第一存储设备从缓存中读取待写入的数据,所述待写入的数据是第一编号与第二编号之间的所有编号所标识的写数据请求携带的所有数据,所述第一编号为修改前的当前时间片编号,所述第二编号所标识的写数据请求携带的数据已发送至第二存储设备,所述第一编号与第二编号之间的所有编号包括所述第一编号但不包括所述第二编号,所述待写入的数据尚未写入数据卷中;
所述第一存储设备将从所述缓存中读取的所述待写入的数据发送给所述第二存储设备。
2.根据权利要求1所述的方法,其特征在于,所述第一存储设备中保存有所述第二存储设备与所述第二编号之间的对应关系,所述对应关系用于指示所述第二存储设备最近一次已完成的复制任务对应的编号是所述第二编号;
所述方法进一步包括:更新所述的对应关系,以指示所述第二存储设备最近一次已完成的复制任务对应的编号是所述第一编号。
3.根据权利要求2所述的方法,其特征在于,在所述复制任务触发之前所述方法还包括:
所述第一存储设备从所述主机接收多个写数据请求,所述多个写数据请求携带的数据为从所述缓存中读取的待写入的数据的一部分或全部;
所述第一存储设备读取所述第一编号;
所述第一存储设备为所述多个写数据请求中的每个写数据请求增加所述第一编号;
所述第一存储设备将增加所述第一编号的每个写数据请求写入所述缓存。
4.根据权利要求3所述的方法,其特征在于,所述多个写数据请求还包括所述携带的数据的地址信息,所述方法还包括:
所述第一存储设备将所述携带的数据的地址信息发送给所述第二存储设备。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当所述复制任务的下一个复制任务触发时,所述第一存储设备修改所述修改后的当前时间片编号,经过两次修改后的当前时间片编号用于标识所述下一个复制任务触发之后所述第一存储设备从所述主机接收的写数据请求携带的数据;
所述第一存储设备从缓存中读取所述修改后的当前时间片编号所标识的写数据请求携带的数据;
所述第一存储设备将从所述缓存中读取的所述修改后的当前时间片编号所标识的写数据请求携带的数据发送给所述第二存储设备。
6.一种数据发送装置,其特征在于,所述装置位于第一存储设备中,包括:
当前时间片编号管理器,用于当复制任务触发时,修改当前时间片编号,修改后的当前时间片编号用于标识所述复制任务触发之后所述第一存储设备从主机接收的写数据请求携带的数据;
读写模块,用于从所述第一存储设备的缓存中读取待写入的数据,所述数据是第一编号与第二编号之间的所有编号所标识的写数据请求携带的所有数据,所述第一编号为修改前的当前时间片编号,所述第二编号所标识的写数据请求携带的数据已发送至第二存储设备,所述第一编号与第二编号之间的所有编号包括所述第一编号但不包括所述第二编号,所述待写入的数据尚未写入数据卷中;
发送模块,用于将从所述缓存中读取的所述待写入的数据发送给所述第二存储设备。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:所述读写模块还用于记录所述第二存储设备与所述第二编号之间的对应关系,所述对应关系用于指示所述第二存储设备最近一次已完成的复制任务对应的编号是所述第二编号;
所述读写模块,还用于更新所述的对应关系,以指示所述第二存储设备最近一次已完成的复制任务对应的编号是所述第一编号。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
接收模块,用于在所述复制任务触发之前,从所述主机接收多个写数据请求,所述多个写数据请求携带的数据为从所述缓存中读取的待写入的数据的一部分或全部;
所述读写模块,还用于读取所述第一编号;为所述多个写数据请求中的每个写数据请求增加所述第一编号;将增加所述第一编号的每个写数据请求写入所述缓存。
9.根据权利要求8所述的装置,其特征在于,所述多个写数据请求还包括所述携带的数据的地址信息,所述发送模块还用于将所述携带的数据的地址信息发送给所述第二存储设备。
10.根据权利要求6所述的装置,其特征在于,所述当前时间片编号管理器还用于当所述复制任务的下一个复制任务触发时,修改所述修改后的当前时间片编号,经过两次修改后的当前时间片编号用于标识所述下一个复制任务触发之后所述第一存储设备从所述主机接收的写数据请求携带的数据;
所述读写模块,还用于从缓存中读取所述修改后的当前时间片编号所标识的写数据请求携带的数据;
所述发送模块,还用于将从所述缓存中读取的所述修改后的当前时间片编号所标识的写数据请求携带的数据发送给所述第二存储设备。
11.一种存储设备,其特征在于,包括:处理器、存储器和通信总线;
其中,所述处理器和所述存储器通过所述通信总线进行通信;
所述存储器用于保存程序;
所述处理器用于执行所述程序,以实现:
当复制任务触发时,修改当前时间片编号,修改后的当前时间片编号用于标识所述复制任务触发之后所述存储设备从主机接收的写数据请求携带的数据;
从缓存中读取待写入的数据,所述待写入的数据是第一编号与第二编号之间的所有编号所标识的写数据请求携带的所有数据,所述第一编号为修改前的当前时间片编号,所述第二编号所标识的写数据请求携带的数据已发送至目标存储设备,所述第一编号与第二编号之间的所有编号包括所述第一编号但不包括所述第二编号,所述待写入的数据尚未写入数据卷中;
将从所述缓存中读取的所述待写入的数据发送给所述目标存储设备。
12.根据权利要求11所述的存储设备,其特征在于,所述存储器中保存有所述存储设备与所述第二编号之间的对应关系,所述对应关系用于指示所述存储设备最近一次已完成的复制任务对应的编号是所述第二编号;
所述处理器,还用于更新所述的对应关系,以指示所述存储设备最近一次已完成的复制任务对应的编号是所述第一编号。
13.根据权利要求11所述的存储设备,其特征在于,在所述复制任务触发之前所述处理器还用于:
从所述主机接收多个写数据请求,所述多个写数据请求携带的数据为从所述缓存中读取的待写入的数据的一部分或全部;
读取所述第一编号;
为所述多个写数据请求中的每个写数据请求增加所述第一编号;
将增加所述第一编号的每个写数据请求写入所述缓存。
14.根据权利要求13所述的存储设备,其特征在于,所述多个写数据请求还包括所述携带的数据的地址信息,所述处理器还用于将所述携带的数据的地址信息发送给所述目标存储设备。
15.根据权利要求11所述的存储设备,其特征在于,所述处理器还用于当所述复制任务的下一个复制任务触发时,所述存储设备修改所述修改后的当前时间片编号,经过两次修改后的当前时间片编号用于标识所述下一个复制任务触发之后所述存储设备从所述主机接收的写数据请求携带的数据;从缓存中读取所述修改后的当前时间片编号所标识的写数据请求携带的数据;将从所述缓存中读取的所述修改后的当前时间片编号所标识的写数据请求携带的数据发送给所述目标存储设备。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNPCT/CN2013/080203 | 2013-07-26 | ||
PCT/CN2013/080203 WO2015010327A1 (zh) | 2013-07-26 | 2013-07-26 | 数据发送方法、数据接收方法和存储设备 |
CN201380042349.5A CN104520802B (zh) | 2013-07-26 | 2013-11-15 | 数据发送方法、数据接收方法和存储设备 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380042349.5A Division CN104520802B (zh) | 2013-07-26 | 2013-11-15 | 数据发送方法、数据接收方法和存储设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107133132A CN107133132A (zh) | 2017-09-05 |
CN107133132B true CN107133132B (zh) | 2020-11-17 |
Family
ID=52794266
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710215599.4A Active CN107133132B (zh) | 2013-07-26 | 2013-11-15 | 数据发送方法、数据接收方法和存储设备 |
CN201380042349.5A Active CN104520802B (zh) | 2013-07-26 | 2013-11-15 | 数据发送方法、数据接收方法和存储设备 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380042349.5A Active CN104520802B (zh) | 2013-07-26 | 2013-11-15 | 数据发送方法、数据接收方法和存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN107133132B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112068992A (zh) * | 2016-10-28 | 2020-12-11 | 华为技术有限公司 | 一种远程数据复制方法、存储设备及存储*** |
CN107577421A (zh) * | 2017-07-31 | 2018-01-12 | 深圳市牛鼎丰科技有限公司 | 智能设备扩容方法、装置、存储介质和计算机设备 |
US10452503B2 (en) * | 2017-09-29 | 2019-10-22 | Hewlett Packard Enterprise Development Lp | Bidirectional replication |
CN109709902B (zh) * | 2017-10-25 | 2022-01-21 | 富泰华精密电子(郑州)有限公司 | 数据交互方法、***和存储器 |
CN109933413A (zh) * | 2017-12-15 | 2019-06-25 | 北京嘀嘀无限科技发展有限公司 | 业务实现方法及装置、电子设备、存储介质 |
CN111818108B (zh) * | 2019-04-10 | 2022-07-19 | 阿里巴巴集团控股有限公司 | 一种确保数据获取一致性的方法和装置 |
CN111917633B (zh) * | 2020-08-06 | 2022-08-05 | 北京金山云网络技术有限公司 | 消息发送方法、发送装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751230A (zh) * | 2009-12-29 | 2010-06-23 | 成都市华为赛门铁克科技有限公司 | 标定i/o数据的时间戳的设备及方法 |
CN102306115A (zh) * | 2011-05-20 | 2012-01-04 | 成都市华为赛门铁克科技有限公司 | 异步远程复制方法、***及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7761421B2 (en) * | 2003-05-16 | 2010-07-20 | Hewlett-Packard Development Company, L.P. | Read, write, and recovery operations for replicated data |
-
2013
- 2013-11-15 CN CN201710215599.4A patent/CN107133132B/zh active Active
- 2013-11-15 CN CN201380042349.5A patent/CN104520802B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751230A (zh) * | 2009-12-29 | 2010-06-23 | 成都市华为赛门铁克科技有限公司 | 标定i/o数据的时间戳的设备及方法 |
CN102306115A (zh) * | 2011-05-20 | 2012-01-04 | 成都市华为赛门铁克科技有限公司 | 异步远程复制方法、***及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104520802B (zh) | 2017-04-19 |
CN104520802A (zh) | 2015-04-15 |
CN107133132A (zh) | 2017-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10795788B2 (en) | Remote data replication method and system | |
EP2849048B1 (en) | Data sending method, data receiving method and storage device | |
CN107133132B (zh) | 数据发送方法、数据接收方法和存储设备 | |
US7774565B2 (en) | Methods and apparatus for point in time data access and recovery | |
US10235060B1 (en) | Multilevel snapshot replication for hot and cold regions of a storage system | |
US7840766B2 (en) | Storage system and method of producing recovery volume | |
US8078581B2 (en) | Storage system and remote copy control method | |
US7761431B2 (en) | Consolidating session information for a cluster of sessions in a coupled session environment | |
CN106776147B (zh) | 一种差异数据备份方法和差异数据备份装置 | |
US20190317872A1 (en) | Database cluster architecture based on dual port solid state disk | |
WO2015085529A1 (zh) | 数据复制方法、数据复制装置和存储设备 | |
CN110825559A (zh) | 一种数据处理方法及设备 | |
JP3667084B2 (ja) | データ多重化制御方法 | |
US10740189B2 (en) | Distributed storage system | |
CN105573862B (zh) | 一种恢复文件***的方法和设备 | |
US11853166B2 (en) | Storage system recovery without data retransmission | |
CN116601609A (zh) | 将数据存储在计算机存储中 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |