集群中 3 个节点中有 1 个节点出现故障时 Cassandra 读取超时

问题描述 投票:0回答:1

我们有 3 个节点集群,复制因子为 3。在写入期间,数据被插入到具有一致性级别 (CL) 仲裁的表中。 节点1 -- 11.21.1.26 节点2 -- 11.21.1.27 节点3——11.21.1.28

在上面的配置中,我理解所有节点都有所有数据。

在其中一个维护窗口期间,节点 2 发生故障。

$nodetool status
Datacenter: DC1
=======================**
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns  Host ID    RACK
DN  11.21.1.27  13.43 GiB  256     ?     aaaa      rack1
UN  11.21.1.26  13.85 GiB  256     ?     bbbb      rack1
UN  11.21.1.28  13.65 GiB  256     ?     cccc      rack1

Using cqlsh on node1(11.21.1.26), consistency set to quorum, When tried to read data for the table1, data is queried successfully.

Using cqlsh on node3(11.21.1.28), consistency set to quorum, When tried to read same data from node3(11.21.1.28), reads are getting failed.
Unable to fetch query trace: ('Unable to complete the operation against any hosts', {<Host: 11.21.1.28 DC1>: Unavailable('Error from server: code=1000 [Unavailable exception] message="Cannot achieve consistency level QUORUM" info={\'required_replicas\': 1, \'alive_replicas\': 0, \'consistency\': \'QUORUM\'}',)})

任何人都可以解释为什么来自节点 3(11.21.1.28) 的查询失败,即使只有节点 2(11.21.1.27) 已关闭。另外两个节点已启动并正在运行。

我希望查询能够从节点 3 和节点 1 开始工作,因为节点 1 和节点 3 已启动。

apache cassandra
1个回答
0
投票

所以我读了这个:

我们有 3 个节点集群,复制因子为 3。

但这部分错误信息与该语句冲突:

Cannot achieve consistency level QUORUM"
    info={\''required_replicas\': 1, \'alive_replicas\': 0,

如果 RF 确实是 3,那么 QUORUM 的

required_replicas
将是 2,而不是 1。

这就是 QUORUM 可能很棘手的原因。请记住,QUORUM 的计算方式为 (RF / 2) + 1。我的猜测是密钥空间上的复制因子是 1。

RF 的法定人数==1 : (1 / 2) == 0; 0 + 1 == 1

当 RF 为 1 时,数据行没有任何额外的副本。因此,当一个节点处于down状态时,大约有1/3的数据无法查询。

我会仔细检查键空间定义,因为它似乎没有设置 RF 为 3。

© www.soinside.com 2019 - 2024. All rights reserved.