【问题标题】:Understanding Hinted Handoffs and Data replication in Cassandra了解 Cassandra 中的提示切换和数据复制
【发布时间】: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


【解决方案1】:

那么,应该怎么做呢?

文档指出,当您恢复故障节点 (N3) 时,您必须对其进行修复。

老实说,在我们的大多数集群中,我发现简单地移除节点(当它关闭时)然后将其重新引导到集群中更容易。这通常比 Merkle 树的计算和修复数据的流式传输更快。但如果每个节点的数据不多(比如少于 20GB),运行修复应该不会太痛苦。

【讨论】:

  • 我猜你是对的。我们每个节点有大约 100 GB 的数据,每天以大约 5-10 GB 的速度增长。维修相当痛苦。必须让他们过夜。但是由于提示切换是修复过程的一部分,并且它们仅保留 3 小时(默认值),即使在运行修复之后,我们是否仍会丢失 3 小时后的数据?跨度>
  • @Ankush92 不,您的 RF=2 可确保至少写入一个副本。当您修复/引导时,目标节点将使用该副本将数据流式传输到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2013-03-31
相关资源
最近更新 更多