为什么在cassandra中进行nodetool清理后丢失了一些数据

时间:2017-01-26 11:39:30

标签: cassandra nodetool

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

可能是什么原因?

2 个答案:

答案 0 :(得分:6)

是的,了解nodetool cleanup是潜在的 破坏性 工具非常重要。您的群集需要处于完全修复状态(从nodetool repair之前的常规成功运行)。

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

这个想法是,如果由于某种原因,节点添加进程失败并且您必须将群集保留为其原始大小,那么数据仍然存在。但是,如果您无法保证您的群集首先处于完全修复状态并且运行了清理,则可能并非所有副本都会将其转移到正确的节点。但是像nodetool getendpoints一样,引导过程会假设它是。{/ p>

这就是为什么在运行nodetool repair之前确保您在群集上定期运行nodetool cleanup非常重要。

答案 1 :(得分:1)

nodetool cleanup释放不再属于某个节点的分区键,因此在添加节点并传输其部分数据后,此“部分”不再属于旧节点,因此运行清理将释放一些空间在这个节点上。

如果您发现旧节点现在存储空间较低,则表示没有任何数据丢失。

另一方面,如果你真的找不到一些数据,可能是由于数据损坏或删除了数据(带有墓碑)。无论如何,数据丢失是什么意思?