Разъяснения по ремонту nodetool -pr

Из документации:

При использовании параметра nodetool repair -pr (–partitioner-range) восстанавливается только основной диапазон для этого узла, другие реплики для этого диапазона по-прежнему должны выполнять расчет дерева Меркла, вызывая сжатие проверки. Поскольку все реплики уплотняются одновременно, все узлы могут медленно реагировать на эту часть данных.

Вероятно, никогда не будет времени, когда я могу принять, что все узлы работают медленно для определенной части данных. Но мне интересно: почему он делает это (или, может быть, это просто путаница с опцией "-par" в документации?!), когда nodetool repair кажется умнее:

По умолчанию команда восстановления немедленно делает моментальный снимок каждой реплики, а затем последовательно восстанавливает каждую реплику из моментальных снимков. Например, если у вас RF=3, а A, B и C представляют три реплики, эта команда немедленно делает моментальный снимок каждой реплики, а затем последовательно восстанавливает каждую реплику из моментальных снимков (A‹->B, A‹->C, B‹->C) вместо того, чтобы восстанавливать A, B и C одновременно. Это позволяет динамическому снитчу поддерживать производительность вашего приложения через другие реплики, поскольку по крайней мере одна реплика в моментальном снимке не подвергается восстановлению.

Однако в блоге datastax эта проблема рассматривается:

Однако эта первая фаза может быть интенсивной на disk io. Вы можете в некоторой степени смягчить это с помощью дросселирования сжатия (поскольку этот этап называется проверочным уплотнением). Иногда этого недостаточно, и некоторые люди пытаются еще больше смягчить это, используя -pr (–partitioner-range) опция восстановления nodetool, которая восстанавливает только основной диапазон для этого узла. К сожалению, другим репликам для этого диапазона все равно придется выполнять расчет дерева Меркла, что приведет к уплотнению проверки. Это может быть проблемой, так как все реплики будут делать это одновременно, что может замедлить их реакцию на эту часть ваших данных. К счастью, это можно обойти с помощью опции -snapshot.

Это может быть хорошо, но на самом деле для nodetool repair нет опции -snapshot (см. справочную страницу или документацию) (эту опцию убрали?!)

Итак, в целом,

  • Кажется, я не могу использовать nodetool repair -pr, потому что мне всегда нужно, по крайней мере, чтобы система достаточно быстро реагировала на чтение/запись с согласованностью ОДИН, без значительной задержки. (Примечание: у нас только один центр обработки данных.) Или я что-то упускаю/не понимаю?
  • Почему nodetool repair является умным, сохраняя отклик одного узла, а nodetool repair -pr замедляет работу всех узлов для части данных?
  • Где опция -snapshot: она была удалена, никогда не применялась, или теперь она может работать так автоматически, в том числе при использовании nodetool repair -pr?

person Chris Lercher    schedule 24.09.2014    source источник
comment
Кажется безопасным предположить, что на момент написания блога (июль 2013 г.) существовала опция моментального снимка, потому что в документах Cassandra 1.2 говорится о опции nodetool repair -snapshot: datastax.com/documentation/cassandra/1.2/cassandra/operations/.   -  person catpaws    schedule 24.09.2014
comment
В этом документе есть некоторая информация об использовании nodetool (параметр -pr не рекомендуется) и примеры использования параметра parallel (par). datastax.com/documentation/cassandra/2.1/ Кассандра/инструменты/   -  person catpaws    schedule 24.09.2014
comment
@catpaws: Спасибо, оба ваших комментария содержат очень ценную информацию (которой на самом деле нет в документации 2.0)!   -  person Chris Lercher    schedule 24.09.2014
comment
Я думаю, что параметр -snapshot стал поведением по умолчанию в версии 2.0, а параметр -par был добавлен, чтобы разрешить доступ к предыдущему поведению (что все еще полезно, если вы можете принять удар по производительности и / или хотите, чтобы восстановление завершилось быстрее.   -  person Carl G    schedule 09.12.2015
comment
@catpaws - странно, что этот документ ссылка из документа, который вы цитируете, говорит, что опция -pr рекомендуется для планового обслуживания.   -  person LHWizard    schedule 10.05.2016
comment
@LHWizard прошло почти пару лет с момента этого сообщения, и документы действительно меняются, но в этом случае я думаю, что вы нажали не ту ссылку? На этой странице я все еще вижу, что выполнение восстановления диапазона разделителей с использованием параметра -pr обычно не рекомендуется.   -  person catpaws    schedule 20.05.2016


Ответы (1)


В приведенном ниже блоге рассматриваются следующие вопросы:

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

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

Следовательно, nodetool repair -pr выполнит ремонт основных диапазонов на этом узле. Вам нужно будет запустить это на каждом узле кластера, как говорится в блоге. Клиенты с большими производственными системами, как правило, будут использовать это последовательно в своем кластере.

С другой стороны, Datastax OpsCenter предлагает сервис ремонта, который ремонтирует все время, поэтому, хотя вы всегда ремонтируете его, он все время происходит в фоновом режиме на более низком уровне ресурсов.

Что касается моментальных снимков, запуск обычного восстановления вызовет моментальный снимок, как вы сказали, вы также можете самостоятельно вызвать моментальный снимок, используя nodetool snapshot

Надеюсь это поможет!

person markc    schedule 17.01.2015