"nodetool修复"操作有多贵?

Rae*_*ald 3 maintenance cassandra nodetool

经常nodetool repair在我的Cassandra节点上运行会使它们瘫痪吗?

行星卡桑德拉常见问题说明(强调)说

反熵节点修复-对于数据未频繁地读取,或更新已向下延长的期间内,节点修复过程(也被称为反熵修复)在一个节点上的数据,确保上的所有数据副本是一致的.作为常规集群维护操作的一部分,应定期运行节点修复(使用nodetool实用程序).

这是我见过的nodetool repair经常运行的唯一参考.如果它便宜,经常运行它不会是一个问题,但它有多贵?它是否相当于对节点上每条记录的一致性检查读取?还是比这更聪明?文档提到了Merkle树的使用,但这并没有让我知道操作的成本有多高.

如果你有500 GB数据的节点上,并在该节点与其他节点实际上是一致的(修为无操作),多少数据并从磁盘(读取所有500 GB读修复将采取一对夫妇小时)?关于通过LAN发送多少数据(通过LAN发送所有500 GB可能需要一个小时左右).

Ric*_*ard 16

一些用例比其他用例更依赖于定期维修.如果以低于ConsistencyLevel.ALL执行删除操作,则应运行修复以确保已删除的列不再生效.如果不进行删除操作,则可以依赖于提示切换和读取修复以在许多情况下保持一致性.如果您以低一致性级别进行读写,或者经常出现服务器停机或超载,则可能需要运行修复.

通过运行它的节点上的所有数据读取所做的修复(可选地,使用-pr(主要范围)选项,仅读取节点拥有主要范围的范围)并构建Merkle树.它还向存储任何这些范围的副本的所有节点发送消息以执行相同操作 - 它们只读取在初始修复节点上复制的数据.

要在500 GB的节点上构建Merkle树,将读取完整的500 GB(使用-pr时,它将大致是复制因子的较低因素).但是,Merkle树是恒定大小(几MB),因此如果节点同步,则通过网络发送的很少.

运行计划修复的最佳方法是依次在每个节点上运行-pr.这避免了多次修复相同的数据.此外,只能一次在一个节点上运行,以避免在群集上增加额外负载.