我们向数据中心添加了一个新节点,然后根据 Add new node to existing cluster in cassandra 运行 nodetool cleanup
。但是清理完成后,我们注意到我们丢失了一些数据。
可能是什么原因?
最佳答案
是的,了解 nodetool cleanup
是一个潜在的 破坏性 工具很重要。您的集群需要处于完全修复状态(来自 nodetool repair
之前的常规成功运行)。
当您向集群添加新节点时,每个节点负责的 token 范围都会调整,并降低每个节点。这会在他们不再负责的原始节点上留下数据。这是设计使然。
这个想法是,如果由于某种原因节点添加过程失败并且您不得不将集群保留在其原始大小,那么数据仍然存在。但是,如果您不能保证您的集群首先处于完全修复状态并且运行了清理,则可能并非所有副本都将其发送到其正确的节点。但是像 nodetool getendpoints
一样,引导过程会假设它是。
这就是为什么在运行 nodetool repair
之前确保您在集群上定期运行 nodetool cleanup
很重要。
关于cassandra - 为什么在 cassandra 中进行 nodetool 清理后丢失了一些数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41872658/