【问题标题】:How to recover a Cassandra node by streaming from a seed node?如何通过从种子节点流式传输来恢复 Cassandra 节点?
【发布时间】:2017-05-17 15:30:45
【问题描述】:

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

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

节点处于正常状态。

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

  1. 如果我删除该节点上的顶级数据目录(包括 commitlog、data、hints 和 saved_caches 目录)并启动服务会怎样?节点是否会从那时起优雅地恢复,我可以运行 nodetool repair 将最旧的数据放入节点吗?

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

  3. 如果以上都不是最佳实践,是否是停用节点并使其重新加入集群的解决方案?

【问题讨论】:

    标签: cassandra cassandra-2.1


    【解决方案1】:

    停用节点,擦除它(数据、提交日志和 saved_caches 目录),将其 IP 指定为 cassandra-env.sh 中的替换地址,然后 将其重新加入集群。

    nodetool rebuild 在您拥有多个数据中心并且希望将流引导至来自特定 DC 时非常有用。

    nodetool repair 在技术上可以工作(对 #1 回答“是”),但您将花费大量时间等待 Merkle 树计算。每周进行一次维修是一件好事,并且非常适合修复轻微的一致性差异。但是在某个点之后,比较发现差异(Merkle 树)并修复它们变得比简单地对节点进行 decom/rejoin 慢。

    【讨论】:

      猜你喜欢
      • 2016-01-21
      • 2016-12-21
      • 2014-10-21
      • 2021-12-15
      • 2019-01-03
      • 1970-01-01
      • 2020-12-22
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多