#cassandra #nodetool
#cassandra #nodetool
Вопрос:
Согласно документации datastrax (последняя версия) для восстановления nodetool
Все параметры команды nodetool repair являются необязательными. Если необязательные аргументы команды не указаны, по умолчанию используются:
- Полное восстановление выполняется для всех пространств ключей и всех таблиц.
- Восстановление выполняется параллельно на всех узлах с одинаковыми данными реплики одновременно.
- Количество потоков заданий равно 1.
- Трассировка отсутствует. Нет проверки.
Но согласно онлайн-курсу по https://academy.datastax.com, в том, что они упомянули, поскольку нам нужно выполнить команду nodetool repair индивидуально на каждом узле.
Ниже приведена ссылка на видео: Перейдите к 3:44
Я запутался, восстанавливает ли команда «nodetool repair» все узлы в кластере или восстанавливает только один узел, на котором выполняется команда?
Ответ №1:
Допустим, у нас есть кластер из трех узлов, коэффициент репликации 2, а стратегия репликации — SimpleStrategy. У Node1 будут данные Node1, а также реплика Node2. У Node2 будут данные Node2, а также реплика Node3. Node3 будет иметь данные Node3, а также реплику Node1.
Теперь, если вы запустите nodetool repair на Node1. Поскольку по умолчанию используется полное восстановление. Восстанавливаются следующие данные:
1) Данные Node1 в Node1
2) Реплика Node1 в Node3
3) Реплика Node2 в Node1
4) Данные Node2 в Node2
В этом случае данные или реплика Node3 не восстанавливаются. Таким образом, восстановление nodetool должно выполняться на Node3 для восстановления всего кластера.
В видео от 3: 44 он говорит о —partitioner-range, что означает, что восстанавливается только основной раздел. Итак, в вышеупомянутом кластере, если вы запустите nodetool repair —partitioner-range на Node1, тогда
1) Данные Node1 в Node1
2) Реплика Node1 в Node3
В этом случае nodetool repair —partitioner-range должен быть запущен на всех последующих узлах.
Комментарии:
1. Предположим, если у меня есть кластер из 3 узлов с коэффициентом репликации 3, то ИМО мне не нужно запускать
nodetool repair --full
на каждом узле, поскольку узел 1 будет иметь свои собственные данные и реплику узла 2 и узла 3.2. @AmanJain Это правильно. В вашем случае запуск полного восстановления на одном узле восстанавливает весь кластер.
Ответ №2:
Команда nodetool repair может быть запущена на определенном узле или на всех узлах в кластере, если узел не указан, независимо от центра обработки данных.
http://cassandra.apache.org/doc/latest/operating/repair.html
https://docs.datastax.com/en/archived/cassandra/2.2/cassandra/operations/opsRepairNodesWhen.html