Cassandra:挂节点工具修复
Posted
技术标签:
【中文标题】Cassandra:挂节点工具修复【英文标题】:Cassandra: Hanging node tool repair 【发布时间】:2016-09-26 06:48:59 【问题描述】:cassandra 集群有 3 个区域,每个区域有 2 个节点,共 6 个。然后我们又添加了 3 个区域,现在集群中总共有 12 个 cassandra 节点。添加节点后,我们更新了复制因子并开始了 nodetool 修复。但是该命令已挂起超过 48 多个小时且尚未完成。当我们查看日志时,1 或 2 个 AntiEntropySessions 仍然挂起,因为一些 CF 没有完全同步。所有 AntiEntropySessions 都从所有 CF 的所有节点成功获取 merkle 树。但是某些 CF 的某些节点的某些修复 b/w 未完成,因此导致挂起的 AntiEntropySessions 并且修复挂起。
我们使用的是 Cassandra 1.1.12。我们现在无法升级 Cassandra。 我们已重新启动节点并再次开始修复,但它仍然挂起。 我们观察到一个 CF 在修复期间处于活动状态的最初 3 个区域中频繁读写,但始终无法完全同步。
是否有必要在运行修复时不应该在任何 CF 中进行任何读/写操作? 或者建议我这里有什么问题?
【问题讨论】:
【参考方案1】:Cassandra 1.1 已经很老了,所以很难记住确切的问题,但是流式传输存在问题,可能会挂起。一些原因是读取超时或连接被重置。由于您已经过了 1.1.11,尽管您可以尝试进行子范围修复。
尝试找到一个可以在一小时内修复的适当令牌范围(继续运行越来越小的范围,直到您可以完成它),设置几个小时的超时。预计某些修复会失败(超时),因此只需重试它们直到它们完成。如果在多次重试后仍无法获得它,则继续使该子范围变小,但即便如此,如果您有一个非常宽的分区(可以与 nodetool cfstats
检查),它可能会出现问题,这会使情况变得更糟。
完成维修后,疯狂升级。
【讨论】:
谢谢。子范围修复帮助我修复了特定的令牌范围。以上是关于Cassandra:挂节点工具修复的主要内容,如果未能解决你的问题,请参考以下文章
如果 Cassandra 配置为从不执行 gc 并且所有读取和写入都是仲裁,是不是需要 nodetool 修复?