一种维护主从式双控软Raid6一致性的方法及系统的制作方法
【专利摘要】本发明提出一种维护主从式双控软Raid6一致性的方法及系统,该方法包括主控制器节点中Raid6设备获取数据更新请求,主控制器节点中Raid6设备计算数据更新请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的Raid6校验设备中,Raid6设备计算校验值,并对数据小盘Data Disk与校验小盘Parity Disk下发更新请求,写入快照源,作为新数据,当所有Data Disk与Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中;并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中;主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据更新位置,通过对Data Disk与Parity Disk的发送Remap指令,将新数据重映射到快照设备Data Snapshot与Parity Snapshot。
【专利说明】
一种维护主从式双控软Ra i d6—致性的方法及系统
技术领域
[0001]本发明涉及计算机网络存储领域,特别涉及一种维护主从式双控软Raide—致性的方法及系统。
【背景技术】
[0002]RAID(独立冗余磁盘阵列)技术是一种提供增强冗余、容量和存储性能的存储方法,有着较强的可管理性、可靠性和可用性。Raid算法根据实现原理可分为不同的级别,分别用1^0(10、1^丨(11、1^丨(14、1^丨(15、1^0(16、1^丨(110等表示,其中1^丨(16是可靠性最高的,它具有2个校验盘,可以容忍2个磁盘失效,如图1所示,Parity Disk的数据由所有组成Raid6的Data Disk上的数据通过校验公式计算得到。Raid算法可以由硬件Raid卡来实现,也可以由软件来实现,比如Linux MD Raid算法,由于软件实现的Raid算法,更容易部署,下文所述的Ra i d算法都是指软件实现的Ra i d算法,简称软Ra i d。
[0003]传统的Raid6技术存在控制器单点故障和被称为“WriteHole”的一致性问题,单点故障是指控制器节点故障,数据访问就会中断;一致性问题是指在写过程中发生RAID控制器故障(如系统崩溃或断电)引起条带上的数据和校验不一致,这会导致:即使控制器修复,数据的一致性已经不能保证(校验公式两侧不相等),如图2所示,一致性问题的根本原因在于RAID存储过程涉及多个磁盘,却不是一个原子操作,因而不能避免写入过程被异常中断而产生的Write Hole问题,该问题是由收到新数据和计算出的新校验直接写在旧的位置上所导致的。
[0004]为了避免单控制器故障,可以采用双控制器的方案,比如AutoRaid,双控RAID使用2个RAID控制器,分别放置在2个不同物理服务器节点上,用于容忍控制器单点故障,两个RAID控制器分别以DAS(Direct Attached Storage)的方式直接连接到所有磁盘,其中一个控制器故障,还可以由另外一个继续工作,如图3所示,根据工作模式不同,双控Raid6可以分为双活和主从两种,双活是指两个控制器同时接受相同的数据访问;主从是指两个控制器中有一个为主控制器,接受数据访问,另外一个备用控制器,只有在主控制器故障时才接受数据访问,本发明主要涉及主从模式的双控制器Raid6,以下简称主从式双控Raid6,但是技术思想依然适用于主从式硬件Raid6控制器。
[0005]双控仅解决Rai d6的单点故障问题,而解决一致性问题最直接的方式是可以通过将新数据和新校验写到另一个新的位置而不是覆盖旧数据,这样即使更新时出现控制器故障等异常,也不会影响旧数据的一致性,现有技术中,多采用预写日志或者COW机制来解决一致性问题,比如ZFS中的Raid-Z。预写日志,是指数据先写入日志,在更新旧数据,通过维护日志提交状态来保存数据一致性;COW机制,是指旧数据先拷贝在更新,通过重映射保存一致性,因此,预写日志和COW机制都可以保证正在更新的数据和校验不覆盖旧数据,但是存储开销和拷贝开销会影响Raid6的性能,如图4所示,对于主从模式控制器,主控制器需要把相关信息传给从控制器,保持二者之间的同步,否则主控制器故障后,从控制器即使工作也无法提供正确的数据,既然要同步二者的数据,主从控制器的同步开销过大必然会影响 Raid的访问性能。
【发明内容】
[0006]针对现有技术的不足,本发明提出一种维护主从式双控软Raid6—致性的方法及系统。
[0007 ]本发明提出一种维护主从式双控软Ra i d6—致性的方法,包括:
[0008]步骤I,主控制器节点中Raid6设备获取数据更新请求,主控制器节点中Raid6设备计算数据更新请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的Raid6校验设备中,Raid6设备计算校验值,并对数据小盘Data Disk与校验小盘Parity Disk下发更新请求,写入快照源,作为新数据;
[0009]步骤2,当所有Data Disk与Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中;并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中;
[0010]步骤3,主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据更新位置,通过对Data Disk与Parity Disk的发送Remap指令,将新数据重映射到快照设备DataSnapshot与Parity Snapshot,当所有重映射指令完成时,主控制器节点在内存中记录位图更新状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。
[0011]如果主控制器节点在步骤I或者步骤2内发生故障,当从控制器节点接替后,依然看到的是位图更新状态A,表示是旧数据;如果主控制器节点在步骤3内发生故障,从控制器节点接替主控制器节点后会看到位图更新状态B,继续完成步骤3,从而保证了新数据一致性。
[0012]如果主控制器节点与从控制器节点同时发生故障,则在重启之后,需要从主控制器节点的校验设备中读取出位图信息,如果位图信息中位图更新状态A,不需要任何操作;如果位图更新状态B,则通过Remap指令重映射新数据到旧数据,当所有重映射完成时,更新位图状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。
[0013]对于Raid6设备的每一个条带,固定使用两个bit位表示:位图更新状态A为00,位图更新状态B为10。
[0014]本发明还提出一种维护主从式双控软Raid6—致性的系统,包括:
[0015]数据模块,用于主控制器节点中Raid6设备获取数据更新请求,主控制器节点中Raid6设备计算数据更新请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的Raid6校验设备中,Raid6设备计算校验值,并对数据小盘Data Disk与校验小盘Parity Disk下发更新请求,写入快照源,作为新数据;
[ΟΟ?6] 位图状态模块,用于当所有Data Disk与Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中;
[0017]重映射模块,用于主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据更新位置,通过对Data Disk与Parity Disk的发送Remap指令,将新数据重映射到快照设备Data Snapshot与Parity Snapshot,当所有重映射指令完成时,主控制器节点在内存中记录位图更新状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。
[0018]如果主控制器节点在所述的数据模块或者所述的位图状态模块内发生故障,当从控制器节点接替后,依然看到的是位图更新状态A,表示是旧数据;如果主控制器节点在所述的重映射模块内发生故障,从控制器节点接替主控制器节点后会看到位图更新状态B,继续完成更新模块,从而保证了新数据一致性。
[0019]如果主控制器节点与从控制器节点同时发生故障,则在重启之后,需要从主控制器节点的校验设备中读取出位图信息,如果位图信息中位图更新状态A,不需要任何操作;如果位图更新状态B,则通过Remap指令重映射新数据到旧数据,当所有重映射完成时,更新位图状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。
[°02°]对于Raid6设备的每一个条带,固定使用两个bit位表示:位图更新状态A为00,位图更新状态B为10。
[0021 ]由以上方案可知,本发明的优点在于:
[0022]本发明在解决主从式双控软Raid6—致性问题时,采用了两阶段更新机制,将新数据和新校验写入新位置,保证了数据一致性,没有引入额外的存储开销和拷贝开销;并且更新的状态会低开销地由主控制器传递给从控制器,降低对性能的影响。
【附图说明】
[0023]图1为Raid6结构示意图;
[0024]图2为Raid6的WriteHole问题图;
[0025]图3为双控Raid6的示意图;
[0026]图4为预写日志、COW机制解决一致性问题图;
[0027]图5为主从式Raid6控制器系统结构图;
[0028]图6为本发明第一阶段更新过程图;
[0029]图7为本发明第二阶段重映射过程图;
[0030]图8为本发明数据访问流程图。
【具体实施方式】
[0031]下面给出本发明的【具体实施方式】,结合附图对本发明做出了详细描述,本
【发明内容】
包括系统结构,数据一致性维护方法,数据访问过程三部分。
[0032](一)系统结构
[0033]系统两个控制器,位于不同的服务器节点,管理同样的磁盘设备,其中一个作为主控制器,另外一个作为从控制器,备用;只有主控制器故障后,从控制器才能工作,如图5所示,Raid6控制器、Data Disk和Parity Disk可以分别属于网络存储的不同节点;为节省资源,控制器和Parity Disk可以属于同一节点:主控制器和一个Parity Disk属于一个节点,从控制器和另外一个Parity Disk属于另外的节点。主控制器和从控制器之间的同步机制,借助于网络互联协议实现,比如ISCSI/SCST。以下,称主控制器所在的节点为主控制器节点,从控制器所在的节点为从控制器节点,客服端在使用该系统时,借助与多路径软件和两个控制器节点相连,并配置其中切换策略为ALUA(Asymmetric Logical Unit Access)。
[0034]磁盘设备作为物理存储单元,负责数据存储,其中数据有新旧之分,旧数据以新数据的快照形式存在,新数据作为旧数据的快照源存在,快照设备Disk Snapshot和ParitySnapshot保存了逻辑访问地址和实际存储地址的映射关系,支持重映射命令。
[0035]同一位置的新数据和旧数据会存在不同的设备,当新数据达到一致状态,会利用数据重映射转化为旧数据,原有的旧数据会删除,这个转化过程没有数据移动开销,对性能影响低,数据磁盘设备,负责数据的存储和元数据的存储,写入数据磁盘的数据,会同时记录和数据相关的状态。(二)数据一致性维护方法
[0036]Raid6的一致性问题,根本原因是数据和校验的更新过程不满足原子性,为了维护Raid6的一致性,本发明设计了两阶段的更新协议:新的数据和校验并不直接覆盖旧的数据和校验,而是等所有的更新都完成,才算是新一致状态,否则,还是旧一致状态,这样的好处在于:在部分数据得到更新时发生控制器故障,并不影响旧一致状态;新状态在达到一致之前,数据的更新并不对外可见。
[0037]两个Raid6控制器在组建Raid6设备时,会在内存中预先分配好所有数据条带的状态位图,并初始化。
[0038]由于数据读请求不影响一致性,本发明以写请求为主,介绍数据一致性维护方法:两阶段更新,第一阶段更新是在用户请求的路径上进行,第二阶段是异步进行,其具体步骤如下:
[0039]1.第一阶段更新,如图6所示:
[0040]1.1、用户数据更新请求进入主控制器节点的Raid6设备;
[0041]1.2、Raid6设备计算该请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的校验设备中;
[0042]1.3、Raid6设备计算校验值,并对数据小盘和校验小盘下发更新请求;对DataD i s I^PPar ity D i s k的1,会写入快照源,作为新数据;
[0043]1.4、所有的Data Disk和Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中;并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中;
[0044]1.5、第一阶段结束,用户数据更新请求结束;
[0045]2.第二阶段更新,如图7所示:
[0046]2.1、主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据位置;
[0047]2.2、通过对Data Disk和Parity Disk的这些位置发送Remap指令,将快照源上的数据重映射到快照设备Data Snapshot和Parity Snapshot;
[0048]2.3、等所有的重映射指令完成,主控制器节点中Raid6内部记录位图更新状态为A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,固化在从控制器节点的校验设备中;
[0049]2.4、第二阶段结束;
[0050]在某次数据更新时,发生主控制器故障,多路径软件会切换到从控制器,将当时出错的请求进行重发,如果主控制器是在第一阶段内故障,这些数据更新并没有覆盖旧数据,当从控制器接替后,依然看到的是位图更新状态A,表示是旧状态;如果主控制器是在第二阶段内故障,从控制器接替后会看到位图更新状态B,可以继续完成第二阶段,从而保证了新状态一致性,需要说明的是,Remap指令是幂等操作:多次执行Remap指令的结果是一样的。
[0051]在第二阶段中,新数据是通过Remap指令重映射到旧数据状态,这个过程只是映射关系的改变,并没有数据移动开销,同时为了降低同步的开销,本发明采用了位图来记录更新状态:对于Raid6的每一个条带,固定使用两个bit位表示:更新状态A为00,更新状态B为10,因此,构建Raid6的Data Disk数量增多也不影响位图的空间开销,只维护位图就可以维护一致性,是因为一旦更新状态为B,则说明新的数据和校验一定都保存在磁盘上;如果更新状态为A,那么新数据不一定得到了更新,因此只能信任旧的数据和校验。
[0052]如果发送两个控制器同时故障(比如机房停电),那么在重启之后,需要从主控制器的校验设备中先读取出位图信息,然后根据位图的状态,进行不同的操作:
[0053]I)如果位图的更新状态是A,不需要任何操作;
[0054]2)如果位图的更新状态是B,则先要通过Remap指令重映射新数据到旧数据状态,也就是将快照源的数据Remap到快照上。
[0055](三)数据访问过程
[0056]在两阶段更新的过程中,如果有其他的数据访问请求,需要根据当前的位图更新状态来判断数据的位置,如图8所示。
[0057]I)如果此时是读请求,并且位图状态为A,那么此时是旧状态一致,则需要从DataSnapshot快照上读取数据,如果位图状态为B,那么此时是新状态一致,就首先对Data Disk进行一次Remap操作将数据重映射到Data Snapshot,然后再从Data Snapshot快照上读取。
[0058]2)如果此时是写请求,操作比较简单,就是需要等待前面的写请求完成,并且更新状态为变为A才可以继续进行。
[0059]本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
[0060]本发明还提出一种维护主从式双控软Raid6—致性的系统,包括:
[0061]数据模块,用于主控制器节点中Raid6设备获取数据更新请求,主控制器节点中Raid6设备计算数据更新请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的Raid6校验设备中,Raid6设备计算校验值,并对数据小盘Data Disk与校验小盘Parity Disk下发更新请求,写入快照源,作为新数据;
[0062]位图状态模块,用于当所有Data Disk与Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中;
[0063]重映射模块,用于主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据更新位置,通过对Data Disk与Parity Disk的发送Remap指令,将新数据重映射到快照设备Data Snapshot与Parity Snapshot,当所有重映射指令完成时,主控制器节点在内存中记录位图更新状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。
[0064]如果主控制器节点在所述的数据模块或者所述的位图状态模块内发生故障,当从控制器节点接替后,依然看到的是位图更新状态A,表示是旧数据;如果主控制器节点在所述的重映射模块内发生故障,从控制器节点接替主控制器节点后会看到位图更新状态B,继续完成更新模块,从而保证了新数据一致性。
[0065]如果主控制器节点与从控制器节点同时发生故障,则在重启之后,需要从主控制器节点的校验设备中读取出位图信息,如果位图信息中位图更新状态A,不需要任何操作;如果位图更新状态B,则通过Remap指令重映射新数据到旧数据,当所有重映射完成时,更新位图状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。
[ΟΟ??] 对于Raid6设备的每一个条带,固定使用两个bit位表示:位图更新状态A为00,位图更新状态B为10。
【主权项】
1.一种维护主从式双控软Raid6—致性的方法,其特征在于,包括: 步骤I,主控制器节点中Raid6设备获取数据更新请求,主控制器节点中Raid6设备计算数据更新请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的Raid6校验设备中,Raid6设备计算校验值,并对数据小盘Data Disk与校验小盘ParityDisk下发更新请求,写入快照源,作为新数据; 步骤2,当所有Data Disk与Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中;并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中; 步骤3,主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据更新位置,通过对Data Disk与Parity Disk的发送Remap指令,将新数据重映射到快照设备DataSnapshot与Parity Snapshot,当所有重映射指令完成时,主控制器节点在内存中记录位图更新状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。2.如权利要求1所述的维护主从式双控软Raid6—致性的方法,其特征在于,如果主控制器节点在步骤I或者步骤2内发生故障,当从控制器节点接替后,依然看到的是位图更新状态A,表示是旧数据;如果主控制器节点在步骤3内发生故障,从控制器节点接替主控制器节点后会看到位图更新状态B,继续完成步骤3,从而保证了新数据一致性。3.如权利要求1所述的维护主从式双控软Raid6—致性的方法,其特征在于,如果主控制器节点与从控制器节点同时发生故障,则在重启之后,需要从主控制器节点的校验设备中读取出位图信息,如果位图信息中位图更新状态A,不需要任何操作;如果位图更新状态B,则通过Remap指令重映射新数据到旧数据,当所有重映射完成时,更新位图状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。4.如权利要求1所述的维护主从式双控软Raid6—致性的方法,其特征在于,对于Raid6设备的每一个条带,固定使用两个bit位表示:位图更新状态A为00,位图更新状态B为10。5.一种维护主从式双控软Raid6—致性的系统,其特征在于,包括: 数据模块,用于主控制器节点中Raide设备获取数据更新请求,主控制器节点中Raide设备计算数据更新请求对应的数据更新位置,并在内存中记录位图更新状态A,并固化在主控制器节点的Raid6校验设备中,Raid6设备计算校验值,并对数据小盘Data Disk与校验小盘Parity Disk下发更新请求,写入快照源,作为新数据; 位图状态模块,用于当所有Data Disk与Parity Disk更新完成,在内存中记录位图更新状态B,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中; 重映射模块,用于主控制器节点中Raid6设备在内存中找到位图更新状态为B的数据更新位置,通过对Data Disk与Parity Disk的发送Remap指令,将新数据重映射到快照设备Data Snapshot与Parity Snapshot,当所有重映射指令完成时,主控制器节点在内存中记录位图更新状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。6.如权利要求5所述的维护主从式双控软Raid6—致性的系统,其特征在于,如果主控制器节点在所述的数据模块或者所述的位图状态模块内发生故障,当从控制器节点接替后,依然看到的是位图更新状态A,表示是旧数据;如果主控制器节点在所述的重映射模块内发生故障,从控制器节点接替主控制器节点后会看到位图更新状态B,继续完成更新模块,从而保证了新数据一致性。7.如权利要求5所述的维护主从式双控软Raid6—致性的系统,其特征在于,如果主控制器节点与从控制器节点同时发生故障,则在重启之后,需要从主控制器节点的校验设备中读取出位图信息,如果位图信息中位图更新状态A,不需要任何操作;如果位图更新状态B,则通过Remap指令重映射新数据到旧数据,当所有重映射完成时,更新位图状态A,固化在主控制器节点的校验设备中,并同步到从控制器节点中Raid6设备,并固化在从控制器节点的校验设备中。8.如权利要求5所述的维护主从式双控软Raid6—致性的系统,其特征在于,对于Raid6设备的每一个条带,固定使用两个bit位表示:位图更新状态A为00,位图更新状态B为10。
【文档编号】G06F3/06GK105843560SQ201610218815
【公开日】2016年8月10日
【申请日】2016年4月8日
【发明人】刘建亮, 刘振军, 贾思懿, 方沛, 许鲁
【申请人】中国科学院计算技术研究所, 天津中科蓝鲸信息技术有限公司