管理副本
本文描述如何管理 StarRocks 集群 中的数据副本。
概述
StarRocks 采用多副本策略来保证数据的高可用性。当您创建表时,必须通过配置 replication_num
(默认值:3
)属性(Property)指定表的副本数量。发起导入事务后,数据会同时导入到指定数量的副本中,即在数据写入多数副本后,事务才会返回成功。详情请参考导入数据安全等级(Write quorum)。StarRocks 允许您设置导入更少的副本即可返回导入成功,从而实现更好的导入性能。
StarRocks 将多个副本存储在不同的 BE 节点上。例如,如果您想要为一个表存储三个副本,则必须在 StarRocks 集群中部署至少三个 BE 节点。如果任何副本发生故障,StarRocks 会从另一个 BE 节点克隆一个健康的副本的部分或全部数据来修复故障的副本。StarRocks 采用多版本并发控制(MVCC)技术,通过复制这些多版本数据的物理副本,保证版本修复的高效进行。
多副本写入
导入事务的常规流程如下:
-
客户端提交导入请求至 FE。
-
FE 节点选择一个 BE 节点作为该导入事务的 Coordinator BE 节点,并为该事务生成执行计划。
-
Coordinator 节点从客户端读取要导入的数据。
-
Coordinator 节 点将数据分发到所有副本的 Tablet 中。
说明
Tablet 是表的逻辑分片。一张表可以有多个 Tablet,每个 Tablet 有
replication_num
个副本。一张表中 Tablet 的数量由建表属性bucket_size
决定。 -
数据导入并存储到所有 Tablet 后,FE 将导入的数据变为可见。
-
FE 向客户端返回导入成功。
以上流程确保了即使在极端情况下服务可用性依然不受影响。
导入数据安全等级(Write quorum)
将数据导入到多副本表的过程可能非常耗时。如果您希望提高导入性能并且能够容忍相对较低的数据可用性,可以为该表设置较低的导入数据安全等级。导入数据安全等级是指需要多少数据副本导入成功后 StarRocks 可返回导入成功。您可以在创建表时通过添加属性 write_quorum
来指定导入数据安全等级,或者通过 ALTER TABLE 为已有的表添加该属性。该属性从 v2.5 开始支持。
write_quorum
的取值及其对应描述如下:
MAJORITY
:默认值。当多数数据副本导入成功时,StarRocks 返回导入成功,否则返回失败。ONE
:当一个数据副本导入成功时,StarRocks 返回导入成功,否则返回失败。ALL
:当所有数据副本导入成功时,StarRocks 返回导入成功,否则返回失败。