什么是M+N:1纠删码?

       除了常见的M+N纠删码之外,我们还经常见到一种M+N:1的纠删码,这是一种特殊的纠删码技术,我们称之为亚节点纠删码。

      这种技术的出现是为了满足小规模集群的部署要求,我们举个例子,有一个用户采购了3个分布式存储节点,因为节点数量比较少,他可选的数据冗余策略就只有3副本和2+1纠删码(2副本暂不考虑,后文我们来详细说明原因)。选择3副本的话,存储的空间利用率就只有33%了,如果我们再考虑其他因素,比如硬盘标称值的差异、系统预留空间、热备空间的话,可用空间可能只有26%左右,这对于很多看重容量的用户来讲是比较难以接受的。但如果我们选择2+1纠删码呢,问题出现了,2+1纠删码只能允许1个分片数据丢失,当集群中2个节点分别故障1块硬盘的时候,数据就丢失了!

      在实际使用场景下,2块硬盘同时故障的情况虽然比较少见,但概率也并不算低,因为很多用户在1块硬盘故障时可能并没有发觉。这段时间存储就是在极其危险的状态下运行,任何硬盘出问题都会导致集群数据丢失,很显然,2+1纠删码的方案并不好。

      基于以上原因,4+2:1的纠删码出现了。为什么叫亚节点纠删码呢,因为默认的纠删码是按照节点来分配数据的,但4+2:1只会按照硬盘来分配数据,它把3个节点当6个节点用,每个节点选择2块硬盘,整个集群选择6块不同的硬盘来存放4+2总计6个分片数据(如下图所示)。

       我们看到,4+2:1相比2+1纠删码,虽然能容忍节点故障数量仍然是1个,但它可以允许2个节点分别故障1块硬盘(总计故障2块硬盘)而数据不丢失。而实际情况下,硬盘故障的概率是远远低于整个节点故障的,所以4+2:1还是非常可靠的,而且它的空间利用率远高于3副本。当然如果你担心的是2个节点同时故障,那你只能选择3副本了。

类似于4+2:1,也存在8+2:1、16+2:1等亚节点纠删码,这里我们就不多讨论了。

猜你喜欢

转载自blog.csdn.net/iamonlyme/article/details/130403019