在2节点cassandra集群中,如果RF = 1并且一个节点关闭,我可以用CL = 1写但不能读

时间:2016-07-22 11:10:19

标签: cassandra datastax datastax-enterprise cassandra-2.0 bigdata

我是cassandra的新手。

我有一个包含两个节点的集群。我已将Replication因子设置为1.现在,如果一个节点出现故障,我可以插入没有错误且Consistency = ONE的数据。插入后,如果我尝试相同,那么它会给我一个错误

Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE" info={'required_replicas': 1, 'alive_replicas': 0, 'consistency': 'ONE'}

为什么cassandra没有从协调节点读取数据?如果一个节点是UP,那么alive_replicas应该是1,不是吗?

我正在使用cqlsh客户端。

1 个答案:

答案 0 :(得分:1)

复制因子1意味着每个数据只存在一次(它不是附加副本的数量,而是总副本的数量)。如果集群具有两个节点且RF = 1,则大约50%的数据将位于node1上,另一半将驻留在node2上。

您可以使用命令验证这一点(检查Owns列下的百分比)

nodetool status your_keyspace_name

现在,如果您的某个节点关闭,那么只有那些存储在活动节点上的密钥才可访问。这适用于读写。因此,影响活动节点的操作将成功,而影响死节点的操作将失败。您可以使用命令

检查哪个节点负责任何给定的分区键
nodetool getendpoints your_keyspace your_table your_key

因此,为了回答您的问题,我认为成功写入会影响实时节点,而失败的读取会影响已关闭的节点。