理解Cassandra中的指示性切换和数据复制
问题描述:
我们有一个RF = 2的3节点Cassandra集群。读写一致性设置为1。我们也使用Vnodes。可以将这些节点标记为N1,N2和N3。假设N3下降。我的印象是,无论节点何时关闭,其他节点都会存储提示,并且每当N3出现时,提示就会发送到N3,从而确保数据在副本之间保持一致。但是,当我浏览文档时,我遇到了参数max_hint_window_in_ms
,默认为3小时。所以,如果一个节点死了超过3个小时,它被认为是永久死亡,并且没有提示被存储。到现在为止还挺好。理解Cassandra中的指示性切换和数据复制
所以,我现在的理解是,如果一个节点停下来说了10个小时,那么前3个小时的提示会在它返回时转移到这个节点,但是这个7小时的写入会对于这个节点会丢失。此外,如果为特定的令牌范围启动读取查询,并且由于此节点也可以为读取令牌范围的请求提供服务,它将返回空值而不是存储在某个其他节点中的实际数据。我的理解是否正确?那么,应该做什么?
答
那么应该做什么?
该文档指出,当您将向下节点(N3)带回时,您必须对其运行修复。
尽管如此,在我们的大多数群集中,我发现简单地移除节点(当它停止时)会更容易,然后将其重新引导到群集中。这通常比计算Merkle树和修复数据流更快。但是,如果每个节点没有大量数据(比如小于20GB),那么运行修复应该不会太痛苦。
这是被测试和行为是意想不到的?或者,如果情景发生,您是否在寻找预期的行为?由于您的一致性级别设置为“1”,因此所有读取/写入都应成功(假设吞吐量不大)。 – daniel
我想评估一下,如果我的某个节点发生故障超过3小时(默认值为max_hint_window_in_ms),那么行为将会是什么。 – Ankush92