SelfHeal подсистем распространения метаданных

SelfHeal подсистем распространения метаданных — механизм автоматического управления конфигурациями реплик State Storage, Board и SchemeBoard.

В конфигурации параметры механизма используют историческое имя state_storage_self_heal_config, которое относится ко всем трём подсистемам.

Важно

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

Механизм обнаруживает неисправности узлов и, если их нельзя быстро восстановить, переносит затронутые реплики на другие узлы. При росте кластера он также может автоматически увеличивать число реплик с учётом конфигурации и доступных узлов.

Механизм запускается Sentinel — компонентом системы управления кластером CMS.

Включение и выключение SelfHeal подсистем распространения метаданных

Вы можете включать и выключать SelfHeal подсистем распространения метаданных с помощью изменения конфигурации:

  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 # Включение SelfHeal подсистем распространения метаданных
    

    Примечание

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

    См. подробнее: Миграция на конфигурацию V2 и включение распределённой конфигурации.

    При значении true у параметра state_storage_self_heal_config.enable включается механизм сохранения работоспособности и отказоустойчивости State Storage, Board, SchemeBoard.

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

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

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

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

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 Разрешает SelfHeal автоматически изменять конфигурацию State Storage. При значении false SelfHeal не изменяет текущую конфигурацию State Storage.
automatic_state_storage_board_management true То же самое для Board: разрешает или запрещает SelfHeal автоматически изменять его конфигурацию.
automatic_scheme_board_management true То же самое для SchemeBoard: разрешает или запрещает SelfHeal автоматически изменять его конфигурацию.
state_storage_self_heal_allowed_nodes [] (без ограничений) Список идентификаторов узлов, на которые SelfHeal может переносить или на которых может добавлять реплики State Storage. Пустой список означает, что ограничений нет и могут быть использованы любые узлы кластера.
state_storage_board_self_heal_allowed_nodes [] (без ограничений) То же самое для реплик Board.
scheme_board_self_heal_allowed_nodes [] (без ограничений) То же самое для реплик SchemeBoard.

Дополнительные параметры SelfHeal подсистем распространения метаданных

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

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 секунд) Минимальный интервал между двумя последовательными срабатываниями SelfHeal подсистем распространения метаданных. Пока не прошло указанное время с момента предыдущего срабатывания, повторное изменение конфигурации не запускается, даже если обнаружены неисправные узлы. Значение задаётся в микросекундах.
pileup_replicas false Разрешает размещать реплики разных подсистем (State Storage, Board, SchemeBoard) на одном и том же наборе узлов. При значении false SelfHeal старается использовать разные узлы для реплик разных подсистем там, где это возможно; при значении 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 в YDB UI кластера (доступен на порту 8765): перейдите на вкладку Sentinel для просмотра статуса Sentinel и SelfHeal подсистем распространения метаданных.