本文介绍纠删码的使用方法及使用中的常见问题。

背景信息

纠删码(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数据写入情况

  1. 进入实例监控页面。具体操作,请参见通过Lindorm控制台监控

  2. 单击集群存储详情,在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。