Восстановление мастера после сбоев
В этом разделе описано восстановление кластера Greengage DB (на основе Greenplum) после сбоя основного (primary) мастера.
Основной (активный) мастер в кластере Greengage DB служит единой точкой для клиентских подключений. Его сбой приводит к прерыванию сервиса. Зеркалирование мастера позволяет быстро восстановить работу кластера путем переключения на зеркало мастера — резервный мастер (standby master).
В обычном режиме резервный мастер не обрабатывает запросы и не участвует в выполнении запросов. Он получает и применяет изменения от основного мастера, используя потоковую репликацию (Write-Ahead Log, WAL). При этом он поддерживает синхронизированную копию системного каталога и метаданных. Сбой резервного мастера не влияет на доступность кластера. Основной мастер продолжает функционировать и сохранять изменения, произошедшие за время сбоя. После восстановления резервный мастер синхронизируется с основным в фоновом режиме.
При сбое основного мастера кластер не может обслуживать клиентские запросы, хотя сегменты могут продолжать работать на своих хостах. Чтобы вернуть кластер в рабочее состояние, необходимо активировать резервный мастер. После активации кластер продолжит работу с момента последней успешно зафиксированной транзакции до сбоя.
Активация резервного мастера
При сбое основного мастера кластер становится недоступным. Если не удается запустить вышедший из строя мастер, активируйте резервный мастер, чтобы восстановить работу кластера.
Для активации резервного мастера используйте утилиту gpactivatestandby
:
-
Войдите на хост резервного мастера под пользователем
gpadmin
. -
Выполните
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]:------------------------------------------------------
-
Введите
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
.
Ниже приведены подробные описания этих шагов.
Создание резервного мастера на исходном хосте основного
Чтобы создать резервный мастер на исходном хосте основного (mdw
):
-
На хосте
mdw
переименуйте или переместите существующий каталог данных мастера, чтобы сделать его резервную копию:$ mv /data1/master/gpseg-1 /data1/master/backup_gpseg-1
-
На хосте
smdw
создайте резервный мастер, указав целевым хостомmdw
:$ gpinitstandby -s mdw
В выводе будет строка:
[INFO]:-Successfully created standby master on mdw
-
Проверьте работу резервного мастера, вызвав
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
Активация исходного мастера
Активация резервного мастера в работающем кластере требует остановки кластера.
Чтобы вернуть мастеру на исходном мастер-хосте его роль основного:
-
Остановите кластер, запустив
gpstop
на хостеsmdw
:$ gpstop
-
На хосте
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.
-
Убедитесь, что зеркалирование мастера отключено, с помощью вызова
gpstate
на новом мастер-хостеmdw
:$ gpstate -f
Вывод содержит строку:
[INFO]:-Standby master instance not configured
Создание резервного мастера на исходном хосте
Чтобы полностью вернуть исходную отказоустойчивую топологию, создайте заново резервный мастер на его исходном хосте smdw
:
-
На хосте
smdw
переименуйте или переместите существующий каталог данных мастера, чтобы сделать его резервную копию:$ mv /data1/master/gpseg-1 /data1/master/backup_gpseg-1
-
На хосте
mdw
добавьте резервный мастер, указав целевым хостомsmdw
:$ gpinitstandby -s smdw
Вывод показывает результат операции:
[INFO]:-Successfully created standby master on smdw
-
Проверьте зеркалирование мастера вызовом
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