我们有 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 已启动。
所以我读了这个:
我们有 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。