diff options
author | alextarazanov <alextarazanov@yandex-team.com> | 2022-10-26 11:24:19 +0300 |
---|---|---|
committer | alextarazanov <alextarazanov@yandex-team.com> | 2022-10-26 11:24:19 +0300 |
commit | 2399206380b6eab57bb7b9ad0bf0ecf851c94c1d (patch) | |
tree | becc78caf8dd907fde5b802697aeb6b7b9629447 | |
parent | 84bd4d304120cf81f0f9dea4185c3ef318f7c1c8 (diff) | |
download | ydb-2399206380b6eab57bb7b9ad0bf0ecf851c94c1d.tar.gz |
[review] [YDB] SelfHeal update
> https://5b0a31e1a9f02ce8fbd9b5fdde7f4601168f65ee.testing.docs.yandex-team.ru/ydb-tech/maintenance/manual/selfheal
-rw-r--r-- | ydb/docs/ru/core/_assets/pencil.svg | 3 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/selfheal.md | 239 | ||||
-rw-r--r-- | ydb/docs/ru/core/maintenance/manual/toc_i.yaml | 2 |
3 files changed, 139 insertions, 105 deletions
diff --git a/ydb/docs/ru/core/_assets/pencil.svg b/ydb/docs/ru/core/_assets/pencil.svg new file mode 100644 index 0000000000..be1c4581d6 --- /dev/null +++ b/ydb/docs/ru/core/_assets/pencil.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="-2 -1 16 16"><g stroke="none" fill="currentColor" stroke-width="1px">
+ <path d="M10.022 7.172L4.578 13.61a.505.505 0 0 1-.446.175.812.812 0 0 1-.087.005H.5a.498.498 0 0 1-.202-.043.439.439 0 0 1-.298-.415v-3.44c0-.124.048-.237.127-.32a.477.477 0 0 1 .043-.06l5.257-6.195 4.595 3.855zm1.291-1.527L6.721 1.792 8.01.274a.467.467 0 0 1 .068-.066A.428.428 0 0 1 8.721.1l3.89 3.262a.483.483 0 0 1 .019.723.372.372 0 0 1-.022.028l-1.295 1.532zM1 10.574v2.216h2.51a2.231 2.231 0 0 0-2.23-2.216H1z" stroke="none" fill="currentColor" stroke-width="1px"></path>
+</g></svg>
diff --git a/ydb/docs/ru/core/maintenance/manual/selfheal.md b/ydb/docs/ru/core/maintenance/manual/selfheal.md index 9bbee42c3e..e11810e1e8 100644 --- a/ydb/docs/ru/core/maintenance/manual/selfheal.md +++ b/ydb/docs/ru/core/maintenance/manual/selfheal.md @@ -1,110 +1,141 @@ -# Включение/выключение SelfHeal {#selfheal} +# Работа с SelfHeal -В процессе работы кластеров могут выходить из строя отдельные блочные устройства, на которых работает ydb, либо узлы целиком. Для сохранения работоспособности и отказоустойчивости кластера в условиях, когда оперативная починка вышедших из строя узлов или устройств невозможна, используется механизм SelfHeal. +В процессе работы кластеров могут выходить из строя узлы целиком или отдельные блочные устройства, на которых работает {{ ydb-short-name }}. -Механизм SelfHeal состоит из двух частей. Детектирование неисправных дисков и перевоз их в щадящем режиме не допуская потери данных и развала групп хранения. +SelfHeal используется для сохранения работоспособности и отказоустойчивости кластера, если невозможно быстро восстановить вышедшие из строя узлы или устройства. -По умолчанию SelfHeal включен. -Ниже инструкция по включению в случае если он выключен, аналогично SelfHeal можно выключить. +SelfHeal позволяет: +* обнаружить неисправные элементы системы; +* перенести неисправные элементы в щадящем режиме без потери данных и расформирования групп хранения. -1. Включение детектирования +По умолчанию SelfHeal включен. - Открыть страницу +## Включение и выключение SelfHeal {#on-off} - ```http://localhost:8765/cms#show=config-items-25``` - - Можно включить через viewer -> Cluster Management System -> CmsConfigItems - - Поле Status: Enable - - Или через cli - - * Зайти на любой узел - - * Составить файл с измененными конфигурациями - - Пример файла config.txt - - ``` - Actions { - AddConfigItem { - ConfigItem { - Config { - CmsConfig { - SentinelConfig { - Enable: true - } - } - } - } - } - } - ``` - - * Обновить конфиг на кластере - - ```bash - kikimr admin console configs update config.txt - ``` - -2. Включение перевоза - - ```bash - kikimr -s <endpoint> admin bs config invoke --proto 'Command{EnableSelfHeal{Enable: true}}' - ``` - -Выключение аналогично, с установкой значения false. - -### Настройки SelfHeal - -viewer -> Cluster Management System -> CmsConfigItems -Если настроек еще нет, то нажать на кнопку Create, если есть, то на кнопку "карандашик" в углу. - -* **Status** - Включение-выключение Self Heal в CMS. -* **Dry run** - Включение-выключение режима, в котором CMS не изменяет настройку BSC. -* **Config update interval (sec.)** - Период обновления конфига из BSC. -* **Retry interval (sec.)** - Период ретраев обновления конфига. -* **State update interval (sec.)** - Период обновления Состояний PDisk-ов, Состояние - это то что мы наблюдаем (через whiteboard, например) -* **Timeout (sec.)** - таймаут обновления Состояний PDisk-ов -* **Change status retries** - количество ретраев на изменение Статуса PDisk в BSC, Статус - это то, что хранится в BSC (ACTIVE, FAULTY, BROKEN, etc). -* **Change status retry interval (sec.)** - задержка между попытками на изменение Статуса PDisk в BSC - CMS наблюдает Состояние диска с интервалом **State update interval**. Если диск пребывает в одном состояний несколько циклов **Status update interval**, то CMS меняет его Статус в BSC. - Дальше идут настройки количества циклов обновления, через которое CMS будет изменять Статус диска. Если Состояние диска Normal, то диск переводится в Статус ACTIVE, в остальных состояниях диск переводится в статус FAULTY. Значение 0 выключает изменение Статуса для состояния (так сделано для Unknown по умолчанию). - Например, при настройках по умолчанию, если CMS наблюдает состояние диска Initial на протяжении 5 циклов Status update interval по 60 с каждый, Статус диска будет изменен на FAULTY. -* **Default state limit** - Для Состояний, для которых нет указана настройка, может использоваться это значение "по умолчанию". Для неизвестных Состояний PDisk, для которых нет настройки, тоже используется это значение. Это значение используется если значение не задано для Состояний Initial, InitialFormatRead, InitialSysLogRead, InitialCommonLogRead, Normal. -* **Initial** - PDisk начинает инициализацию. Переход в FAULTY. -* **InitialFormatRead** - PDisk читает свою запись формата. Переход в FAULTY. -* **InitialFormatReadError** - PDisk получил ошибку при чтении своей записи формата. Переход в FAULTY. -* **InitialSysLogRead** - PDisk читает системный лог. Переход в FAULTY. -* **InitialSysLogReadError** - PDisk получил ошибку при чтении системного лога. Переход в FAULTY. -* **InitialSysLogParseError** - PDisk получил ошибку при парсинге или проверке консистентности системного лога. Переход в FAULTY. -* **InitialCommonLogRead** - PDisk читает общий лог VDisk'ов. Переход в FAULTY. -* **InitialCommonLogReadError** - PDisk получил ошибку при чтении общего лога VDisk'ов. Переход в FAULTY. -* **InitialCommonLogParseError** - PDisk получил ошибку при парсинге или проверке консистентности общего лога. Переход в FAULTY. -* **CommonLoggerInitError** - PDisk получил ошибку при инициализации внутренних структур предназначенных для записи в общий лог. Переход в FAULTY. -* **Normal** - PDisk завершил инициализацию и работает нормально. Переход в ACTIVE произойдет через это количество Циклов (т.е. по умолчанию если Normal держится 5 минут, переводим диск в ACTIVE) -* **OpenFileError** - PDisk получил ошибку при открытии файла диска. Переход в FAULTY. -* **Missing** - Нода отвечает, но в её списке нет данного PDisk. Переход в FAULTY. -* **Timeout** - Нода не ответила за отведенный таймаут. Переход в FAULTY. -* **NodeDisconnected** - Отключение ноды. Переход в FAULTY. -* **Unknown** - Что-то неожиданное, например ответ TEvUndelivered на запрос состояния. Переход в FAULTY. - -## Включение/выключение дисков-доноров - -При выключенных дисках донорах, при перевозе VDisk'а, его данные теряются, и их приходится восстанавливать согласно выбранному erasure. - -Операция восстановления дороже, чем обычный перевоз данных. Также происходит потеря данных, что может повлечь за собой потерю данных при выходе за рамки модели отказа. - -Для предотвращения выше перечисленных проблем, существуют диски доноры. - -При перевозе дисков с включенными дисками донорами, старый VDisk остается жить до тех пор пока новый не перенесет все данные из него к себе. - -Диск донор, это старый VDisk'ов после перевоза, который продолжает хранить свои данные и отвечает только на запросы чтения от нового VDisk'а. - -При получении запроса на чтения на данные, которые новый VDisk еще не успел перенести, он перенаправляет запрос к диску донору. - -Для включения дисков-доноров, требуется выполнить следующую команду: - -`$ kikimr admin bs config invoke --proto 'Command { UpdateSettings { EnableDonorMode: true } }'` - -Аналогично при изменении настройки на `false`, команда выключить режим. +{% list tabs %} + +- Включить SelfHeal + + 1. Чтобы включить обнаружение неисправных элементов, откройте страницу `http://localhost:8765/cms#show=config-items-25`. + 1. Зайдите на любой узел. + 1. Составьте файл обновленной конфигурации с включенным параметром `SentinelConfig { Enable: true }`. + + Пример файла `config.txt`: + + ```text + Actions { + AddConfigItem { + ConfigItem { + Config { + CmsConfig { + SentinelConfig { + Enable: true + } + } + } + } + } + } + ``` + + 1. Выполните команду: + + ```bash + kikimr admin console configs update config.txt + ``` + + 1. Чтобы включить перенос данных, выполните команду: + + ```bash + kikimr -s <endpoint> admin bs config invoke --proto 'Command{EnableSelfHeal{Enable: true}}' + ``` + +- Выключить SelfHeal + + 1. Чтобы выключить обнаружение неисправных элементов, откройте страницу `http://localhost:8765/cms#show=config-items-25`. + 1. Зайдите на любой узел. + 1. Составьте файл обновленной конфигурации с выключенным параметром `SentinelConfig { Enable: false }`. + + Пример файла `config.txt`: + + ```text + Actions { + AddConfigItem { + ConfigItem { + Config { + CmsConfig { + SentinelConfig { + Enable: false + } + } + } + } + } + } + ``` + + 1. Выполните команду: + + ```bash + kikimr admin console configs update config.txt + ``` + + 1. Чтобы выключить перенос данных, выполните команду: + + ```bash + kikimr -s <endpoint> admin bs config invoke --proto 'Command{EnableSelfHeal{Enable: false}}' + ``` + +{% endlist %} + +## Настройки SelfHeal {#settings} + +Вы можете настроить SelfHeal в **Viewer** → **Cluster Management System** → **CmsConfigItems**. + +Чтобы создать настройки впервые, нажмите кнопку **Create**. Если вам нужно изменить существующие настройки, нажмите кнопку ![](../../_assets/pencil.svg). + +Доступны следующие настройки: + +| **Параметр** | **Описание** | +|:---------------------------------------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Status** | Включение и выключение SelfHeal в CMS. | +| **Dry run** | Включение и выключение режима, в котором CMS не изменяет настройку BSC. | +| **Config update interval (sec.)** | Период обновления конфигурации из BSC. | +| **Retry interval (sec.)** | Период повторных попыток обновления конфигурации. | +| **State update interval (sec.)** | Период обновления состояний PDisk'ов. | +| **Timeout (sec.)** | Таймаут обновления состояний PDisk'ов. | +| **Change status retries** | Количество повторных попыток на изменение статуса PDisk в BSC (`ACTIVE`, `FAULTY`, `BROKEN` и др.). | +| **Change status retry interval (sec.)** | Задержка между попытками на изменение статуса PDisk в BSC. CMS наблюдает состояние диска с интервалом **State update interval**. Если диск пребывает в одном состоянии несколько циклов **Status update interval**, то CMS меняет его статус в BSC.<br>Далее идут настройки количества циклов обновления, через которое CMS будет изменять статус диска. Если состояние диска `Normal`, то диск переводится в статус `ACTIVE`, в остальных состояниях диск переводится в статус `FAULTY`.<br>Значение `0` выключает изменение статуса для состояния (так реализовано для `Unknown` по умолчанию).<br>Например, при настройках по умолчанию, если CMS наблюдает состояние диска `Initial` на протяжении 5 циклов `Status update interval` по 60 с каждый, статус диска будет изменен на `FAULTY`. | +| **Default state limit** | Для состояний, для которых нет указана настройка, может использоваться это значение "по умолчанию". Для неизвестных состояний PDisk, для которых нет настройки, тоже используется это значение. Это значение используется если значение не задано для состояний `Initial`, `InitialFormatRead`, `InitialSysLogRead`, `InitialCommonLogRead`, `Normal`. | +| **Initial** | PDisk начинает инициализацию. Переход в `FAULTY`. | +| **InitialFormatRead** | PDisk читает свою запись формата. Переход в `FAULTY`. | +| **InitialFormatReadError** | PDisk получил ошибку при чтении своей записи формата. Переход в `FAULTY`. | +| **InitialSysLogRead** | PDisk читает системный лог. Переход в `FAULTY`. | +| **InitialSysLogReadError** | PDisk получил ошибку при чтении системного лога. Переход в `FAULTY`. | +| **InitialSysLogParseError** | PDisk получил ошибку при парсинге или проверке консистентности системного лога. Переход в `FAULTY`. | +| **InitialCommonLogRead** | PDisk читает общий лог VDisk'ов. Переход в `FAULTY`. | +| **InitialCommonLogReadError** | PDisk получил ошибку при чтении общего лога VDisk'ов. Переход в `FAULTY`. | +| **InitialCommonLogParseError** | PDisk получил ошибку при парсинге или проверке консистентности общего лога. Переход в `FAULTY`. | +| **CommonLoggerInitError** | PDisk получил ошибку при инициализации внутренних структур предназначенных для записи в общий лог. Переход в `FAULTY`. | +| **Normal** | PDisk завершил инициализацию и работает нормально. Переход в `ACTIVE` произойдет через указанное количество циклов (например, если `Normal` держится 5 минут, диск переходит в состояние `ACTIVE`). | +| **OpenFileError** | PDisk получил ошибку при открытии файла диска. Переход в `FAULTY`. | +| **Missing** | Нода отвечает, но в её списке нет данного PDisk. Переход в `FAULTY`. | +| **Timeout** | Нода не ответила за отведенный таймаут. Переход в `FAULTY`. | +| **NodeDisconnected** | Отключение ноды. Переход в `FAULTY`. | +| **Unknown** | Неожиданный ответ, например, ответ `TEvUndelivered` на запрос состояния. Переход в `FAULTY`. | + +## Работа с дисками-донорами {#disks} + +Чтобы предотвратить потерю данных при переносе VDisk'а, включите возможность использования дисков-доноров: + +```bash +kikimr admin bs config invoke --proto 'Command { UpdateSettings { EnableDonorMode: true } }' +``` + +Чтобы выключить диски-доноры, укажите `false` в параметре `EnableDonorMode` той же команды: + +```bash +kikimr admin bs config invoke --proto 'Command { UpdateSettings { EnableDonorMode: false } }' +``` + +Диск-донор — это предыдущий VDisk после переноса данных, который продолжает хранить свои данные и отвечает только на запросы чтения от нового VDisk'а. При переносе с включенными дисками-донорами предыдущие VDisk'и продолжают функционировать до тех пор, пока данные не будут полностью перенесены на новые диски. diff --git a/ydb/docs/ru/core/maintenance/manual/toc_i.yaml b/ydb/docs/ru/core/maintenance/manual/toc_i.yaml index 3b475b14d6..c47a3143d3 100644 --- a/ydb/docs/ru/core/maintenance/manual/toc_i.yaml +++ b/ydb/docs/ru/core/maintenance/manual/toc_i.yaml @@ -11,7 +11,7 @@ items: href: adding_storage_groups.md - name: Безопасные рестарт и выключение узлов href: node_restarting.md -- name: Включение/выключение SelfHeal +- name: Включение и выключение SelfHeal href: selfheal.md - name: Включение/выключение Scrubbing href: scrubbing.md |