如何通过从种子节点流式传输来恢复 Cassandra 节点?
How to recover a Cassandra node by streaming from a seed node?
一个 Apache Cassandra 节点 运行 正在复制因子为 3 的 3 节点集群中。所有配置都是正确的。 Cassandra 版本是 2.1.8.
让我们假设数据在逻辑上已损坏到无法修复,这意味着它无法通过常用工具(清理/修复)恢复。
正常状态下节点宕机
考虑通过从在 cassandra.yaml 中注册的种子节点流式传输节点恢复的场景(而不是用另一个节点替换该节点):
如果我删除该节点上的顶级数据目录,包括 commitlog、data、hints 和 saved_caches 目录并启动服务,会发生什么情况?节点是否会从那时起正常恢复,我可以 运行 nodetool repair 将最旧的数据导入节点?
如果我改为启动服务 运行 nodetool rebuild 是否足以解决问题?
如果上述 none 是最佳实践,是否可以解决 停用 节点并使其再次加入集群的问题?
你会有更好的运气 退役 节点,擦除它(数据,提交日志,& saved_caches 目录),指定它的 IP 作为 cassandra 中的替换地址-env.sh,重新加入集群。
nodetool rebuild
当您有多个数据中心并且您希望将数据流定向到特定 DC 时很有用。
nodetool repair
技术上可行(回答 "yes" 到 #1),但您将花费大量时间等待 Merkle 树计算。维修最好每周进行一次,并且非常适合修复细微的一致性差异。但是在某个点之后,比较以发现差异(Merkle 树)并修复它们变得比简单地对节点执行 decom/rejoin 更慢。
一个 Apache Cassandra 节点 运行 正在复制因子为 3 的 3 节点集群中。所有配置都是正确的。 Cassandra 版本是 2.1.8.
让我们假设数据在逻辑上已损坏到无法修复,这意味着它无法通过常用工具(清理/修复)恢复。
正常状态下节点宕机
考虑通过从在 cassandra.yaml 中注册的种子节点流式传输节点恢复的场景(而不是用另一个节点替换该节点):
如果我删除该节点上的顶级数据目录,包括 commitlog、data、hints 和 saved_caches 目录并启动服务,会发生什么情况?节点是否会从那时起正常恢复,我可以 运行 nodetool repair 将最旧的数据导入节点?
如果我改为启动服务 运行 nodetool rebuild 是否足以解决问题?
如果上述 none 是最佳实践,是否可以解决 停用 节点并使其再次加入集群的问题?
你会有更好的运气 退役 节点,擦除它(数据,提交日志,& saved_caches 目录),指定它的 IP 作为 cassandra 中的替换地址-env.sh,重新加入集群。
nodetool rebuild
当您有多个数据中心并且您希望将数据流定向到特定 DC 时很有用。
nodetool repair
技术上可行(回答 "yes" 到 #1),但您将花费大量时间等待 Merkle 树计算。维修最好每周进行一次,并且非常适合修复细微的一致性差异。但是在某个点之后,比较以发现差异(Merkle 树)并修复它们变得比简单地对节点执行 decom/rejoin 更慢。