1.简介
Erasure Coding(EC) 是一种数据冗余策略,相比于多副本策略,纠删码的数据冗余度更小,并能获得更高的数据可靠性。纠删码包含两部分,编码和解码。编码时,使用一些数据部分,计算出一些校验数据;当有数据丢失时,能够使用余下的数据(源数据和校验数据)解码出丢失的部分。sheepdog中也提供了EC的支持。比如使用8:3的纠删策略(8块数据块,3块校验块),sheepdog就能够容错3个节点宕掉,仅仅只有3/8=0.375倍的额外数据,而要达到相同的效果,多副本策略却需要使用4副本,并且带来了额外3倍的数据开销。sheepdog中使用的是Erasure Code的开源库zfec。
2.sheepdog中EC的特性
- 1)一旦指定了EC策略,读写数据时自动地使用EC策略,不需要额外的操作;
- 2)支持随机读写,就地更新,非对齐的读写;
- 3)支持任意类型的VM镜像;
- 4)使用VDI时,用户可以自定义EC策略;
- 5)相对于多副本策略,EC能够获得更好的读写性能;
- 6)一个集群中既能有多副本的卷,也能有EC的卷。
3.使用方式
用户创建VDI(虚拟卷)时,可以指定EC策略。
$dogvdi create -c x:y vdi size # Create a erasure coded VDI
x表示数据块的个数,x只能是{2,4,8,16},y表示校验块的个数,y可以取值1~15,能够容错y个节点宕掉。
当然,如果节点个数小于x+y,指定的策略将会失败。
初始化集群时,也可以使用EC作为默认的副本策略。
$ dog cluster format -c x:y