cassandra - 连接丢失后的多DC复制
问题描述
我们有 2 个 DC,它们通过不稳定的 VPN 连接,每 3 小时失去一次连接。
所有数据都写入数据中心 A 并复制到数据中心 B。在发生这种“连接丢失”事件之一后,数据中心 B 上会丢失数据(受影响的中断窗口)。
我的假设是,DC B 将在重新建立连接后恢复复制并获取所有丢失的数据。这个假设是错误的吗?
解决方案
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 提示,因此节点不会两次接收数据......
推荐阅读
- c++ - 如果自己的基类为空,则 static_cast 访问另一个基类的成员会返回错误
- mongodb - ReactiveMongo 中是否支持压缩?
- javascript - React 项目出现“目标容器不是 DOM 元素”错误
- sqlite - 如何在 onUpgrade 方法中执行 rawquery (sqflite)
- c# - 通过在 Azure Function 上使用输出 blob 绑定进行简化
- javascript - 过滤重复的对象数组并添加计数数量 Javascript
- c - 尽管提升了权限,但在“FlushIpNetTable”调用期间访问被拒绝
- javascript - 如何更改 html 元素的颜色
- python - wxpython 通过按键将焦点设置为 wx.Menubar
- git - git restore --staged some-file 和 git checkout --some-file 有什么区别?