GlusterFS企业级功能之EC纠删码(3)
Distributed Dispersed 卷可以通过扩展Dispersed 卷生成,即扩展一倍或n倍的bricks(B).对比于Dispersed卷,其原理相同,但在相同的erasure codeing配置下,具有更好的I/O性能.所以下文中将主要以Dispersed卷来介绍EC卷的原理. (二)EC卷的原理1. Disperse卷的机制 Disperse卷中,会把每个读写请求切分为大小相同的Chunk块,而每个Chunk块又被分割成(B-R)个大小为512bytes的Fragment数据分片;然后使用算法Rabin IDA计算生成R个大小为512bytes的Fragment校验分片;最后把(B-R)个数据分片和R个校验分片以条带的方式存储在一起,即分别存储于每个Brick上,从而降低访问热点;其中R个校验分片会以轮询轮的方式存储于卷的每个brick上,用以提高卷的可靠性.(注:Fragment的大小在GlusterFS的源码中是一个宏定义,其大小等于EC_METHOD_WORD_SIZE* EC_GF_BITS = 64*8 = 512 bytes) Disperse卷中,Chunk的大小可配置,其大小与具体的Redundancy配置有关,其大小等于512*(B-R) bytes.可通过调整Redundancy的配置(注:Redundancy的配置在Disperse卷创建之后就确定,不可修改),来修改Chunk的大小.那么以官方经典的配置B=6,R=2的Disperse卷为例,得出Chunk的大小为(6-2)*512 = 2048 bytes. Chunk的大小与性能有关,而性能又与访问模式以及文件大小有关.其性能会随着Chunk的大小改变而改变,用户可以根据具体的应用场景,通过调整Chunk的大小,在存储利用和可靠性之间做均衡选择,从而获得更好的性能. 图6:Dispersed卷的存储机制 2. Disperse卷的编码 图7:Dispersed卷的编码 3. Disperse卷的失效数据恢复 图8:Dispersed卷的失效数据恢复 4. Disperse卷的读操作 图9:Dispersed卷的读操作 5. Disperse卷的写操作 图10:Dispersed卷的写操作 (2)部分写 (三)EC卷的参数介绍在Gluster3.7版本中,EC卷有disperse.eager-lock、cluster.disperse-self-heal-daemon、cluster.heal-timeout、disperse.background-heals、disperse.heal-wait-qlength以及disperse.read-policy等几个参数,下面就对几个重要的参数进行简单介绍:
在Gluster 3.9版本中,EC卷又增加了disperse.shd-max-threads、disperse.shd-wait-qlength、disperse.cpu-extensions等三个参数,由于篇幅有限在这里就不做介绍了. 四、EC纠删码卷实践?(一)EC实践总结1、Disperse卷的创建 2、Disperse卷的数据存储 3、Disperse卷的数据恢复 4、Disperse卷的扩展 (编辑:ASP站长网) |