从文档中:
使用 nodetool repair -pr (--partitioner-range) 选项仅修复该节点的主要范围,该范围的其他副本仍然必须执行 Merkle 树计算,从而导致验证压缩。因为所有副本都在同时压缩,所以所有节点对那部分数据的响应可能很慢。
可能永远不会有任何时候我可以接受所有节点对数据的某个部分变慢。但我想知道:为什么这样做(或者可能只是与文档中的“-par”选项混淆?!),什么时候nodetool repair
似乎更聪明:
默认情况下,repair 命令会立即对每个副本进行快照,然后从快照中顺序修复每个副本。例如,如果你有 RF=3 并且 A、B 和 C 代表三个副本,则此命令立即对每个副本进行快照,然后从快照中顺序修复每个副本(A<->B,A<->C, B<->C) 而不是一次性修复 A、B 和 C。这允许动态告密者通过其他副本来维护您的应用程序的性能,因为快照中至少有一个副本没有进行修复。
但是,datastax 博客解决了这个问题:
然而,这第一阶段可能在磁盘 io 上很密集。您可以通过压缩限制在一定程度上缓解这种情况(因为这个阶段就是我们所说的验证压缩。)有时这还不够,有些人试图通过使用 -pr (-partitioner-range) 来进一步缓解这种情况nodetool repair 的选项,它只修复该节点的主要范围。不幸的是,该范围的其他副本仍然必须执行 Merkle 树计算,从而导致验证压缩。这可能是一个问题,因为所有副本将同时执行此操作,这可能会使它们都响应您的那部分数据的速度变慢。幸运的是,使用 -snapshot 选项可以解决这个问题。
这可能很好,但实际上,没有-snapshot
选项nodetool repair
(请参阅联机帮助页或文档)(是否已删除此选项?!)
所以总的来说,
- 我似乎无法使用
nodetool repair -pr
,因为我总是需要至少保持系统足够响应以保持一致的 ONE 读/写,而不会出现明显延迟。(注意:我们只有一个数据中心。)还是我遗漏/误解了什么? - 为什么
nodetool repair
聪明,让一个节点保持响应,同时nodetool repair -pr
让所有节点对一部分数据变慢? - 选项在哪里
-snapshot
:它是否已被删除,从未实现,或者它现在是否可以自动像这样工作,也在使用时nodetool repair -pr
?