首页 > 代码库 > Windows Server 存储空间之存储冗余
Windows Server 存储空间之存储冗余
存储空间冗余度
在存储控制器服务器高可用结构中,使用不同数量的JBOD或者不同方式的存储空间布局,达到的冗余程度也有差别。如果使用两个存储箱则无法开启存储箱感知能力,从而无法实现JBOD存储箱级别的冗余,所以要实现JBOD存储箱级别的冗余必须要使用三个JBOD。如果存储空间使用双重镜像布局,存储空间最多允许一块硬盘故障,如果同时发生两块硬盘故障,那么存储将失效;而使用三重镜像布局,那么同时最多允许两块硬盘故障。Windows Server 第一代SDS结构中,存储空间冗余矩阵总结如下。
冗余类型 | 3 JBOD 存储箱 | 4 JBOD 存储箱 |
简单 | 不支持 | 不支持 |
双重镜像 | 一个存储箱或者一块磁盘 | 一个存储箱或者一块磁盘 |
三重镜像 | 一个存储箱和一块磁盘; 两块磁盘 | 一个存储箱和一块磁盘; 两块磁盘 |
单奇偶校验 | 不支持 | 不支持 |
双奇偶校验 | 不支持 | 一个存储箱和一块磁盘; 两块磁盘 |
存储空间可用性详述
在JBOD级别,三个JBOD能提供JBOD存储箱级别的冗余,因为存储控制器在数据条带化后,在底层为列选择写入的硬盘时,存储箱感知的目的是为数据写入列时为列选择不在同一个JBOD里的硬盘。存储空间数据条带后,每一份条带的数据通过I/O镜像一式两份或三份,每一份先写入列,由列把数据最终写入到硬盘。在镜像布局的存储空间里,不同的列里包含两块或三块硬盘,这些硬盘来自于一个JBOD或者不同JBOD将直接决定存储空间的JBOD级别的冗余性。
在硬盘级别,虚拟磁盘的镜像和RAID1在为数据存储时选择磁盘的原理相似,但是和RAID1/RAID10对称式的结构允许的最大硬盘故障数不同,RAID1/RAID10可以在发生一半的硬盘故障时存储依然可用。存储空间列并不会将硬盘对称地分为固定的两组或者三组然后写入数据的各个副本,列选择硬盘时遵循随机性和平均原则,随机性说明列每次为条带的数据的副本选择的写入的硬盘是变化的,平均原则说明列在选择硬盘时所有硬盘被选中的概率是一样的,而且数据条带越多越接近平均。以双重镜像的虚拟磁盘为例,复制一个100GB大小的文件到存储空间,换算成KB的单位为104857600KB,默认的Interleave为256K,先后要写409600个列,意味着要写409600对硬盘,就要产生409600对随机硬盘组合,那么每个参与数据写入的硬盘次数达到平均就成了一个必然事件。因此双重镜像的虚拟磁盘即使包含多个硬盘,每个硬盘必然都保存有这100GB文件的数据块副本,一块硬盘故障数据仍然完整,但是再有第二块硬盘同时故障,必然有数据块丢失而导致文件不完整,所以只能承受一块硬盘损坏的故障。同理,虚拟磁盘的三重镜像将会把一份数据被复制成三份写在三个不同的硬盘里,虚拟磁盘可以承受两块硬盘损坏的故障。
接下来我们列举不同的JBOD数量和存储空间布局矩阵关系的例子来阐述存储空间如何达到预期的可用性目标。
两个JBOD存储箱
系统默认设计为两个JBOD不支持存储箱感知,所以两个JBOD不是推荐的配置,除非用于测试环境,或者对数据有额外的保护,否则难以满足数据的可靠性要求。因为两个JBOD不支持存储箱感知,那么为列选择关联硬盘时,随着写入的数据增多,列选择两块(双重镜像)或者三块硬盘(三重镜像)来自同一个JBOD一定是个必然事件,这样一个JBOD故障,数据会丢失所有副本导致数据不完整,如图1所示。
图1两个JBOD数据存储示意
三个JBOD存储箱
三个JBOD支持存储箱感知,所以三个JBOD是要实现存储箱冗余时推荐的配置,而且要在存储池启用IsEnclosureAware参数。三个JBOD启用存储箱感知,存储空间列选择关联硬盘时,一定会选择不同JBOD存储箱里面的硬盘写入数据。对于双重或者三重镜像,不管JBOD里面有多少硬盘,也不管写入了多少数据,由于任何条带后数据的一式两份和三份不在同一个JBOD硬盘里存储,所以一个JBOD故障,其他两个JBOD一定存放着所有数据的另外的副本来保持数据的完整性,如图2所示。
图2 三个JBOD数据存储示意
除了存储箱感知这个参数以外,列在其中的作用非常重要,列就像一个组织者,有序地组织数据往硬盘写入,存储箱感知控制列在选择硬盘时起到同一个JBOD里面的硬盘“互斥”的作用,这样一个列所关联的硬盘一定不会来自于同一个JBOD。讨论了JBOD级别的可用性实现,接下来讨论JBOD结合存储空间布局的可用性实现。
三个JBOD加双重镜像
如果存储空间是双重镜像布局,如图3所示,JBOD1里的DISK1可以和JBOD2,JBOD3里面的6块硬盘的其中任意一块随机组合成列,而不会去找JBOD1里面的其他硬盘组合成列。同理,JBOD3里的DISK5可以和JBOD1,JBOD2里面的6块硬盘的其中任意一块随机组合成列。虚拟磁盘的双重镜像使用三个JBOD并启用IsEnclosureAware参数后,可以保证数据的两个副本不会写在同一个JBOD里,一个JBOD故障,数据剩下一个副本,这个副本存储在其他两个正常的JBOD里,因此数据是完整的。但这时候剩下的两个JBOD里任何一块硬盘都可能保留着所有数据的剩下的唯一副本,不能再允许出现JBOD故障和任意一块硬盘故障,因为任何一个硬盘故障都有可能导致数据丢失。因此,三个 JBOD(存储箱感知)加双重镜像这种存储空间虚拟磁盘可以承受的极限是一个JBOD或一块硬盘损坏的故障。
图3 三个JBOD和双重镜像数据存储示意
三个JBOD加三重镜像
存储空间的三重镜像将会把一份数据被复制成三份写在三个JBOD的不同的硬盘里。三重镜像的每个列关联三块硬盘,在为列关联硬盘时,能保证三块硬盘不在同一个JBOD里,但三重镜像的一个列关联的硬盘不一定分别平均来自三个不同的JBOD里面的硬盘,可能有两块硬盘在同一个JBOD里,一块在另外一个JBOD里。条带化的数据复制成三份以后,数据的一个副本存储在一个JBOD的硬盘里,另外两个副本写入就和两个JBOD效果一样了,数据副本可能存在同一个JBOD的两块硬盘,也可能分开平均存放在两个JBOD的两块硬盘里,如图4所示。按照列选择硬盘的随机性和平均原则,另外两个副本写入同一个JBOD的两块硬盘是必然事件,因此剩下的两个副本的冗余性和两个JBOD加双重镜像布局一样,只能允许一块硬盘故障。所以,三个JBOD(存储箱感知)加三重镜像这种存储空间虚拟磁盘可以承受的极限是一个JBOD和一块硬盘损坏的同时故障,或者两块硬盘同时损坏。
图4 三个JBOD和三重镜像数据存储示意
本文出自 “黄利军的博客” 博客,转载请与作者联系!
Windows Server 存储空间之存储冗余