Apache Cassandra节点在3节点集群中运行,复制因子为3.所有配置都是正确的。 Cassandra版本是2.1.8。
让我们假设数据在逻辑上受损无法修复,这意味着通常的工具无法恢复(擦洗/修复)。
节点处于正常状态。
考虑通过从在cassandra.yaml中注册的种子节点进行流式传输来恢复节点的情况(而不是用另一个节点替换该节点):
如果删除该节点上的顶级数据目录,包括commitlog,data,hints和saved_caches目录,并启动服务,会发生什么?节点是否会从该点恢复正常,我可以运行 nodetool repair 以将最旧的数据导入节点?
如果我启动该服务并运行 nodetool rebuild ,是否适当且足以解决问题?
如果以上都不是最佳做法,那么它是停用节点并使其再次加入群集的解决方案吗?
答案 0 :(得分:2)
你将有更好的运气退役节点,擦除它(数据,commitlog和& saved_caches dirs),将其指定为cassandra-env.sh中的替换地址,以及重新加入到集群。
当您拥有多个数据中心时, nodetool rebuild
很有用,并且您希望引导流来自特定的DC。
nodetool repair
在技术上会起作用(对#1回答“是”),但是你将花费大量时间等待Merkle树的计算。每周修理很好,并且非常适合修复较小的一致性差异。但在某一点之后,比较发现差异(Merkle树)并修复它们变得比简单地做一个decom / rejoin节点慢。