У меня кластер C * 3.11 из 4 узлов, а 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
, даже если команда восстановления показывает, что исправлено успешно.
Что я здесь пропустил?
Показатель «процент отремонтированных» предназначен для дополнительного ремонта. При поэтапном ремонте есть 2 комплекта каркасов. Ремонт и без ремонта. После ремонта каркас будет перемещен в отремонтированный комплект и больше не будет использоваться в дальнейшем ремонте. Когда вы устанавливаете --full, вы указываете не использовать инкрементное восстановление, а восстановление поддиапазона, которое все еще необходимо в некоторых ситуациях для восстановления всего набора данных в пределах некоторого диапазона, независимо от того, было ли оно исправлено ранее или нет. Пример сценария - сбой диска на 1 хосте в нелокальном контроллере домена, поэтому выполните ремонт, чтобы обновить замену из резервной копии, или один узел после предполагаемого окна передачи обслуживания и т. д.
Наличие двух наборов стоек сопряжено с большими накладными расходами (блокировка стойл во время ремонта из-за уплотнений и антиуплотнение, когда диапазоны разделяют стойку). Поэтому, когда выполняется непостоянный ремонт, sstables не отмечаются, поскольку они избегают этих шагов.