Self Heal State Storage

Важно

Инструкция относится только к кластерам YDB с конфигурацией V2 и распределённой конфигурацией. На кластерах с конфигурацией V1 эти шаги и команды (в том числе получение конфигурации через ydb admin cluster config fetch) недоступны или не дадут ожидаемого результата. Альтернатив для V1 здесь не приводится — см. Миграция на конфигурацию V2.

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

Self Heal State Storage обеспечивает сохранение работоспособности подсистем распространения метаданных, Board, SchemeBoard кластера, если невозможно быстро восстановить вышедшие из строя узлы, и автоматически увеличивать количество реплик этих подсистем при добавлении новых узлов в кластер.

Self Heal State Storage обеспечивает:

  • обнаружение неисправных узлов кластера YDB;
  • перенос реплик StateStorage, Board, SchemeBoard на другие узлы или добавление новых реплик.

Компонент Self Heal State Storage, является частью системы управления кластером CMS Sentinel.

Включение и выключение Self Heal State Storage

Вы можете включать и выключать Self Heal State Storage с помощью изменения конфигурации.
Для работы механизма требуется активация как CMS Sentinel, так и распределённой конфигурации.

  1. Получить текущую конфигурацию кластера с помощью команды ydb admin cluster config fetch:

    ydb [global options...] admin cluster config fetch > config.yaml
    
  2. Изменить конфигурационный файл config.yaml, поменяв значение параметра state_storage_self_heal_config.enable на true или на false:

    config:
        self_management_config:
            enabled: true # Включение распределённой конфигурации
        cms_config:
            sentinel_config:
                enable: true # Включение Sentinel
                state_storage_self_heal_config:
                    enable: true # Включение self heal state storage
    

    Для работы механизма требуется активация как CMS Sentinel, так и распределённой конфигурации. Убедитесь, что они включены.
    Подробнее о миграции на конфигурацию V2 и включении распределённой конфигурации.
    При значении true у параметра state_storage_self_heal_config.enable включается механизм сохранения работоспособности и отказоустойчивости StateStorage, Board, SchemeBoard.

  3. Обновить конфигурацию кластера с учетом выполненных изменений с помощью ydb admin cluster config replace:

    ydb [global options...] admin cluster config replace -f config.yaml
    

Управление автоматическим изменением конфигурации

Помимо общего включения/выключения Self Heal State Storage (параметр state_storage_self_heal_config.enable, см. выше), в секции self_management_config конфигурационного файла config.yaml можно по отдельности управлять автоматическим изменением конфигурации каждой из подсистем распространения метаданных, а также ограничивать множество узлов, на которые Self Heal может переносить реплики.

config:
    self_management_config:
        enabled: true
        automatic_state_storage_management: true
        automatic_state_storage_board_management: true
        automatic_scheme_board_management: true
        state_storage_self_heal_allowed_nodes: [1, 2, 3, 4, 5, 6, 7, 8]
        state_storage_board_self_heal_allowed_nodes: [1, 2, 3, 4, 5, 6, 7, 8]
        scheme_board_self_heal_allowed_nodes: [1, 2, 3, 4, 5, 6, 7, 8]
Параметр Значение по умолчанию Описание
automatic_state_storage_management true Разрешает Self Heal автоматически изменять конфигурацию State Storage. При значении false Self Heal не изменяет текущую конфигурацию State Storage.
automatic_state_storage_board_management true То же самое для Board: разрешает или запрещает Self Heal автоматически изменять его конфигурацию.
automatic_scheme_board_management true То же самое для SchemeBoard: разрешает или запрещает Self Heal автоматически изменять его конфигурацию.
state_storage_self_heal_allowed_nodes [] (без ограничений) Список идентификаторов узлов, на которые Self Heal может переносить или на которых может добавлять реплики State Storage. Пустой список означает, что ограничений нет и могут быть использованы любые узлы кластера.
state_storage_board_self_heal_allowed_nodes [] (без ограничений) То же самое для реплик Board.
scheme_board_self_heal_allowed_nodes [] (без ограничений) То же самое для реплик SchemeBoard.

Дополнительные параметры Self Heal State Storage

В секции cms_config.sentinel_config.state_storage_self_heal_config конфигурационного файла config.yaml можно настроить дополнительные параметры работы механизма Self Heal State Storage, влияющие на то, как быстро реагирует механизм на изменения и сколько реплик подсистем распространения метаданных создаётся. В примере ниже все параметры показаны со значениями по умолчанию:

config:
    cms_config:
        sentinel_config:
            enable: true
            state_storage_self_heal_config:
                enable: true
                wait_for_config_step: 60000000
                relax_time: 600000000
                pileup_replicas: false
                override_replicas_in_ring_count: 0
                override_rings_count: 0
                replicas_specific_volume: 200
Параметр Значение по умолчанию Описание
wait_for_config_step 60000000 (микросекунды, 60 секунд) Время ожидания между промежуточными шагами применения новой конфигурации подсистем распространения метаданных (добавление/удаление групп колец, снятие флага WriteOnly, см. Конфигурирование State Storage). Значение задаётся в микросекундах.
relax_time 600000000 (микросекунды, 600 секунд) Минимальный интервал между двумя последовательными срабатываниями Self Heal State Storage. Пока не прошло указанное время с момента предыдущего срабатывания, повторное изменение конфигурации не запускается, даже если обнаружены неисправные узлы. Значение задаётся в микросекундах.
pileup_replicas false Разрешает размещать реплики разных подсистем (State Storage, Board, SchemeBoard) на одном и том же наборе узлов. При значении false Self Heal старается использовать разные узлы для реплик разных подсистем там, где это возможно; при значении true узлы, уже занятые под одну подсистему, могут повторно использоваться для остальных.
override_replicas_in_ring_count 0 (рассчитывается автоматически) Принудительно задаёт количество реплик в одном кольце. Если значение 0, количество реплик в кольце вычисляется автоматически на основе replicas_specific_volume и числа доступных узлов.
override_rings_count 0 (рассчитывается автоматически) Принудительно задаёт количество колец в конфигурации. Если значение 0, количество колец вычисляется автоматически на основе числа доступных узлов и топологии кластера.
replicas_specific_volume 200 Определяет, сколько узлов кластера должно приходиться на одну дополнительную реплику в кольце: одна дополнительная реплика добавляется на каждые replicas_specific_volume узлов в кластере. Используется при автоматическом расчёте количества реплик, если override_replicas_in_ring_count не задан (равен 0).

Проверка результата

Проверить, что изменения применились, можно в разделе CMS в Embedded UI кластера (доступен на порту 8765): перейдите на вкладку Sentinel для просмотра статуса Sentinel и Self Heal State Storage.

Предыдущая
Следующая