【发布时间】:2017-10-30 19:08:04
【问题描述】:
我们有一个 RF = 2 的 3 节点 Cassandra 集群。读写一致性设置为 ONE。我们也在使用 Vnodes。让我们将这些节点标记为 N1、N2 和 N3。假设 N3 出现故障。我的印象是,每当一个节点出现故障时,其他节点都会存储提示,而每当 N3 出现时,提示就会发送到 N3,从而确保数据在副本之间保持一致。但是,当我浏览文档时,我遇到了默认为 3 小时的参数 max_hint_window_in_ms。因此,如果一个节点死亡超过 3 小时,则认为它是永久死亡并且不存储任何提示。到目前为止,一切顺利。
所以,我现在的理解是,如果一个节点停机 10 小时,那么前 3 小时的提示将在它恢复时转移到该节点,但是这 7 小时持续时间的写入将是为此节点丢失。此外,如果针对特定令牌范围触发读取查询,并且由于该节点也有资格为令牌范围的读取请求提供服务,则它将返回 null 而不是存储在某个其他节点中的实际数据。我的理解正确吗?那么,应该怎么做呢?
【问题讨论】:
-
这是否正在测试并且行为是否出乎意料?或者,如果发生这种情况,您是否正在寻找预期的行为?由于您将一致性级别设置为 ONE,因此所有读/写都应该成功(假设吞吐量不大)。
-
我正在尝试评估如果我的一个节点停机超过 3 小时(max_hint_window_in_ms 的默认值)会出现什么行为。
标签: cassandra datastax datastax-enterprise datastax-startup