一种写数据方法、装置和系统的制作方法

文档序号:6532523阅读:108来源:国知局
一种写数据方法、装置和系统的制作方法
【专利摘要】本发明提供了写数据技术,第一控制器接收第一写请求,所述第一写请求携带有第一数据、第一写地址以及所述LUN?ID;第一控制器申请锁定所述LUN中所述第一写地址的写权限;第一控制器获得所述第一写地址写权限以后,按照所述第一写请求向第一控制器写入第一数据,以及向所述第二控制器发出第一写子请求,所述写子请求携带内容与所述写请求相同;第一控制器在所述第一控制器写完第一数据,并且接收到所述第一写子请求的写成功响应消息以后,释放锁定的所述第一写地址的写权限。
【专利说明】一种写数据方法、装置和系统
【技术领域】
[0001]本发明涉及IT领域,特别涉及一种存储技术。
【背景技术】
[0002]传统的灾备式数据中心或者两地三中心(3Data Center,3DC)通过存储阵列的远程复制技术,可以把数据从本地的生产中心备份到异地的灾备中心中,以保障当数据安全。但是如果生产中心瘫痪,需要较长时间,例如数个小时才能启动灾备中心,也就是说这种技术的恢复时间目标(recovery time objectives, RT0)比较长。
[0003]一种方案中,部署两个数据中心,每个数据中心拥有一个控制器。一个控制器作为主控制器,另一个控制器作为从控制器。当从控制器收到读写请求时,把请求转发给主控制器,由主控制器进行处理。这种做法可以一定程度上减少RT0,但是在其处理流程中,需要控制器间进行多次信息交互,时延仍然较大。

【发明内容】

[0004]本发明提供一种数据写技术。可以实现在多个控制器中写入数据。
[0005]第一方面,本发明实施例提供一种写数据方法,第一控制器设有第一逻辑单元号LUN,该方法:第一控制器接收第一写请求,所述第一写请求携带有第一待写数据、第一写地址以及所述LUN ID ;第一控制器申请锁定所述LUN中所述第一写地址的写权限;第一控制器获得所述第一写地址写权限以后,按照所述第一写请求向第一控制器写入第一待写数据,以及向所述第二控制器发出第一写子请求,所述写子请求携带内容与所述写请求相同;第一控制器在所述第一控制器写完第一待写数据,并且接收到所述第一写子请求的写成功响应消息以后,释放锁定的所述第一写地址的写权限。
[0006]第二方面,本发明实施例提供一种控制器,设有第一逻辑单元号LUN,所述LUN有LUN ID,该控制器包括处理器以及与处理器通信的存储器,所述存储器用于存储程序指令,所述处理器用于执行程序指令,该程序指令用于:接收写请求,所述写请求携带有待写数据、写地址以及所述LUNID ;
[0007]申请锁定所述LUN中所述写地址的写权限;在所述锁请求模块获得写权限以后,按照所述写请求向另一控制器写入数据,以及向所述另一控制器发出写子请求,所述写子请求携带内容与所述写请求相同;在所述第一控制器写完数据,并且接收到所述所述写子请求写成功响应消息以后,释放锁定的所述写地址的写权限。
[0008]第三方面,本发明实施例提供一种写数据系统,包括第一控制器和第二控制器,第一控制器和第二控制器通信连接,其特征在于,第一控制器设有第一逻辑单元号LUN,第二控制器设有第二逻辑单元号LUN,所述第一逻辑单元号LUN和所述第二逻辑单元号LUN的LUN ID相同,容量相同,配置相同,其中:所述第一控制器,用于接收第一写请求,所述第一写请求携带有第一待写数据、第一写地址以及所述LUN ID ;申请锁定所述第一写地址的写权限;获得所述写权限以后,按照所述写请求向第一控制器写入数据,以及向所述第二控制器发出写子请求,所述写子请求携带内容与所述写请求相同;所述第二控制器,用于收到所述写子请求后按照所述LUN ID所述第一写地址写入所述第一待写数据,然后通过所述通信连接发送写成功响应消息给所述第一控制器;所述第一控制器,还用于在本地完成所述第一待写数据的写入,并且接收到所述第二控制器写成功响应消息以后,释放锁定的所述第一写地址的写权限。
[0009]第四方面,本发明实施例提供一种读数据方法,第一控制器设有第一逻辑单元号LUN,其特征在于,第二控制器设有第二逻辑单元号LUN,所述第一逻辑单元号LUN和所述第二逻辑单元号LUN的LUN ID相同,容量相同,配置相同,该方法包括:所述第一控制器接收第一服务器发出的第一读请求,所述第一读请求携带有所述LUN ID以及第一存储地址;所述第一控制器查找所述LUN ID对应的所述第一 LUN,按照第一存储地址从所述第一 LUN中读取数据;所述第一控制器将从第一 LUN中读取的数据返回给所述第一服务器;以及,在所述第一控制器将从第一 LUN中读取的数据返回给所述第一服务器之前,所述第二控制器接收第二服务器发出的第二读请求,所述第二读请求携带有所述LUN ID以及第二存储地址;所述第二控制器查找所述LUN ID对应的所述第二 LUN,按照第二存储地址从所述第二 LUN中读取数据;所述第二控制器将从第二 LUN中读取的数据返回给所述第二服务器。
[0010]应用本发明写方法,收到写请求的控制器在本地写入数据,并发出写子请求在里一个控制器写入数据,在对两个控制器写入相同数据时,时延比现有技术更短。
【专利附图】

【附图说明】
[0011]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本发明的一些实施例,还可以根据这些附图获得其他的附图。
[0012]图1是本发明实施例存储系统的拓扑图;
[0013]图2是本发明实施例读数据方法流程图;
[0014]图3是本发明实施例写数据方法流程图;
[0015]图4是本发明实施例控制器结构示意图。
【具体实施方式】
[0016]下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例所获得的所有其他实施例,都属于本发明保护的范围。
[0017]如附图1,本发明实施例由存储阵列13、存储阵列14共同组成一种双活(AA,Active—Active)存储系统,一部分服务器11通过网络12与存储阵列13连接,另外一部分服务器11通过一个网络12与存储阵列14连接。存储阵列13和存储阵列14通信连接,共同构成存储系统I。
[0018]两个存储阵列间通过数据链路实现通信,这两个存储阵列可以跨地域部署。存储阵列13有控制器131,以及存储器132,控制器131用于管理存储器132,存储器132拥有磁盘,用于接受控制器13的管理并存储数据。需要说明的是,控制器131的数量可以I个或多个,当是多个时,多个控制器131之间可以相互通信,当一个控制器131故障后,可以由其他控制器131接管业务。存储阵列14由控制器141和存储器142共同组成,由于存储阵列14的内部结构及各组件的功能与存储阵列13相同,此处不再详述。控制器131和控制器141之间有数据链路。
[0019]当服务器11需要读出数据时,通过网络12把读请求发给控制器,例如控制器131,然后控制器131把数据从存储器132读出,并返回给发出读请求的服务器11。写数据的过程和读数据的过程相似,通过控制器131把数据写入存储器132。存储器132除了由磁盘组成,还可以是磁带、固态硬盘SSD等其他存储介质,形式上可以是硬盘框,也可以是符合存储区域网(Storage area network, SAN)的存储阵列。服务器发出的读请求或者写请求,可以基于小型计算机系统接口(SCSI,Small Computer System Interface)协议,或者基于互联网小型计算机系统接口(iSCSI, Internet Small Computer System Interface)协议。
[0020]在控制器131中有逻辑单元号(LUN,Logic Unit Number) 1311,在控制器141中有LUN1411。LUN1311和LUN1411均可被多个服务器同时访问。
[0021]LUN1311和LUN1411的配置相同。LUN1311和LUN1411可以拥有相同容量,相同的标识信息,相同的LUN配置信息,以及存储相同的数据。从服务器11中,LUN1311和LUN1411被看做是同一个LUN。可以认为LUN1311和LUN1411互为镜像,除了位于不同的控制器中以夕卜,其他信息都相同。
[0022]LUN标识信息可以包括供应商标识(Vendor Identification)、产品标识(ProductIdentification),设备标识 Device Identification,序列号(Serial Number)。
[0023]由于LUN1311和LUN1411配置信息相同。因此,当主机下发SCSI协议的设备参数查询命令模式检测(Mode Sense)、LUN持续预留(Persistent Reserve In)命令来查询该双活LUN配置信息时,收到命令的控制器直接从本地成员LUN读取配置信息。主机从从两个阵列中任意一个控制器所查询到的配置信息都是一样的。
[0024]可以将LUN1311与LUN1411同时映射给同一个服务器,或分别映射给同一个集群中的不同的服务器(如图1中所示8个服务器11,可以组成一个集群).对每个服务器(整个集群)而言,它(它们)所看到的只有一个LUN,这个LUN可以称为双活(AA,Active—Active)LUN,LUN1311和LUN1411称为这个双活LUN的成员LUN,两个成员LUN互为镜像。两个成员LUN的数据保持一致,即双活LUN的数据存两份,一份在LUN1311上,另一份在LUN1411上。服务器11看到一个LUN,服务器11发出读请求或者写请求时,可能并不知道这个双活LUN是由两个成员LUN组成。
[0025]存储阵列13和存储阵列14均可提供该双活LUN的读写访问,即提供双活LUN的跨阵列双活访问。当该双活LUN收到服务器下发的写请求时,收到写请求的控制器按镜像方式将新数据在两个成员LUN都写成功后,才返回写完成的响应消息给主机。在双活LUN的写请求处理流程,对这两个成员LUN在两个阵列间进行互斥,阻止其他写入数据的操作,以保证两个成员LUN的数据完全一致。而且存储阵列13和存储阵列14可以对同一个LUN同时进行读写访问,读访问时,可以访问同一个地址段;写访问时,访问同一个LUN的不同地址段。
[0026]当其中一个成员LUN (例如LUN1311)因故不能提供访问(例如存储器132故障或者控制器131和存储器131之间链路故障)时,则控制器131可以将收到到读/写(1/0)请求全部转发到控制器142,由阵列14提供读写服务。[0027]当其中一个存储阵列(例如存储阵列13)的控制器131发生故障或者控制器131和服务器11之间的链路故障时,另一存储阵列14可继续提供该双活LUN的读写访问,保证业务连续性。
[0028]当双活存储系统中的一个阵列发生异常,可能只有一个成员LUN成功写入数据,另外一个LUN没有写入数据,这种情况称为单写,或者单边写。单边写导致两成员LUN之间的数据产生差异,差异数据可以用差异日志方式保存在没有发生异常的阵列中。具体而言,可以保存在没有发生异常的阵列的控制器缓存、或者与这个控制器连接的存储器中。此时这两个成员LUN的数据分别处于两种状态,一个成员LUN的数据是完整的,另外一个成员LUN的数据已经过时,不再完整。当双活存储系统从异常状态恢复时,可自动或以手动方式启动后台的数据同步程序。后台的数据同步程序根据差异日志,将差异数据从完整的LUN拷贝到不完整的LUN。当该拷贝过程结束后,两个成员LUN的数据完全保持一致。同一个双活LUN的成员LUN可以记录2项信息:(I)自己是这个双活LUN的成员LUN ; (2)其他成员LUN的标记信息,通过标记信息可以找到另外一个成员LUN,标记信息例如可以包括另外一个成员LUN所属于的控制器以及另外一个成员LUN的LUN ID。
[0029]参见附图2,是本发明实施例一种业务数据读取技术,系统架构参见附图1,由于阵列13和阵列14是对称的,下面以阵列13为主体进行介绍。
[0030]步骤21,阵列13的控制器131接收服务器11下发给双活LUN的第一读请求,第一读请求携带有LUN ID以及第一存储地址。LUN ID也就是LUN标识,可以唯一标记一个LUN0第一存储地址可以包括起始地址和数据长度,用于描述在LUN ID所指示的LUN中,自起始地址开始,长度是所述数据长度的数据段的一段地址。
[0031]步骤22,控制器131接收到写请求后,找到LUN ID对应的本地成员LUN1311,按照第一存储地址,从LUN1311中读取业务数据。如果待读取的业务数据在控制器131的缓存1312中,可以从缓存1312中读取。如果待读取的业务数据不在缓存1312中,可以从存储器132中读取,具体做法可以由控制器131下发请求给存储器132,从存储器132中读取业务数据到缓存1312,然后再从缓存1312中读取业务数据。
[0032]第一存储地址可能是逻辑地址。在本步骤中,根据业务数据的来源不同,可能需要控制器131把这个逻辑地址翻译成缓存1312的物理地址或者存储器132的物理地址。当从存储器132中读取数据时,首先将数据读取到缓存1312中,再从缓存1312中获得数据。
[0033]步骤23,控制器131读取出第一读请求所请求的业务数据后,把业务数据返回给服务器11。
[0034]步骤24,控制器141收到服务器11下发给双活LUN的第二读请求,第二读请求携带有LUN ID以及第二存储地址。第二读请求写的的LUN ID和第一读请求中的LUN ID相同。第二存储地址可以是一个地址段,用起始地址和数据长度来描述。第二存储地址和第一存储地址可以相同,或者有重叠部分,或者不重叠。
[0035]步骤25,阵列14的控制器141接收到写请求,找到LUN ID对应的本地成员LUN1411,按照第二存储地址,从LUN1411中读取所需业务数据,读取方式和控制器131从LUN1311中读取数据相同。如果待读取的业务数据在控制器141的缓存1412中,可以从缓存1412中读取。也可以由控制器141下发请求给存储器142,从存储器142中读取数据到缓存1412中,再从缓存1412中读取。[0036]其中LUN1311和LUN1411的配置相同。LUN1311和LUN1411拥有相同容量,相同的LUN ID,相同的LUN配置信息,以及存储相同的数据。从服务器11中,LUN1311和LUN1411被看做是同一个LUN。
[0037]步骤26,控制器141读取出第二读请求所请求的业务数据后,把业务数据返回给服务器11。
[0038]上述步骤21—步骤23和步骤24—步骤26是2个流程,这两个流程之间时间先后顺序可以任意。例如可以先执行步骤21—步骤23再执行步骤24—步骤26,也可以先执行步骤24—步骤26再执行21—步骤23,也可以执行时间有重叠。服务器11可以不止一个,因此步骤21和步骤24中,发出写请求的可以不是同一个服务器11。例如步骤24发生在步骤21之后以及步骤23之前。
[0039]从步骤21—步骤26可以看出,控制器131和控制器141之间,或者成员LUN1311和成员LUN1411之间是平等的,任一控制器收到读请求后都可以从本地读取业务数据。而现有技术中,两个控制器之间有主从(Active — Passive)关系,如果从控制器收到读请求,需要把读请求转发给主控制器,由主控制器从主LUN中提供待读取的业务数据。因此现有技术中的读取过程更加复杂,时延更长。
[0040]需要说明的是,除了业务数据的读请求,服务器11也可能会发出LUN的配置查询或配置修改命令到控制器131或者控制器141,以获取LUN配置信息。其操作过程与步骤21—步骤26相似,不同之处在于,控制器收到LUN的配置类查询或修改命令后,直接从控制器的缓存或者控制器的其他存储介质中读取待读的信息,不需要从与控制器连接的存储器中读取。这些命令例如应用集群软件所使用的预留(Reserve)、释放(Release)、持续预留读取(Persistent Reserve In)和持续预留写入(Persistent ReserveOut)命令。业务数据和配置信息可以统称为数据。业务数据例如图片、视频、数据库数据,也称为用户数据。LUN配置信息是对LUN的配置进行管理的信息。业务数据可以通过LUN存储到存储器中。
[0041]如图3所示,本发明实施例还提供一种业务数据写技术,系统架构参见附图1,由于阵列13和阵列14是对称的,因此阵列13和阵列14的写流程相同,下面以阵列13为流程的主要执行者进行介绍。
[0042]步骤31,存储阵列13的控制器131收到服务器11发出的业务数据第一写请求,第一写请求中携带有LUN1311的LUN ID、第一写地址以及第一业务数据。第一写地址可以是一个地址段,用起始地址和数据长度来描述这个地址段,用于描述在LUN ID所指示的LUN中,自起始地址开始,以数据长度作为长度的一段地址,这一段地址也可以称为一个地址段。和读请求中的起始地址一样,写请求中的起始地址可以是逻辑块地址(LBA,LogicBlock Address)地址,LBA地址可以是由64位的二进制数组成,传输长度可以是512字节(Byte)的整数倍。这个LUN ID也是LUN1411的ID。第一业务数据是待写入存储系统的数据。
[0043]步骤32,控制器131申请锁定所述LUN中所述第一写地址的写权限。在由存储阵列13和存储阵列14组成的存储系统中,如果写权限的申请被通过,那么第一写地址会被锁定,由拥有写权限的控制器独占在第一写地址写入业务数据的权利。直到控制器131释放第一写地址的写权限之前,这一段地址无法再被其他写请求写入业务数据。写权限的管理者可以是控制器131或者控制器141或者其他独立设备。需要说明的是,本发明实施例中,对写地址锁定是全局性的,一个成员LUN的写地址被锁定后,其余成员LUN的相同写地址也会被锁定。申请锁定写地址的控制器可以把数据写入各个成员LUN的写地址中,例如将数据直接写入本地成员LUN的写地址;或者发出写子请求给其他控制器,把数据写入其他控制器的成员LUN的写地址中。
[0044]步骤33,控制器131获得写权限以后,把第一业务数据写入控制器131的LUN1311的第一写地址,以及写入控制器141的LUN1411的第一写地址。也就是说,向阵列13以及阵列14写入第一业务数据。具体做法,可以由控制器131生成2个写子请求,2个写子请求分别对应控制器131和控制器141,一个写子请求用于指示控制器131在本地写入第一业务数据,这个写子请求是可选的,因为本地操作可以不需要创建单独的写子请求;另外一个写子请求发送给控制器141,用于指示控制器141写入第一业务数据。
[0045]这两个写子请求之间,除了写入的阵列不同以外,其余信息一样,例如具有相同的LUN ID,相同的LBA,携带相同的业务数据,相同的传输长度(Transfer Length)。根据控制器的具体设置,有些情况下,可以将数据写入控制器的缓存1312后,认为完成写子请求;另外一些情况下,可以将数据写入控制器对应的存储器后,才认为完成写子请求。需要说明的是,由于控制器131已经申请了写权限,而两个写子请求的信息相同,因此控制器141不再需要申请写权限即可直接写入数据。
[0046]步骤34,控制器141完成第一业务数据的写入后,通过控制器131和控制器141之间的通信链路,发送写成功的响应消息给控制器131。当控制器131在本地完成第一业务数据的写入,并且控制器131收到控制器141发出的完成第一业务数据的响应消息后,控制器131向服务器11发送第一业务数据写入已完成的响应消息,以及释放锁定的第一写地址。向服务器11发送响应消息是可选步骤,也可以改为在控制器131中记录写入完成的状态,由服务器11主动查询这个状态来确定是否完成写入操作。发送响应消息和释放第一写地址的执行时间不做要求,可以任意一个先执行,或者二者同时执行。
[0047]如果阵列13包括多个控制器131,则由任意一个控制器131执行上述流程即可。如果阵列141包括多个控制器141,则执行写子请求的控制器131发送另外一个写子请求给任意一个控制器141即可,由收到写子请求的控制器141写入第一业务数据。
[0048]步骤31—步骤34是一个完整的写数据的流程。可选的,在执行第一写请求的过程中,还可以针对相同的LUN可以执行第二写请求,从而具有对同一个LUN并发执行双写操作的效果,参见下面的步骤35—步骤38。第一写请求的执行过程和第二写请求的执行过程是独立的,相互之间没有影响,例如,步骤35发生在步骤31与步骤35之间任意时刻。步骤35—步骤38和步骤31—步骤34是对等的,执行流程相同,所不同的是执行的具体设备发生了调换。
[0049]除了双写,在其他实施例中,除了阵列13和阵列14,还可以有其他阵列,由三个或者三个以上数量的阵列并发执行写操作。每个阵列拥有一个成员LUN,每个阵列都收到一个写请求,这些写请求的LUN ID相同,写地址不同,每个收到写请求的阵列在本地写入数据,并且指令其他阵列也写入同样数据。也就是说,本申请可以支持还可以对同一个LUN并发执行更多数量的写操作。
[0050]步骤35,控制器141收到服务器11发出的业务数据第二写请求,第二写请求中携带有LUN ID,第二写地址,以及第二业务数据。这个LUNID是LUN1411的ID,由于LUN1311和LUN1411的ID相同,因此它也是LUN1311的ID。也就说,步骤36中的LUN ID和步骤31中的LUNID相同。第二写地址和第一写地址无重叠部分,或者说位于同一个LUN中的不同区域。由于写地址是一个地址段,因此可以写地址理解若干个独立地址的集合,那么第一写地址和第二写地址没有交集。服务器11可以不止一个,因此步骤31和步骤35中,发出写请求的可以不是同一个服务器11。
[0051]步骤36,控制器141申请锁定所述LUN中所述第二写地址的写权限。在由存储阵列13和存储阵列14组成的存储系统中,如果写权限的申请被通过,那么第二写地址会被锁定,由拥有写权限的控制器独占在第二写地址写入业务数据的权利。直到控制器141释放对第二写地址的写权限之前,这第二写地址无法再被其他写请求写入业务数据。写权限的管理者可以是控制器131或者控制器141或者其他独立设备。
[0052]步骤37,控制器141获得写权限以后,向控制器141写入第二业务数据以及向控制器131写入第二业务数据。或者说,向阵列13以及阵列14写入第二业务数据。控制器141可以生成2个写子请求,2个写子请求分别对应2个控制器141和控制器131,一个写子请求用于指示控制器141在本地写入数据,由于是本地化操作,可以不需要创建单独的写子请求,因此这个写子请求是可选的;另外一个写子请求发送给控制器131,用于指示控制器131写入数据。
[0053]这两个写子请求之间,除了写入的阵列不同以外,其余信息一样,例如具有相同的LUN ID,相同的LBA,携带相同的业务数据,相同的传输长度(Transfer Length)。根据控制器的具体设置,有些情况下,可以将数据写入控制器的缓存后,认为完成写子请求;另外一些情况下,可以由控制器先将数据写入缓存,再从缓存将数据写入控制器对应的存储器后,才认为完成写子请求。不管哪一种情况,都需要经过缓存,并且都由控制器确定写子请求是否执行完成,因此可以认为数据是写入了控制器。需要说明的是,由于控制器141已经申请了写权限,而两个写子请求的信息相同,因此控制器141不再需要申请写权限即可直接写入数据。
[0054]步骤38,控制器131完成第二业务数据的写入后,通过控制器141和控制器131之间的通信链路,发送写成功的响应消息给控制器141。当控制器141在本地完成第二数据时的写入,并且控制器141收到控制器131发出的完成第二业务数据的响应消息后,控制器141向发出第二写请求的服务器11发送第二写请求已完成的响应消息,以及释放锁定的第二写地址。向服务器11发送响应消息是可选步骤,也可以改为在控制器141中记录写入完成的状态,由服务器11主动查询这个状态来确定是否完成写入操作。发送响应消息和释放第二写地址的执行时间不做要求,可以任意一个先执行,或者二者同时执行。数据写入控制器131也可以表述为控制器131将数据写入阵列13中,在逻辑上,写入位置是控制器的LUN。在物理上,写入位置可以是控制器13的缓存,也可以是阵列的存储器132;数据写入控制器141也可以表述为控制器131将数据写入阵列14中,具体写入位置可以是控制器14的缓存,也可以是阵列的存储器142。
[0055]除了业务数据的写入,上述方法也可以适用于LUN的配置信息的写入。区别点在于,写入配置信息时,直接写入控制器的缓存或者控制器的其他存储介质,不需写入与控制器连接的存储器锁定;此外,写入业务数据时,锁定的是一段地址范围,而写入配置信息时,锁定的内容是配置信息对应的配置项。本申请将业务数据、配置信息统称为数据。[0056]如图4所示,是一种写数据装置4的实施例,用于执行步骤31—步骤34的方法。写数据装置包括接收模块41、锁请求模块42、写数据模块43、锁释放模块44以及发送模块45。
[0057]接收模块41,用于接收服务器11发出的业务数据第一写请求,第一写请求中携带有待写的业务数据、LUN1311的LUN ID以及写地址。
[0058]锁请求模块42,用于申请锁定所述LUN中所述写地址的写权限。
[0059]写数据模块43,锁请求模块42获得写权限以后,向控制器131写入业务数据,以及通过发送模块45向控制器141发出写子请求,这个写子请求携带的内容和写请求相同。写子请求用于指示控制器141按照控制器131的相同LUN的相同写地址,写入相同的数据。控制器131是本地控制器,写数据装置4位于控制器131中,可以作为软件运行于控制器131,或者作为硬件集成于控制器131,可以把控制器131称为第一控制器;控制器141不是本地控制器,可以称为第二控制器。
[0060]锁释放模块44,当所述写模块43完成控制器131的写入,以及接收模块41收到控制器141发出的写完成消息后,用于在向控制器释放第一写地址的写权限。
[0061]可选的,当所述写模块43完成控制器131的写入,以及接收模块41收到控制器141发出的写完成消息后,发送模块45还可以用于向服务器11发出写入完成的响应消息。
[0062]可选的,接收模块41还可以用于接收另一个写数据装置发送的写子请求,按照写子请求的要求写入数据。并在写入完成后,通过发送模块45返回写成功的响应消息给这另一个写数据装置。另一个写数据装置例如集成在控制器14中。
[0063]如图4,控制器131中,设有第一逻辑单元号LUN1311,LUN1311有LUN ID,该控制器131包括处理器1313以及与处理器1313通信的存储器1314,所述存储器1314用于存储程序指令,所述处理器1313用于执行程序指令,该程序指令可以执行前述的方法,例如用于:接收写请求,所述写请求携带有待写数据、写地址以及所述LUN ID ;申请锁定所述LUN中所述写地址的写权限;在所述锁请求模块获得写权限以后,按照所述写请求向另一控制器14写入数据,以及向所述另一控制器14发出写子请求,所述写子请求携带内容与所述写请求相同;在所述第一控制器13写完数据,并且接收到所述另一控制器14写成功的响应消息以后,释放锁定的所述写地址的写权限。其中,控制器13写入数据的过程,是处理器1313将数据写入缓存1312,缓存1312和缓存1314可以是同一个缓存,也可以是独立的两个。
[0064]处理1313可能是一个中央处理器CPU,或者是特定集成电路ASIC (ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。存储器1314可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
[0065]控制器14包括第二 LUN1411、缓存1412、处理器1313和缓存1314,各器件的功能和控制器13相同,可以接收写请求,在本地写入数据以及发送写子请求给控制器13,在控制器13也写入数据。处理器1313和处理器1413通信。
[0066]上述实施例对2个成员LUN组成双活LUN进行了介绍。本发明实施例可以扩展,由三个或者三个以上的控制器互连,每个控制器提供一个成员LUN共同支持一个多活的LUN,写数据时,同样的数据写入每个成员LUN;读数据时,可以从任意成员LUN读出数据。写数据时,通过对地址段锁定的方式,可以实现从三个以上控制器同时对一个LUN的不同地址段读出数据。
[0067]通过以上的实施方式的描述,可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0068]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何人员在本发明揭露的技术范围内,想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【权利要求】
1.一种写数据方法,第一控制器设有第一逻辑单元号LUN,其特征在于,该方法: 第一控制器接收第一写请求,所述第一写请求携带有第一数据、第一写地址以及所述LUN ID ; 第一控制器申请锁定所述LUN中所述第一写地址的写权限; 第一控制器获得所述第一写地址写权限以后,按照所述第一写请求向第一控制器写入第一数据,以及向所述第二控制器发出第一写子请求,所述写子请求携带内容与所述写请求相同; 第一控制器在所述第一控制器写完第一数据,并且接收到所述第一写子请求的写成功响应消息以后,释放锁定的所述第一写地址的写权限。
2.根据权利要求1所述的写数据方法,其特征在于,在释放锁定的所述第一写地址的与权限之如,进一步包括: 第二控制器接收服务器的第二写请求,所述第二写请求写的有所述LUN ID、第二数据以及第二写地址,其中,第二控制器设有第二逻辑单元号LUN,第一逻辑单元号LUN和所述第二逻辑单元号LUN的LUN ID相同,容量相同,配置相同,所述第二写地址与所述第一写地址无交集; 第二控制器申请锁定所述LUN中所述第二写地址的写权限; 第二控制器获得所述第二写地址写权限以后,按照所述第二写请求向第二控制器写入第二数据,以及向所述第一控制器发出第二写子请求,所述第二写子请求携带内容与所述写请求相同; 第二控制器在所述第一控制器写完第二数据,并且接收到所述第二写子请求的写成功响应消息以后,释放锁定的所述第二写地址的写权限。
3.根据权利要求2所述的写数据方法,其特征在于,所述方法进一步包括: 所述第一控制器收到所述第二写子请求后,按照所述第二写地址以及所述LUN ID,在本地写入所述第二数据。
4.根据权利要求1所述的写数据方法,其特征在于,所述方法进一步包括: 所述第二控制器收到所述第一写子请求后,按照所述第一写地址以及所述LUN ID,在本地写入所述第一数据。
5.根据权利要求1一4任一项所述的写数据方法,其特征在于,所述方法进一步包括: 所述数据是业务数据,所述第一写地址是地址段;或者 所述数据是配置信息,所述第一写地址是配置信息对应的配置项。
6.一种控制器,设有第一逻辑单元号LUN,所述LUN有LUN ID,该控制器包括处理器以及与处理器通信的存储器,所述存储器用于存储程序指令,所述处理器用于执行程序指令,该程序指令用于: 接收写请求,所述写请求携带有数据、写地址以及所述LUN ID ; 申请锁定所述LUN中所述写地址的写权限; 在所述锁请求模块获得写权限以后,按照所述写请求向另一控制器写入数据,以及向所述另一控制器发出写子请求,所述写子请求携带内容与所述写请求相同; 在所述第一控制 器写完数据,并且接收到所述所述写子请求写成功响应消息以后,释放锁定的所述写地址的写权限。
7.根据权利要求6任一项所述的写数据方法,其特征在于,所述方法进一步包括: 所述数据是业务数据,所述第一写地址是地址段;或者 所述数据是配置信息,所述第一写地址是配置信息对应的配置项。
8.一种写数据系统,包括第一控制器和第二控制器,第一控制器和第二控制器通信连接,其特征在于,第一控制器设有第一逻辑单元号LUN,第二控制器设有第二逻辑单元号LUN,所述第一逻辑单元号LUN和所述第二逻辑单元号LUN的LUN ID相同,容量相同,配置相同,其中: 所述第一控制器,用于接收第一写请求,所述第一写请求携带有第一数据、第一写地址以及所述LUN ID ;申请锁定所述第一写地址的写权限;获得所述写权限以后,按照所述写请求向第一控制器写入数据,以及向所述第二控制器发出写子请求,所述写子请求携带内容与所述写请求相同; 所述第二控制器,用于收到所述写子请求后按照所述LUN ID所述第一写地址写入所述第一数据,然后通过所述通信连接发送写成功响应消息给所述第一控制器; 所述第一控制器,还用于在本地完成所述第一数据的写入,并且接收到所述第二控制器写成功响应消息以后,释放锁定的所述第一写地址的写权限。
9.根据权利要求7所述的系统,其特征在于: 所述第二控制器还用于:在第一控制器释放所述第一写地址的写权限之前,接收第二写请求,所述第二写请求携带有第二数据、第二写地址以及所述LUN ID ;申请锁定所述第二写地址的写权限;获得所述第二写地址写权限以后,按照所述第二写请求向第二控制器写入数据,以及向所述第一控制器发出第二写子请求,所述第二写子请求携带内容与所述第一写请求相同,其中第二写地址与所述第一写地址没有交集;` 所述第一控制器,还用于收到所述写第二子请求后按照所述LUN ID所述第二写地址写入所述第二数据,然后通过所述通信连接发送写成功响应消息给所述第一控制器; 所述第二控制器,还用于在本地完成所述第二数据的写入,并且接收到所述第一控制器写成功响应消息以后,释放锁定的所述第二写地址的写权限。
10.一种读数据方法,第一控制器设有第一逻辑单元号LUN,其特征在于,第二控制器设有第二逻辑单元号LUN,所述第一逻辑单元号LUN和所述第二逻辑单元号LUN的LUN ID相同,容量相同,配置相同,该方法包括: 所述第一控制器接收第一服务器发出的第一读请求,所述第一读请求携带有所述LUNID以及第一存储地址;所述第一控制器查找所述LUN ID对应的所述第一 LUN,按照第一存储地址从所述第一 LUN中读取数据;所述第一控制器将从第一 LUN中读取的数据返回给所述第一服务器;以及 在所述第一控制器将从第一 LUN中读取的数据返回给所述第一服务器之前,所述第二控制器接收第二服务器发出的第二读请求,所述第二读请求携带有所述LUN ID以及第二存储地址;所述第二控制器查找所述LUN ID对应的所述第二 LUN,按照第二存储地址从所述第二 LUN中读取数据;所述第二控制器将从第二 LUN中读取的数据返回给所述第二服务器。
【文档编号】G06F13/16GK103827843SQ201380002555
【公开日】2014年5月28日 申请日期:2013年11月28日 优先权日:2013年11月28日
【发明者】蒋培军, 李小华 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1