如何通过从种子节点流式传输来恢复Cassandra节点?

时间:2017-01-03 13:59:33

标签: cassandra cassandra-2.1

Apache Cassandra节点在3节点集群中运行,复制因子为3.所有配置都是正确的。 Cassandra版本是2.1.8。

让我们假设数据在逻辑上受损无法修复,这意味着通常的工具无法恢复(擦洗/修复)。

节点处于正常状态。

考虑通过从在cassandra.yaml中注册的种子节点进行流式传输来恢复节点的情况(而不是用另一个节点替换该节点):

  1. 如果删除该节点上的顶级数据目录,包括commitlog,data,hints和saved_caches目录,并启动服务,会发生什么?节点是否会从该点恢复正常,我可以运行 nodetool repair 以将最旧的数据导入节点?

  2. 如果我启动该服务并运行 nodetool rebuild ,是否适当且足以解决问题?

  3. 如果以上都不是最佳做法,那么它是停用节点并使其再次加入群集的解决方案吗?

1 个答案:

答案 0 :(得分:2)

你将有更好的运气退役节点,擦除它(数据,commitlog和& saved_caches dirs),将其指定为cassandra-env.sh中的替换地址,以及重新加入到集群。

当您拥有多个数据中心时,

nodetool rebuild很有用,并且您希望引导流来自特定的DC。

nodetool repair在技术上会起作用(对#1回答“是”),但是你将花费大量时间等待Merkle树的计算。每周修理很好,并且非常适合修复较小的一致性差异。但在某一点之后,比较发现差异(Merkle树)并修复它们变得比简单地做一个decom / rejoin节点慢。