首页 > 解决方案 > 连接丢失后的多DC复制

问题描述

我们有 2 个 DC,它们通过不稳定的 VPN 连接,每 3 小时失去一次连接。

所有数据都写入数据中心 A 并复制到数据中心 B。在发生这种“连接丢失”事件之一后,数据中心 B 上会丢失数据(受影响的中断窗口)。

我的假设是,DC B 将在重新建立连接后恢复复制并获取所有丢失的数据。这个假设是错误的吗?

在此处输入图像描述

标签: cassandra

解决方案


Cassandra 有以下复制数据的方法:

  • 提示 - 当hinted_handoff_enabled设置为 true 时,当节点重新联机时会重播突变,但这仅发生在由定义的窗口内max_hint_window_in_ms(默认为 3 小时),但这也可能受每个表 gc_grace_seconds 设置的影响(请参阅此博客文章了解详情)。但是可以在每个 DC 的基础上禁用提示的使用(通过hinted_handoff_disabled_datacenters)。此外,提示不会立即重播,因为它们受hinted_handoff_throttle_in_kb&max_hints_delivery_threads参数限制。
  • 修复 - 需要显式执行,但可能比提示更有效,特别是因为您可以在特定表上运行它;
  • 读取修复 - 只有当您使用 QUORUM 之类的东西来读取数据时,多 DC 才会起作用...

如果启用了提示,但您仍然错过了数据 - 检查提示是否已经重播,或者它们仍在重播 -有指标显示磁盘上有多少提示等。

如果问题定期发生,并且您可以检测到它,那么显式修复可能会更快 - 但在这种情况下,您需要禁用跨 DC 提示,因此节点不会两次接收数据......


推荐阅读