因此,我一直在玩Cassandra,并设置了具有三个节点的集群。我试图弄清楚冗余如何与ConsistencyLevels一起使用。目前,我正在使用ConsistenyLevel.ALL写入数据,并且正在使用ConsistencyLevel.ONE读取数据。从我一直阅读的内容来看,这似乎是有道理的。我有三个Cassandra节点,我想写所有三个节点。我只关心从其中一个中读取内容,因此我将采取第一个回应。为了测试这一点,我编写了很多数据(同样,使用ConsistencyLevel.ALL)。然后,我杀死了我的一个节点(不是“ seed”或“ listen_address”计算机)。
然后,当我尝试阅读时,我希望可能会稍等片刻才能恢复数据。最初,我得到一个TimeoutException ...这是我所期望的。这是当Cassandra试图处理意外的节点丢失时得到的,对吗?大约20秒后,我再次尝试,现在出现UnavailableException,它被描述为“并非可以创建和/或读取所需的所有副本”。
好吧,我不在乎所有副本...只是一个副本(就像我的get语句中的ConsistencyLevel.ONE一样),对吗?
我是否在这里缺少ConsistencyLevel点?如果节点死亡,如何配置它以仍然获取我的信息?
谢谢
最佳答案
听起来您的复制因子(RF)设置为1,这意味着只有一个节点保存任何给定的行。因此,当关闭某个节点时,无论使用何种一致性级别,都将无法读取或写入1/3的数据。您的期望与RF = 3时发生的情况相符。