Нужно ли выполнять восстановление nodetool на каждом узле?

12

Вам нужно работать nodetool repairна каждом узле в кластере, или вам нужно только запустить его на одном узле, а оттуда Кассандра позаботится обо всем остальном?

2rs2ts
источник

Ответы:

9

Просматривая документацию, я с трудом нахожу для этого ссылку, но краткий ответ - «да», вам нужно работать nodetool repairна каждом узле в вашем кластере. Самое близкое, что я могу найти, - это документация по восстановлению узлов, в которой предлагается, чтобы вы не запускали восстановление более чем на одном узле в кластере одновременно.

Вы также можете запустить восстановление с -prфлагом, который ограничивает операцию восстановления первым диапазоном токенов, за который отвечает текущий узел. Это сокращает дублирование работы при запуске на оставшихся узлах.

Аарон
источник
Так что, если я буду работать с -prкаждым узлом, охватит ли это все пространство ключей?
2rs2ts
1
@ 2rs2ts Да, если вы запустите его -prна каждом узле, он охватит все пространство ключей.
Аарон
1
Хорошо ... Я предполагаю, что вы должны запускать его на каждом узле, но вы можете сэкономить время с помощью -prфлага.
2rs2ts
1
Я добавил некоторые источники к другому ответу. Этот источник достаточно ясен: «Жестким требованием к частоте обычного ремонта является значение gc_grace_seconds. Выполните операцию восстановления хотя бы один раз на каждом узле в течение этого периода времени». Ремонт узлов
Carl G
5

Как это ведет себя, зависит от вашей конфигурации, какую версию Cassandra вы используете и как вы запускаете команду восстановления.

Если вы просто запустите nodetool repairодин узел в кластере, он восстановит все данные (диапазоны токенов), за которые отвечает этот узел, а также другие узлы, которые отвечают за эти данные.

Например, если вам нужно было запустить nodetool repairкоманду на одном узле в данном кластере:

  • Если вы используете кластер из трех узлов с коэффициентом репликации три, все узлы будут владеть всеми данными, и, таким образом, будут выполнены ремонтные работы для всех узлов.
  • Если вы используете кластер из шести узлов с коэффициентом репликации 2, данные будут восстановлены только на двух из шести узлов. Ремонт нужно будет начать еще на двух оставшихся четырех узлах.

Тем не менее, можно определить , какие узлы и центры обработки данных для выполнения ремонтных работ на использование -hostsи -dcфлагов. Кроме того, если вы используете -prфлаг (который выберет только первый диапазон токенов, за который отвечает узел), вам придется работать nodetool repair -prна всех узлах кластера.

Еще один флаг, о котором следует помнить, это -incфлаг, который был включен в Cassandra 2.1. Эта опция восстанавливает только новые данные (данные, которые ранее не были восстановлены). Будьте осторожны, полагаясь на это, особенно если вы часто удаляете данные. ( подробнее об этом )

Следует также помнить, что стандартные способы ремонта в Кассандре могут различаться. Начиная с Cassandra 2.1 при запуске nodetool repairон выполняет полное последовательное восстановление по умолчанию. Вы хотите посмотреть, что делает ваша версия.

Для получения дополнительной информации по теме:

https://www.datastax.com/dev/blog/repair-in-cassandra

Ген
источник
2
Единственный хороший ответ здесь
Руруський
2

Нет, вам не нужно работать на каждом отдельном узле. nodetool repairработает на множестве узлов, что четко указано в документации .

Вы можете ограничить узлы или часть данных, на которых вы хотите выполнить восстановление. Например, вы можете предоставить -prопцию для диапазона разделителя, диапазона, за который отвечает узел, но это должно выполняться на всем кластере. Но если вы выбрали -local, то узлы в локальном центре данных узла будут восстановлены.

nkzscorpion
источник
4
Выполнение nodetool repairна одном узле недостаточно для восстановления всех реплицированных данных на всех узлах во всех конфигурациях. Работа nodetool repairна одном узле будет восстанавливать только данные, реплицированные на этом узле. (Добавление этой -prопции ограничивает восстановление данных, для которых этот узел является первой репликой.) Но если в вашем кластере есть данные, которые не реплицированы на этом узле, то вы должны работать nodetool repairна дополнительных узлах.
Карл Дж
2
«Если опция -pr не указана, Cassandra восстанавливает все диапазоны реплик, которые входят в сферу ответственности узла». документы по восстановлению nodetool (т. е. не восстанавливает данные, для которых этот узел не отвечает за репликацию.) «Жестким требованием к частоте обычного восстановления является значение gc_grace_seconds. Выполните операцию восстановления по крайней мере один раз на каждом узле в течение этого периода времени». Ремонт узлов
Carl G