为什么在卡桑德拉的节点工具清理后丢失了一些数据

why lost some data after nodetool cleanup in cassandra

我们向数据中心添加了一个新节点,然后根据 Add new node to existing cluster in cassandra 运行 nodetool cleanup。但是清理完成后,我们发现丢失了一些数据。

可能是什么原因?

nodetool cleanup 释放不再属于节点的分区键,因此在添加节点并传输其部分数据后,此 "portion" 不再属于旧节点,因此 运行 清理将释放此节点上的一些 space。

如果您看到旧节点现在有较低的存储空间,那没关系,没有任何数据丢失。

另一方面,如果您确实找不到某些数据,则可能是由于数据损坏或删除数据(带有逻辑删除)。反正数据丢失是什么意思?

是的,了解 nodetool cleanup 是一种潜在的 破坏性 工具很重要。您的集群需要处于 fully-repaired 状态(来自之前 nodetool repair 的常规、成功的 运行)。

当您向集群添加新节点时,每个节点负责的令牌范围都会进行调整,并按节点降低。这会将数据留在它们不再负责的原始节点上。那是设计

我们的想法是,如果由于某种原因节点添加过程失败并且您必须让集群保持其原始大小,那么数据仍然存在。但是,如果您不能保证您的集群首先处于 fully-repaired 状态并且清理是 运行,则可能并非所有副本都已到达其正确的节点。但是就像 nodetool getendpoints 一样,bootstrap 过程会假定它是。

这就是为什么确保您定期 运行ning nodetool repair 集群 before 运行ning [=10] 很重要=].