GitHub

Восстановление мастера после сбоев

Павел Семёнов

В этом разделе описано восстановление кластера Greengage DB (на основе Greenplum) после сбоя основного (primary) мастера.

Основной (активный) мастер в кластере Greengage DB служит единой точкой для клиентских подключений. Его сбой приводит к прерыванию сервиса. Зеркалирование мастера позволяет быстро восстановить работу кластера путем переключения на зеркало мастера — резервный мастер (standby master).

В обычном режиме резервный мастер не обрабатывает запросы и не участвует в выполнении запросов. Он получает и применяет изменения от основного мастера, используя потоковую репликацию (Write-Ahead Log, WAL). При этом он поддерживает синхронизированную копию системного каталога и метаданных. Сбой резервного мастера не влияет на доступность кластера. Основной мастер продолжает функционировать и сохранять изменения, произошедшие за время сбоя. После восстановления резервный мастер синхронизируется с основным в фоновом режиме.

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

Активация резервного мастера

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

Для активации резервного мастера используйте утилиту gpactivatestandby:

  1. Войдите на хост резервного мастера под пользователем gpadmin.

  2. Выполните gpactivatestandby, передав путь к каталогу данных резервного мастера в опции -d:

    $ gpactivatestandby -d /data1/master/gpseg-1
    ПРИМЕЧАНИЕ

    Для работы gpactivatestandby необходимо установить переменную окружения PGPORT.

    $ export PGPORT=5432

    Greengage DB подготавливает процедуру активации и выводит информацию о резервном мастере:

    [INFO]:------------------------------------------------------
    [INFO]:-Standby data directory    = /data1/master/gpseg-1
    [INFO]:-Standby port              = 5432
    [INFO]:-Standby running           = yes
    [INFO]:-Force standby activation  = no
    [INFO]:------------------------------------------------------
  3. Введите y и нажмите Enter, чтобы подтвердить активацию:

    Do you want to continue with standby master activation? Yy|Nn (default=N):
    ПРИМЕЧАНИЕ

    Для активации без подтверждения используйте параметр -a:

    $ gpactivatestandby -d /data1/master/gpseg-1 -a

    После успешной активации будут выведены следующие строки:

    [INFO]:-The activation of the standby master has completed successfully.
    [INFO]:-smdw is now the new primary master.

Кластер снова работает, его активный мастер — это бывший резервный. Для продолжения работы с кластером клиентские подключения нужно перенастроить на новый мастер. Внутренние механизмы Greengage DB автоматически перенастраиваются для взаимодействия с новым активным мастером.

Теперь в кластере есть только активный мастер, без резервного:

$ gpstate -f

Вывод показывает отсутствие резервного мастера:

[INFO]:-Standby master instance not configured

Чтобы восстановить отказоустойчивость кластера, выберите один из способов:

  • Настройте новый резервный мастер, как описано в разделе Настройка зеркалирования в кластере.

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

ВНИМАНИЕ

Не перезапускайте исходный мастер после активации резервного. Это может привести к потере данных и несогласованности кластера.

Восстановление исходной конфигурации мастеров

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

Имена хостов

В этом разделе для краткости используются имена хостов из статьи Инициализация СУБД:

  • mdw — исходный основной мастер-хост.

  • smdw — исходный резервный мастер-хост (текущий основной).

Все вызовы утилит выполняются под пользователем gpadmin.

Чтобы восстановить работу основного и резервного мастеров на своих исходных хостах:

  1. Инициализируйте резервный мастер на исходном хосте основного мастера mdw.

  2. Активируйте его, чтобы снова сделать основным.

  3. Повторно создайте резервный мастер на его исходном хосте smdw.

Ниже приведены подробные описания этих шагов.

Создание резервного мастера на исходном хосте основного

Чтобы создать резервный мастер на исходном хосте основного (mdw):

  1. На хосте mdw переименуйте или переместите существующий каталог данных мастера, чтобы сделать его резервную копию:

    $ mv /data1/master/gpseg-1 /data1/master/backup_gpseg-1
  2. На хосте smdw создайте резервный мастер, указав целевым хостом mdw:

    $ gpinitstandby -s mdw

    В выводе будет строка:

    [INFO]:-Successfully created standby master on mdw
  3. Проверьте работу резервного мастера, вызвав gpstate -f на smdw:

    $ gpstate -f

    Вывод покажет информацию о резервном мастере и его состоянии:

    [INFO]:-Standby master details
    [INFO]:-----------------------
    [INFO]:-   Standby address          = mdw
    [INFO]:-   Standby data directory   = /data1/master/gpseg-1
    [INFO]:-   Standby port             = 5432
    [INFO]:-   Standby PID              = 2063
    [INFO]:-   Standby status           = Standby host passive
    [INFO]:--------------------------------------------------------------
    [INFO]:--pg_stat_replication
    [INFO]:--------------------------------------------------------------
    [INFO]:--WAL Sender State: streaming
    [INFO]:--Sync state: sync

Активация исходного мастера

ВАЖНО

Активация резервного мастера в работающем кластере требует остановки кластера.

Чтобы вернуть мастеру на исходном мастер-хосте его роль основного:

  1. Остановите кластер, запустив gpstop на хосте smdw:

    $ gpstop
  2. На хосте mdw выполните активацию резервного мастера с опцией -f:

    $ gpactivatestandby -d $MASTER_DATA_DIRECTORY -f
    ВАЖНО

    Опция -f принудительно активирует резервный мастер, если он не запущен. Используйте эту опцию только в случаях, когда вы уверены в согласованности его состояния с активным мастером.

    Вывод показывает, что основной мастер теперь работает на исходном мастер-хосте:

    [INFO]:-The activation of the standby master has completed successfully.
    [INFO]:-mdw is now the new primary master.
  3. Убедитесь, что зеркалирование мастера отключено, с помощью вызова gpstate на новом мастер-хосте mdw:

    $ gpstate -f

    Вывод содержит строку:

    [INFO]:-Standby master instance not configured

Создание резервного мастера на исходном хосте

Чтобы полностью вернуть исходную отказоустойчивую топологию, создайте заново резервный мастер на его исходном хосте smdw:

  1. На хосте smdw переименуйте или переместите существующий каталог данных мастера, чтобы сделать его резервную копию:

    $ mv /data1/master/gpseg-1 /data1/master/backup_gpseg-1
  2. На хосте mdw добавьте резервный мастер, указав целевым хостом smdw:

    $ gpinitstandby -s smdw

    Вывод показывает результат операции:

    [INFO]:-Successfully created standby master on smdw
  3. Проверьте зеркалирование мастера вызовом gpstate на хосте mdw:

    $ gpstate -f

    Основной и резервный мастер работают на своих хостах и синхронизированы:

    [INFO]:-Standby master details
    [INFO]:-----------------------
    [INFO]:-   Standby address          = smdw
    [INFO]:-   Standby data directory   = /data1/master/gpseg-1
    [INFO]:-   Standby port             = 5432
    [INFO]:-   Standby PID              = 1462
    [INFO]:-   Standby status           = Standby host passive
    [INFO]:--------------------------------------------------------------
    [INFO]:--pg_stat_replication
    [INFO]:--------------------------------------------------------------
    [INFO]:--WAL Sender State: streaming
    [INFO]:--Sync state: sync