在nodetool修复期间Cassandra Replicas Down?

Sac*_*ali 5 repair cassandra nodetool

我正在为nodetool修复开发一个自动脚本,它将在所有6个Cassandra节点上执行.我们在DC1中有3个,在DC2中有3个.只是想了解最坏的情况.如果在节点工具修复之前或期间DC1和DC2之间的连接丢失或者几个副本发生故障,会发生什么.它可能是网络问题,网络升级(通常在周末发生),或其他.我了解nodetool repair为该节点上的每个数据范围计算Merkle树,并将其与其他副本上的版本进行比较.因此,如果它们在副本之间没有连接,那么nodetool修复会如何表现?它真的会修复节点吗?所有节点启动并恢复连接后,是否必须重新运行节点工具修复.他们会有这个事件的副作用吗?我瞪着它但却找不到太多细节.任何见解都会有所帮助.

谢谢.

Ser*_*rán 1

假设您使用的是 vnode,默认情况下这意味着每个节点有 256 个范围,但想法是相同的。

如果网络问题发生在 nodetool 修复已经开始之后,您将在日志中看到某些范围已成功修复,而其他范围则未成功修复。该错误将表明范围修复失败,因为节点“192.168.1.1 已死亡”之类的东西。

如果网络错误发生在节点工具修复开始之前,所有范围都将失败并出现相同的错误。

在这两种情况下,您都需要在网络问题解决后运行另一个节点工具修复。

我不知道这 6 个节点中的数据量,但根据我的经验,如果集群可以处理它,最好每周在一周的不同日期运行一次 Nodetool Repair。例如,您可以在周日修复节点 1,周一修复节点 2,依此类推。如果您的数据量较少或者一天内的添加/更新不是太多,您甚至可以每天运行一次修复。当你有一个已经修复的集群并且你更频繁地运行nodetool修复时,完成它所需的时间会少得多,但如果你有太多数据,则可能无法完成。

关于副作用,如果您使用一致性级别 1,您只能注意到数据中的差异,如果您对“未修复”节点运行查询,则数据将与“已修复”节点上的数据不同。例如,您可以通过将一致性级别增加到 2 来解决此问题,然后,如果 2 个节点“未修复”并且您运行的查询是使用这 2 个节点解析的,您将再次看到差异。您在这里需要进行权衡,因为避免查询中这种“差异”的最佳选择是使一致性级别 = 复制因子,这会带来另一个问题,当其中 1 个节点关闭时,整个集群都会关闭,您将开始接收查询超时。

希望能帮助到你!