我有一个三节点Cassandra(DSE)集群,我不关心数据丢失,因此我将RF设置为1.我想知道如果节点发生故障,Cassandra将如何响应读/写请求(我现在的请求中有CL = ALL)。
理想情况下,如果数据存在,我希望这些请求成功 - 只是在剩余的可用节点上,直到我替换死节点。这个密钥空间本质上是一个非常大的缓存;我可以在丢失的情况下替换任何数据。
答案 0 :(得分:5)
(免责声明:我是ScyllaDB员工)
假设您的分区键足够独特,当使用RF = 1时,您的3个节点中的每一个都包含1/3的数据。顺便说一句,在这种情况下,CL = ONE / ALL基本上与您的数据只有1个副本相同,而且没有高可用性(HA)。
请求"现有"来自2个节点的数据将成功。尽管如此,当3个节点中的一个节点关闭时,1/3的客户端请求(对于现有数据)将不会成功,因为基本上1/3的数据不可用,直到down节点出现(请注意{ {1}}在使用RF = 1时无关紧要,所以我想从快照恢复(如果你有一个)是唯一的选择。
当节点关闭时,一旦执行nodetool repair
,令牌范围将在2个节点之间重新分配,但这仅适用于新的写入和读取。
您可以在此处详细了解环形架构: http://docs.scylladb.com/architecture/ringarchitecture/