所以,我一直在玩Cassandra,并设置了一个包含三个节点的集群。我试图找出冗余如何与ConsistencyLevels一起使用。目前,我正在使用ConsistenyLevel.ALL编写数据,并使用ConsistencyLevel.ONE读取数据。从我一直在阅读,这似乎是有道理的。我有三个Cassandra节点,我想写三个节点。我只关心从其中一个读书,所以我会采取第一个回应。为了测试这一点,我编写了一堆数据(同样,使用ConsistencyLevel.ALL)。然后我杀了我的一个节点(不是“种子”或“listen_address”机器)。
当我尝试阅读时,我希望,也许经过一段时间后,我的数据可以恢复。最初,我得到一个TimeoutException ...我期待。当Cassandra试图处理意外的节点丢失时,这就是人们得到的,对吧?大约20秒后,我再次尝试,现在收到一个UnavailableException,其描述为“并非所有复制品都可以创建和/或读取”。
好吧,我不关心所有复制品......只关注一个(就像我的get语句中的ConsistencyLevel.ONE一样),对吗?
我在这里错过了ConsistencyLevel点吗?如果节点死亡,我如何配置它仍能获取我的信息?
由于
答案 0 :(得分:1)
听起来您将复制因子(RF)设置为1,这意味着只有一个节点包含任何给定的行。因此,当您关闭节点时,无论您使用何种一致性级别,您都将无法读取或写入1/3的数据。您的期望与RF = 3的情况相符。