Восстанавливает ли команда node tool repair все узлы в кластере или восстанавливает один узел, на котором выполняется команда?

#cassandra #nodetool

#cassandra #nodetool

Вопрос:

Согласно документации datastrax (последняя версия) для восстановления nodetool

Все параметры команды nodetool repair являются необязательными. Если необязательные аргументы команды не указаны, по умолчанию используются:

  • Полное восстановление выполняется для всех пространств ключей и всех таблиц.
  • Восстановление выполняется параллельно на всех узлах с одинаковыми данными реплики одновременно.
  • Количество потоков заданий равно 1.
  • Трассировка отсутствует. Нет проверки.

Но согласно онлайн-курсу по https://academy.datastax.com, в том, что они упомянули, поскольку нам нужно выполнить команду nodetool repair индивидуально на каждом узле.

Ниже приведена ссылка на видео: Перейдите к 3:44

https://academy.datastax.com/units/21018-repair-dse-operations-apache-cassandra?resource=ds210-datastax-enterprise-6-operations-with-apache-cassandra

Я запутался, восстанавливает ли команда «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