Запуск nodetool repair
на одном узле делает следующее: Узел восстанавливает все данные, которые он хранит, связываясь с другими узлами, которые также отвечают за эти данные. Он не восстанавливает данные, за которые этот узел не отвечает.
Очень простой пример без vnodes:
Предположим, у вас есть три узла (A, B и C), и ваша самая низкая репликация - два. Если вы выполните восстановление на A, оно выполнит восстановление данных, которые имеют общие для A и B, а также данных, которые имеют общие для A и C. Однако он не восстановит данные, которые хранятся только на B и C.
В этом примере выполнение восстановления на двух узлах гарантирует, что вы все исправили.
Флаги -pr и -local
Флаг -pr еще больше меняет это поведение. Вместо ремонта АБ и АС. Вы восстанавливаете только те данные, за которые A несет основную ответственность. В этом случае вам нужно отремонтировать B и C отдельно. Это гарантирует, что вы не восстановите одни и те же данные дважды.
-local гарантирует, что ремонт восстанавливает только узлы в одном и том же центре данных. B находился в другом центре обработки данных, он будет игнорироваться для целей ремонта.
Я бы рекомендовал запускать -pr на каждом узле по одному. Это позволит избежать многократного восстановления одних и тех же данных и разбить их на более мелкие перевариваемые куски.