在 BE 上添加标签
自 v3.2.8 起,StarRocks 支持在 BE 上添加标签。创建表或异步物化视图时,您可以指定一组 BE 节点的标签。这确保了数据副本仅分布在与该标签关联的 BE 节点上。数据副本将均匀分布在具有相同标签的节点之间,从而提高数据高可用性和资源隔离。
用法
在 BE 上添加标签
假设一个 StarRocks 集群包含六个 BE,它们均匀分布在三个机架上。您可以根据 BE 所在的机架在 BE 上添加标签。
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.46:9050" SET ("labels.location" = "rack:rack1");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.47:9050" SET ("labels.location" = "rack:rack1");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.48:9050" SET ("labels.location" = "rack:rack2");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.49:9050" SET ("labels.location" = "rack:rack2");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.50:9050" SET ("labels.location" = "rack:rack3");
ALTER SYSTEM MODIFY BACKEND "172.xx.xx.51:9050" SET ("labels.location" = "rack:rack3");
添加标签后,您可以执行 SHOW BACKENDS;
并在返回结果的 Location
字段中查看 BE 的标签。
如果需要修改 BE 的标签,可以执行 ALTER SYSTEM MODIFY BACKEND "172.xx.xx.48:9050" SET ("labels.location" = "rack:xxx");
。
使用标签指定表数据在 BE 节点上的分布
如果您需要指定表数据分布的位置,例如,将表数据分布在两个机架 rack1 和 rack2 上,您可以向表添加标签。
添加标签后,表中同一 Tablet 的所有副本都以 Round-Robin 方式分布在标签上。此外,如果同一 Tablet 的多个副本存在于同一标签中,这些副本将尽可能均匀地分布在该标签中的不同 BE 上。
- 如果与标签关联的 BE 节点总数少于副本数,系统将优先确保有足够的副本。在这种情况下,副本可能不会按标签指定的分布。
- 要与表关联的标签必须已存在。否则,会发生错误
Getting analyzing error. Detail message: Cannot find any backend with location: rack:xxx
。
创建表时
您可以使用属性 "labels.location"
在创建表时将表的数据分布在机架 1 和机架 2 上
CREATE TABLE example_table (
order_id bigint NOT NULL,
dt date NOT NULL,
user_id INT NOT NULL,
good_id INT NOT NULL,
cnt int NOT NULL,
revenue int NOT NULL
)
PROPERTIES
("labels.location" = "rack:rack1,rack:rack2");
对于新创建的表,表属性 labels.location
的默认值为 *
,表示副本均匀分布在所有标签上。如果新创建表的数据分布不需要知道集群中服务器的地理位置,您可以手动设置表属性 "labels.location" = ""
。
创建表之后
如果您需要在创建表后修改表的数据分布位置,例如,将位置修改为机架 1、机架 2 和机架 3,您可以执行以下语句
ALTER TABLE example_table
SET ("labels.location" = "rack:rack1,rack:rack2,rack:rack3");
如果您已将 StarRocks 升级到 3.2.8 或更高版本,对于升级之前创建的历史表,默认情况下数据不基于标签分布。如果需要基于标签分布历史表的数据,您可以执行以下语句向历史表添加标签
ALTER TABLE example_table1
SET ("labels.location" = "rack:rack1,rack:rack2");
使用标签指定物化视图数据在 BE 节点上的分布
如果您需要指定异步物化视图的数据分布位置,例如,将数据分布在两个机架 rack1 和 rack2 上,您可以向物化视图添加标签。
添加标签后,物化视图中同一 Tablet 的所有副本都以 Round-Robin 方式分布在标签上。此外,如果同一 Tablet 的多个副本存在于同一标签中,这些副本将尽可能均匀地分布在该标签中的不同 BE 上。
- 如果与标签关联的 BE 节点总数少于副本数,系统将优先确保有足够的副本。在这种情况下,副本可能不会按标签指定的分布。
- 要与物化视图关联的标签必须已存在。否则,会发生错误
Getting analyzing error. Detail message: Cannot find any backend with location: rack:xxx
。
创建物化视图时
如果要在创建物化视图时将物化视图的数据分布在机架 1 和机架 2 上,您可以执行以下语句
CREATE MATERIALIZED VIEW mv_example_mv
DISTRIBUTED BY RANDOM
PROPERTIES (
"labels.location" = "rack:rack1,rack:rack2")
as
select order_id, dt from example_table;
对于新创建的物化视图,属性 labels.location
的默认值为 *
,表示副本均匀分布在所有标签上。如果新创建物化视图的数据分布不需要知道集群中服务器的地理位置,您可以手动设置属性 "labels.location" = ""
。
创建物化视图之后
如果您需要在创建物化视图后修改物化视图的数据分布位置,例如,将位置修改为机架 1、机架 2 和机架 3,您可以执行以下语句
ALTER MATERIALIZED VIEW mv_example_mv
SET ("labels.location" = "rack:rack1,rack:rack2,rack:rack3");
如果您已将 StarRocks 升级到 3.2.8 或更高版本,对于升级之前创建的现有物化视图,默认情况下数据不基于标签分布。如果需要基于标签分布现有数据,您可以执行以下语句向物化视图添加标签
ALTER TABLE example_mv1
SET ("labels.location" = "rack:rack1,rack:rack2");