我有一个由4个节点组成的C * 3.11集群,RF为3。运行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.0
或Percent repaired: 70.0
,尽管修复命令显示修复成功,许多结果仍显示Percent repaired: 0.0
。
我在这里想念什么?
答案 0 :(得分:2)
“已修复百分比”度量标准用于增量修复。随着增量修复,有2套稳定器。已修复且未修复。一旦修复了稳定机,它将被移至已修复的设备中,并且不再参与以后的修复。当放置--full时,您指定不使用增量式修复,而是使用子范围修复,在某些情况下,修复某个范围内的整个数据集仍然是必需的,无论先前是否修复过该数据集。示例场景是非本地DC中1台主机上的磁盘出现故障,因此需要进行修复以使备份从备份中更新,或者单个节点超过提示的切换窗口等。
拥有2套sstable会有很多开销(修复过程中由于压缩而将sstable锁定,而将范围拆分为sstable则产生反压缩)。因此,当非增量维修运行时,不会对sstable进行标记,因为它们避免了这些步骤。