我对卡桑德拉非常陌生,我不确定我是否正确地理解了一切,所以我希望有人能帮助我。
这是我的系统:
具有3节点ANY复制策略的密钥空间: NetworkTopologyStrategy (同一DC中的所有节点)H 111
rails金属应用程序,该应用程序使用twitter 1F 112H 113读取一致性:1<代码>H 214/代码>H 115/code>写入一致性:
cassandra gem 1F 112H 113读一致性:1H 214/code>H 115/code>写入一致性:
当一个节点发生故障时,我很确定:
如果使用读一致性级别为1的话,
i应该能够从键空间读取记录。
我应该能够用任何
的写一致性级别写入密钥空间。
,这就是我不明白的:
上面的操作是成功的,但是只有当我手动删除死node
shouldn't的令牌时,我的集群才能像预期的那样处理死节点吗?这不是卡桑德拉的全部意思吗:高availability?
我仔细研究了gem的代码,如果cassandra集群告诉宝石它可以在死节点上找到一个记录(实际上已经关闭了)。因此,创业板失败时会出现异常,即它无法连接到死节点。
所以我不确定我是否完全误解了一些东西,我的cassandra设置是错误的,或者是否卡桑德拉红宝石是问题所在(我不认为)。
西门
发布于 2012-02-14 04:43:10
是的,您的集群应该按照您对死节点的描述工作。
我不熟悉ruby或ruby客户端,但在我看来,更有可能的是,您的客户端试图向死节点发送请求,这会导致“无法连接”类型的异常。如果没有足够的节点来满足某个查询的一致性要求,Cassandra就会抛出一个UnavailableException。
ruby客户端做什么类型的池,并且您确定它没有试图将查询发送到已关闭的节点?假设ruby客户端有某种类型的连接池,那么它可能必须至少看到一个失败的查询才能实现节点故障。
https://stackoverflow.com/questions/9261901
复制相似问题