2011-04-20 54 views
2

所以,我一直在玩Cassandra,并且已经建立了一个有三个节点的集群。我正试图弄清楚冗余如何与ConsistencyLevels协同工作。目前,我正在使用ConsistenyLevel.ALL编写数据,并使用ConsistencyLevel.ONE读取数据。从我一直在读的内容来看,这似乎是有道理的。我有三个Cassandra节点,我想写给他们三个。我只关心阅读其中的一个,所以我会采取第一个回应。为了测试这个,我写了一堆数据(再次,ConsistencyLevel.ALL)。然后我杀了我的一个节点(不是“种子”或“listen_address”机器)。Cassandra和ConsistencyLevel问题(冗余)

当我尝试阅读时,我预计可能会延迟一段时间以获取我的数据。最初,我得到一个TimeoutException ...我期望的。这就是Cassandra试图处理意外节点丢失时得到的结果,对吧?大约20秒后,我再试一次,现在得到一个UnavailableException,它被描述为“并非所有需要的副本都可以创建和/或读取”。

那么,我不在乎所有的副本......只有一个(就像我在get语句中的ConsistencyLevel.ONE中),对吧?

我在这里是否缺少ConsistencyLevel点?如果一个节点死亡,我如何配置它仍然可以获取我的信息?

感谢

回答

1

这听起来像你有复制因子(RF)设置为1,意味着只有一个节点持有任何给定行。因此,当您关闭一个节点时,无论您使用何种一致性级别,都无法读取或写入1/3的数据。您的期望与RF = 3时的情况相符。

+0

您说得对!我没有在密钥空间级别设置我的复制因子,这是我想我必须设置它的地方。我认为读取和写入分别处理数据如何被复制。我解开了我的密钥空间,现在看起来工作正常。谢谢!! – Wanderer 2011-04-21 20:48:07