Cassandra 表统计显示完全修复后修复率为 0.0%

Fon*_*007 2 cassandra

我有一个包含 4 个节点的 C* 3.11 集群,RF 为 3。在我运行 a 后nodetool repair -full ks1 tb1,命令窗口显示

Starting repair command #18 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), repairing ks1 with repair options (parallelism: parallel, primary range: false, incremental: false, job threads: 1, ColumnFami lies: [device], dataCenters: [], hosts: [], # of ranges: 404, pull repair: false)

和

[2018-01-01 01:25:57,730] Repair completed successfully [2018-01-01 01:25:57,734] Repair command #18 finished in 29 seconds

所以我认为修复运行成功。尽管如此,当我检查时nodetool tablestats ks1.tb1,命令窗口显示

Percent repaired: 0.0

根据表的不同,结果可能是Percent repaired: 100.0orPercent repaired: 70.0并且许多仍然显示Percent repaired: 0.0,即使修复命令显示已成功修复。

我在这里错过了什么?

Chr*_*ink 5

修复百分比指标用于增量修复。通过增量修复,有 2 组 sstables。已修复和未修复。一旦 sstable 被修复,它将被移动到已修复的集合中,并且不再参与以后的修复。当您放置 --full 时,您指定不使用增量修复而是使用子范围修复,在某些情况下仍然需要修复某个范围内的整个数据集,无论之前是否已修复。示例场景是非本地 DC 中的 1 台主机发生磁盘故障,因此需要进行修复以从备份中更新替换内容,或者单个节点超过提示的切换窗口等。

拥有 2 组 sstable 会产生大量开销(在压缩修复期间锁定 sstable,以及在范围分割 sstable 时进行反压缩)。因此,当运行非增量修复时,sstables 不会被标记,因为它们避免了这些步骤。