【发布时间】:2019-04-10 08:34:18
【问题描述】:
我有一个在 AWS 中运行的 Cassandra db(版本 3.11.2),有 2 个数据中心 - 每个位于另一个 AWS 区域,每个区域有 3 个节点。
所有键空间的复制因子为 3,因此每个节点上的数据都完全复制。每个节点的数据大小约为 10GB。 我们所有的写入都在针对一个 DC(我们称之为 DC1)的 LOCAL_QUORUM 中。基本上另一个 DC 只是为了一种备份和灾难恢复,如果 DC1 的 AWS 区域不可用,我们会将流量重定向到 DC2。
我的问题是两个 DC 之间的网络断开连接了几个小时,几天后我们注意到 DC2 中的数据丢失。这一切都是有道理的,因为 DC 分开的时间大于提示切换窗口(3 小时)。所以我们需要进行修复以使 DC2 恢复与 DC1 的同步。
我浏览了 cassandra 文档,阅读了无数的 SO 答案,我一生都无法理解什么是正确的修复方法...... 我是否需要仅从一个节点发出“nodetool repair --full --sequential”?我需要在集群中的每个节点上运行它吗?也许最好运行“nodetool rebuild”?
【问题讨论】:
-
只要不将修复隔离到 local_dc 就可以了。它将比较来自所有 DC 的副本以得出“正确”的答案。所以你可以简单地运行“nodetool repair”,它应该会给你你想要的
标签: cassandra