Работа с SelfHeal

В процессе работы кластеров могут выходить из строя узлы целиком или отдельные блочные устройства, на которых работает YDB.

SelfHeal используется для сохранения работоспособности и отказоустойчивости кластера, если невозможно быстро восстановить вышедшие из строя узлы или устройства.

SelfHeal позволяет:

  • обнаружить неисправные элементы системы;
  • перенести неисправные элементы в щадящем режиме без потери данных и расформирования групп хранения.

По умолчанию SelfHeal включен.

Включение и выключение SelfHeal

  1. Чтобы включить обнаружение неисправных элементов, откройте страницу http://localhost:8765/cms#show=config-items-25.

  2. Зайдите на любой узел.

  3. Составьте файл обновленной конфигурации с включенным параметром SentinelConfig { Enable: true }.

    Пример файла config.txt:

    Actions {
        AddConfigItem {
            ConfigItem {
                Config {
                    CmsConfig {
                        SentinelConfig {
                            Enable: true
                        }
                    }
                }
            }
        }
    }
    
  4. Выполните команду:

    kikimr admin console configs update config.txt
    
  5. Чтобы включить перенос данных, выполните команду:

    kikimr -s <endpoint> admin bs config invoke --proto 'Command{EnableSelfHeal{Enable: true}}'
    
  1. Чтобы выключить обнаружение неисправных элементов, откройте страницу http://localhost:8765/cms#show=config-items-25.

  2. Зайдите на любой узел.

  3. Составьте файл обновленной конфигурации с выключенным параметром SentinelConfig { Enable: false }.

    Пример файла config.txt:

    Actions {
        AddConfigItem {
            ConfigItem {
                Config {
                    CmsConfig {
                        SentinelConfig {
                            Enable: false
                        }
                    }
                }
            }
        }
    }
    
  4. Выполните команду:

    kikimr admin console configs update config.txt
    
  5. Чтобы выключить перенос данных, выполните команду:

    kikimr -s <endpoint> admin bs config invoke --proto 'Command{EnableSelfHeal{Enable: false}}'
    

Настройки SelfHeal

Вы можете настроить SelfHeal в ViewerCluster Management SystemCmsConfigItems.

Чтобы создать настройки впервые, нажмите кнопку Create. Если вам нужно изменить существующие настройки, нажмите кнопку .

Доступны следующие настройки:

Параметр Описание
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.
Далее идут настройки количества циклов обновления, через которое 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'а, включите возможность использования дисков-доноров:

kikimr admin bs config invoke --proto 'Command { UpdateSettings { EnableDonorMode: true } }'

Чтобы выключить диски-доноры, укажите false в параметре EnableDonorMode той же команды:

kikimr admin bs config invoke --proto 'Command { UpdateSettings { EnableDonorMode: false } }'

Диск-донор — это предыдущий VDisk после переноса данных, который продолжает хранить свои данные и отвечает только на запросы чтения от нового VDisk'а. При переносе с включенными дисками-донорами предыдущие VDisk'и продолжают функционировать до тех пор, пока данные не будут полностью перенесены на новые диски.