当3个节点中有2个节点关闭时,无法在Cassandra中写入条目

时间:2018-01-08 07:02:00

标签: c++ cassandra cassandra-3.0

我正在通过C ++在Cassandra中插入数据。我有2个数据中心,总共3个节点分布在2个数据中心(dc1和dc2)之间。因为我正在做一些实验,所以我已经停止了2个节点上的Cassandra。现在,当我尝试将数据写入剩余的一个节点时,出现“无主机可用”等错误。因为在C ++程序中,我没有提到write语句的任何一致性,那么为什么它不起作用。我已经读过默认写入一致性是本地的,因此即使只有3个节点中的一个出现,我也应该能够写入数据。

dc1有2个节点,dc 2有1个节点。 复制策略:网络拓扑,dc1:2,dc2:1 卡珊德拉:3.0.14 RHEL 6

编辑:我更改了2件事并重新启动了我的集群后,问题就解决了: 1.我配置了cassandra-topology.properties。最初它没有设置正确的值。 我同步了3个节点之间的时间。 我不知道哪一个(如果不是两个)解决了这个问题。

2 个答案:

答案 0 :(得分:1)

RF对此问题无关紧要。这取决于写CL。我假设你的写CL是LOCAL_ONE。由于您只有1个上行节点,因此它可能位于dc1或dc2上。如果您的上行节点在dc1中,由于dc1有两个节点,因此这两个节点共享散列环。因此,Cassandra应该确定在dc1中写入哪个节点。 Cassandra计算数据分区键的哈希值。如果up-node是该分区的所有者,则写入成功,否则失败。

如果您的上行节点在dc2中,因为dc2只有1个节点,该节点拥有所有数据。所以写应该总是成功。

答案 1 :(得分:0)

如果您要写入的键空间设置为RF> 1,这意味着数据必须以超过1个副本(超过1个节点)写入,并且由于只有1个节点保持活动状态,因此不满足RF设置。

我认为这是您看到错误的原因。