我们向数据中心添加了一个新节点,然后根据Add new node to existing cluster in cassandra运行nodetool cleanup
。但在清理完成后,我们注意到我们丢失了一些数据。
可能是什么原因?
答案 0 :(得分:6)
是的,了解nodetool cleanup
是潜在的 破坏性 工具非常重要。您的群集需要处于完全修复状态(从nodetool repair
之前的常规成功运行)。
向群集添加新节点时,将调整每个节点负责的令牌范围,并降低每个节点的令牌范围。这会在他们不再负责的原始节点上留下数据。那是按设计。
这个想法是,如果由于某种原因,节点添加进程失败并且您必须将群集保留为其原始大小,那么数据仍然存在。但是,如果您无法保证您的群集首先处于完全修复状态并且运行了清理,则可能并非所有副本都会将其转移到正确的节点。但是像nodetool getendpoints
一样,引导过程会假设它是。{/ p>
这就是为什么在运行nodetool repair
之前确保您在群集上定期运行nodetool cleanup
非常重要。
答案 1 :(得分:1)
nodetool cleanup
释放不再属于某个节点的分区键,因此在添加节点并传输其部分数据后,此“部分”不再属于旧节点,因此运行清理将释放一些空间在这个节点上。
如果您发现旧节点现在存储空间较低,则表示没有任何数据丢失。
另一方面,如果你真的找不到一些数据,可能是由于数据损坏或删除了数据(带有墓碑)。无论如何,数据丢失是什么意思?