版本:doris0.14;环境:centos7;
共部署6个be节点。建表时设置动态分区,cph分桶,默认设置为3副本。我理解数据应该分布在3个不同的be节点上,也就是只要有1台be节点还活着,数据就应该能查出来。为了验证doris查询的高可用,我一边查询数据,一边逐台手工关闭be服务,发现当查询出错的时候,doris给我的提示如下:
——查询sql:select * from p_cargis where cph = '桂A14999' and dt>='2021-09-08 00:00:00' and dt<'2021-09-11' LIMIT 0, 1000
——错误提示: Error Code: 1064. errCode = 2, detailMessage = there is no scanNode Backend. [22003: not alive, 22083: not alive]
确实22003、22083这2台be节点关闭了。如果启动这2个be节点中的任何1个,查询都能正确返回数据。
我的问题是:默认设置为3个副本,难道数据不应该是在3个be节点上备份么?为何只提示其中2个be的节点not alive呢?看起来像是数据并没有在3个节点上分布,只在这2个节点上分布了。请指导,谢谢~
测试建表sql如下(replication_num为默认设置3副本):
CREATE TABLE p_cargis
(
cph VARCHAR(20) DEFAULT '',
cpys SMALLINT DEFAULT '2',
dt DATETIME,
ptbm VARCHAR(6) REPLACE DEFAULT '110000',
alarm VARCHAR(10) REPLACE DEFAULT '0',
xslc INT REPLACE DEFAULT '0',
sbsd INT REPLACE DEFAULT '0',
xssd INT REPLACE DEFAULT '0',
dr INT REPLACE DEFAULT '0',
lat DOUBLE REPLACE DEFAULT '0',
lon DOUBLE REPLACE DEFAULT '0',
count BIGINT SUM DEFAULT '0' COMMENT '用于统计总数'
)
AGGREGATE KEY(cph,cpys,dt)
PARTITION BY RANGE(dt) ()
DISTRIBUTED BY HASH(cph)
PROPERTIES
(
"replication_num" = "3",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "MONTH",
"dynamic_partition.start" = "-12",
"dynamic_partition.end" = "1",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "16"
);