本文介绍纠删码的使用方法及使用中的常见问题。
背景信息
纠删码(Erasure Coding,EC)是一种数据冗余存储机制。它能通过一定的算法将k个原始数据块计算出m个冗余数据块,只要在这k+m
个数据块中选择任意k个数据块就能计算得到所有的原始数据。当k=4,m=2
时,在存储效率上等价于1.5副本,并可以允许最多2个数据块损坏。
因此纠删码相比于多副本,可以在保证相同可靠性的同时节约存储空间,从而获得最优存储成本。
前提条件
使用限制
存储类型限制:本地HDD盘支持纠删码功能,云盘暂不支持该功能。
重要单可用区本地SSD实例和多可用区本地SSD实例需联系Lindorm技术支持(钉钉号:s0s3eg3),由技术专家评估当前实例是否可以开启。
节点数目限制:至少7个节点。
说明以RS-4-2算法为例,开启EC纠删码功能后数据副本会被打散分布至6个节点上。为确保实例的可用性,需额外增加1个节点进行冗余,保证有一个节点异常的情况下数据仍能正常写入,因此实例要求存储节点的最少数量为7。
开启纠删码
宽表引擎支持在创建表时设置EC_POLICY参数来开启纠删码功能。开启纠删码功能后,在进行数据整理(Compaction)时,数据将被自动转化为EC格式。
CREATE TABLE dt (p1 integer, p2 integer,primary KEY(p1)) WITH (EC_POLICY = 'RS-4-2');
建议将EC_POLICY设置为RS-4-2
。在存储效率上,RS-4-2算法等价于1.5副本。如果需要更高密度的EC配置,请联系Lindorm技术支持(钉钉号:s0s3eg3)。
管理纠删码
修改纠删码算法。
ALTER TABLE dt SET 'EC_POLICY' = 'RS-4-2';
删除纠删码算法。
ALTER TABLE dt SET 'EC_POLICY' = '';
查看EC数据写入情况
进入实例监控页面。具体操作,请参见通过Lindorm控制台监控。
单击集群存储详情,在EC文件逻辑数据区域查看EC数据写入情况。
FAQ
Q1:为什么无法成功写入EC格式的数据?
A1:请逐一检查以下内容:
版本是否符合要求
节点数量是否符合要求
是否触发了
major compaction
如果以上均无问题,请联系Lindorm技术支持(钉钉号:s0s3eg3)帮您定位问题。
Q2:Lindorm是否支持其他比例的纠删码策略,如8+2,8+3等?
A3:支持,请联系Lindorm技术支持(钉钉号:s0s3eg3)开启。
Q3:为什么无法移除节点?
A3:本地盘不能进行本地缩容,只能通过减少节点的方式来减少存储。由于纠删码对节点数有最低要求,例如
RS-4-2
的策略要求最低4+2+1=7个节点,因此,如果想要移除节点,需要将使用的EC策略去除,并触发major compaction
,等待对应数据块的数量降为0。