在我的Cassandra节点上定期运行nodetool repair
会使它们瘫痪吗?
Planet Cassandra FAQ注释(强调添加)
反熵节点修复 - 对于不经常读取的数据,或者为了在长时间停机的节点上更新数据,节点修复过程(也称为反熵修复)可确保所有副本上的数据保持一致。节点修复(使用nodetool实用程序)应作为常规集群维护操作的一部分定期运行。
这是我见过的唯一定期运行nodetool repair
的参考。如果它便宜,经常运行它不会是一个问题,但它有多贵?它是否相当于对节点上每条记录的一致性检查读取?还是比这更聪明?文档提到了Merkle树的使用,但这并没有让我知道操作有多昂贵。
如果一个节点上有500 GB的数据,并且该节点实际上与其他节点一致(修复是无操作),那么修复从磁盘读取的数据量(读取所有500 GB的数据)花几个小时)?关于通过LAN发送多少数据(通过LAN发送所有500 GB可能需要一个小时左右)。
答案 0 :(得分:16)
某些用例比其他用例更依赖于定期维修。如果以低于ConsistencyLevel.ALL执行删除,则应运行修复以确保已删除的列不再生效。如果不进行删除操作,则可以依赖于提示切换和读取修复以在许多情况下保持一致性。如果您以低一致性级别进行读写,或经常出现服务器停机或超载,则可能需要运行修复。
通过所有读取运行它的节点上的数据(可选地,使用-pr(主要范围)选项),只读取节点拥有主要范围的范围。并建立一个Merkle树。它还向存储任何这些范围的副本的所有节点发送消息以执行相同操作 - 它们只读取在初始修复节点上复制的数据。
在具有500 GB的节点上构建Merkle树将读取完整的500 GB(使用-pr时,它将大致是复制因子的较低因素)。但是,Merkle树的大小是恒定的(几MB),因此如果节点同步,则通过网络发送的很少。
运行计划修复的最佳方法是依次在每个节点上运行-pr。这避免了多次修复相同的数据。此外,只能一次在一个节点上运行,以避免在群集上增加额外负载。