Skip to content

Описание

Утилита gpdr предназначена для бэкапирования (резервного копирования) и восстановления кластеров GreenPlum.
Утилита реализована на языке GO и имеет в основе утилиту pgbackrest.

Синтаксис утилиты: greenplum_disaster_recovery [flag] command, где

  • [flag] - необязательные флаги для настройки поведения утилиты, список флагов см. в разделе Список флагов.
  • command - команда для выполнения, список команд см. в разделе Основные команды.

Примеры конфигурационных файлов см.в разделе Описание конфигурационных файлов.

Перед началом работы с утилитой gpdr необходимо выполнить установку и настройку. Подробнее на странице Установка и настройка.

Основные команды

Конфигурирование кластеров и репозитория для бэкапирования

configure-backup - команда конфигурирует кластер и репозиторий хранения архивов для бэкапирования.

Требования:

  • Работающий кластер GreenPlum, который будет резервироваться
  • ТУЗ gpdr и пользователь должны быть созданы в операционной системе и базе данных
  • Настроен беспарольный доступ по SSH на все хосты кластера для указанных учетных записей

Алгоритм работы

N Действие Где выполняется Протокол Пользователь
1 Вызывается команда greenplum_disaster_recovery -project-config=project-config.toml configure-backup Бекап-хост Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Производится подключение к кластеру GreenPlum Мастер-хост PROD кластера GP по порту к БД postgres Низкоуровневый go-драйвера pgx Должен совпадать с владельцем кластера (gpadmin)
3 1. Запускается запрос получения количества праймари сегментов из таблицы gp_segment_configuration
2. Запускается запрос получения списка дата-директорий кластера из таблицы gp_segment_configuration
3. Запускается запрос получения списка портов сегментов кластера из таблицы gp_segment_configuration
4. Запускается запрос получения списка имен хостов кластера из таблицы gp_segment_configuration
Мастер-хост PROD кластера GP по порту к БД postgres Низкоуровневый go-драйвера pgx Должен совпадать с владельцем кластера (gpadmin)
5 Создается Конфигурационный файл для pgbackrest (pgbackrest.conf) для управляющего бекап-хоста и располагается в /pgbackrest.conf с правами 0600.

Путь config_path настраивается в конфигурационном файле
Бекап-хост Локальная запись файла конфигурации pgbackrest.conf ТУЗ gpdr
6 Создаются конфиги для pgbackrest (pgbackrest.conf) и копируются на все ноды кластера в папку /pgbackrest.conf.

Путь config-path настраивается в конфигурационном файле
Хосты PROD кластера SCP Должен совпадать с владельцем кластера (gpadmin)
7 В файл postgresql.conf добавляются следующие параметры на каждом хосте с помощью команды gpconfig, выполняемой на мастер-хосте:
1. archive_mode=on
2. wal_level=archive
3. archive_command='pgbackrest --stanza=" + key + " archive-push %p'
, где key - это имя stanza в pgbackrest.conf, в котором описана нода кластера, они называются stanza
Мастер-хост PROD кластера GP SSH Должен совпадать с владельцем кластера (gpadmin)
8 Устанавливается расширение gp_pitr Мастер-хост PROD кластера GP SSH Должен совпадать с владельцем кластера (gpadmin)
9 Если были изменения gpconfig и был установлен gp_pitr, то кластер перезапустится при флаге -autorestart=false Мастер-хост PROD кластера GP SSH Должен совпадать с владельцем кластера (gpadmin)
10 Выполняются следующие команды pgbackrest для каждой stanza сегмента:
1. pgbackrest create - создание репозитория для каждой ноды кластера
2. pgbackrest check - проверка конфигурационных файлов pgbackrest.conf и postgresql.conf на корректность установки.

Команда выполняет проверки готовности к бэкапированию и восстановлению.
После успешного выполнения команды check можно ожидать, что все остальные команды будут выполнены без ошибок
Хосты PROD кластера SSH ТУЗ gpdr
11 При успешном выполнении всех предыдущих шагов утилита завершает работу Бекап-хост
Хосты PROD кластера
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
12 При возникновении ошибок на любом из предыдущих шагов они фиксируются в логе, и утилита завершает работу с ошибкой. Бекап-хост
Хосты PROD кластера
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr

Конфигурирование кластеров для восстановления

configure-restore - команда конфигурирует кластер для восстановления.

Требования:

  • ТУЗ gpdr должна быть создана в операционной системе и базе данных
  • Настроен беспарольный доступ по SSH на все хосты кластера для учетной записи gpdr
  • Утилита запускается под пользователем, выполнившим вход в операционную систему (предполагается техническая учетная запись gpdr)

Алгоритм работы

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -config=<conf.ini> configure-restore.
• Путь <conf.ini> указывает на конфигурационный файл рестора
• В конфигурационном файле указаны реквизиты стенда для восстановления
• Конфигурационный файл должен быть создан до запуска
Бекап-хост (если один хост)
или
Рестор-хост (если два хоста)
Локальный запуск go-утилиты ТУЗ gpdr
2 Парсинг файла <conf.ini> и проверка заполнения всех обязательных параметров Бекап-хост (если один хост)
или
Рестор-хост (если два хоста)
Локальное чтение файла ТУЗ gpdr
3 Формирование pgbackrest.conf для рестор-хоста и размещение в /etc/pgabckrest/pgbackrest.conf с правами 0600 Бекап-хост (если один хост)
или
Рестор-хост (если два хоста)
Локальная запись файла ТУЗ gpdr
4 Формирование pgbackrest.conf для хостов кластера и копирование в /etc/pgabckrest/pgbackrest.conf с правами 0600 Хосты DR кластера SCP user из conf.ini
5 Успешное завершение работы при отсутствии ошибок Бекап-хост (если один хост)
или
Рестор-хост (если два хоста)
Запись в лог /var/log/pgbackrest/.log
STDOUT
ТУЗ gpdr
6 Фиксация ошибок в лог и завершение работы с ошибкой Бекап-хост (если один хост)
или
Рестор-хост (если два хоста)
Запись в лог /var/log/pgbackrest/.log
STDOUT
ТУЗ gpdr

Бэкапирование кластеров

backup - команда выполняет резервное копирование кластера.

Требования:

  • Включенный и работающий кластер GreenPlum
  • ТУЗ gpdr должна быть создана в операционной системе и базе данных
  • Настроен беспарольный доступ по SSH на все хосты кластера
  • На данный момент учетная запись должна совпадать с владельцем кластера (gpadmin)

Алгоритм работы архивного бекапирования

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -project-config=project_config.toml -type=full backup Бекап-хост Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Производится подключение к кластеру GreenPlum.
Подключение остается активным до завершения бекапирования
Мастер-хост PROD кластера GP по порту к БД postgres Низкоуровневый go-драйвера pgx Должен совпадать с владельцем кластера (gpadmin)
3 Вызывается команда backup утилиты pgbackrest для stanza master-а GP c флагом полного бекапирования full Бекап/удалённый хост Локальный запуск утилиты pgbackrest ТУЗ gpdr
4 Вызывается команда backup утилиты pgbackrest для каждой stanza (блок в pgbackrest.conf) c флагом полного бекапирования full.
Все команды выполняются параллельно в goroutine
Бекап/удалённый хост Локальный запуск утилиты pgbackrest ТУЗ gpdr
5 Каждый процесс из шагов 3 и 4 открывает подключение к хостам кластер и вызывает на них дочерний процесс утилиты gpbackrest Все хосты PROD кластера GP SSH Должен совпадать с владельцем кластера (gpadmin)
6 Каждый процесс из шага 5 производит проверки архивов WAL и чек-сумм дата-файлов, после чего запускает еще N дочерних процессоб бекапирования, где N - значение process-max из pgbackrest.conf бекап-хоста. Все хосты PROD кластера GP Локальный запуск утилиты pgbackrest на каждом хосте Должен совпадать с владельцем кластера (gpadmin)
7 Каждый процесс из шага 6 - параллельные независимые процессы полного архивного бекапирования сегментов в соответсвующие stanza-репозитории Все хосты PROD кластера GP SSH repo1-host-user из конфига pgbackrest.conf на хостах
8 При неуспешном выполнении любой команды для какой-либо stanza утилита прекращает работу и завершается с ошибкой. Бекап-хост
Все хосты PROD кластера GP
Локальная запись в файл-лога /var/log/pgbackrest/.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /var/log/pgbackrest/.log
STDOUT
ТУЗ gpdr
9 При успешном выполнении всех процессов pgbackrest завершает работу и фиксирует итоги в логи Бекап-хост
Все хосты PROD кластера GP
Локальная запись в файл-лога /var/log/pgbackrest/.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /var/log/pgbackrest/.log
STDOUT
ТУЗ gpdr
10 Создется новый restore-point через вызов команд gp_create_restore_point() и gp_switch_wal() Мастер-хост PROD кластера GP по порту к БД postgres SSH Должен совпадать с владельцем кластера (gpadmin)
11 Информация о бекапах, их метки, точки восстановления и связь мастер-метки и меток сегментов сохранятеся во внутренний файл segment.info по пути Бекап-хост Локальная запись в файл /segment.info ТУЗ gpdr
12 При успешном выполнении всех предыдущих шагов утилита завершает работу Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr
13 При возникновении ошибок на любом из предыдущих шагов они фиксируются в логе, и утилита завершается с ошибкой Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr

Алгоритм работы дифференциального бекапирования

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -project-config=project_config.toml -type=diff backup Бекап-хост Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Производится подключение к кластеру GreenPlum. Подключение остается активным до завершения бэкапирования Мастер-хост PROD кластера GP по порту к БД postgres Низкоуровневый go-драйвера pgx Должен совпадать с владельцем кластера (gpadmin)
3 Вызывается команда backup утилиты pgbackrest для stanza master-а GP c флагом дифференциального бэкапирования diff Бекап-хост Локальный запуск утилиты pgbackrest ТУЗ gpdr
4 Вызывается команда backup утилиты pgbackrest для каждой stanza (блок в pgbackrest.conf) c флагом дифференциального бекапирования diff.
Все команды выполняются параллельно в goroutine
Бекап-хост Локальный запуск утилиты pgbackrest ТУЗ gpdr
5 Каждый процесс из шагов 3 и 4 открывает подключение к хостам кластер и вызывает на них дочерний процесс утилиты gpbackrest Все хосты PROD кластера GP SSH Должен совпадать с владельцем кластера (gpadmin)
6 Каждый процесс выполняет проверку архивов WAL, контрольных сумм data-файлов и сверку файлов с полным архивным резервным копированием.
При наличии дифференциальных или инкрементальных резервных копий после полного архивного резервного копирования сверка с ними игнорируется.
После проверок запускается N дочерних процессов резервного копирования, где N соответствует значению параметра process-max из файла pgbackrest.conf хоста резервного копирования
Все хосты PROD кластера GP Локальный запуск утилиты pgbackrest на каждом хосте Должен совпадать с владельцем кластера (gpadmin)
7 Каждый процесс из шага 6 - параллельные независимые процессы бекапирования новых дата-файлов сегментов в соответсвующие stanza-репозитории Все хосты PROD кластера GP SSH repo1-host-user из конфига pgbackrest.conf на хостах
8 При неуспешном выполнении любой команды для какой-либо stanza утилита прекращает работу и завершается с ошибкой Бекап-хост
Все хосты PROD кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
9 При успешном выполнении всех процессов pgbackrest завершает работу и фиксирует итоги в логи Бекап-хост
Все хосты PROD кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
10 Создется новый restore-point через вызов команд gp_create_restore_point() и gp_switch_wal() Мастер-хост PROD кластера GP по порту к БД postgres SSH Должен совпадать с владельцем кластера (gpadmin)
11 Информация о бекапах, их метках, точках восстановления и связи мастер-метки и меток сегментов сохранятеся во внутренний файл segment.info по пути Бекап-хост Локальная запись в файл /segment.info ТУЗ gpdr
12 При успешном выполнении всех предыдущих шагов утилита завершает работу Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr
13 При возникновении ошибок на любом из предыдущих шагов они фиксируются в логе, и утилита завершается с ошибкой Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr

Алгоритм работы инкрементального бекапирования

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -project-config=project_config.toml -type=incr backup Бекап-хост Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Производится подключение к кластеру GreenPlum.
Подключение остается активным до завершения бекапирования
Мастер-хост PROD кластера GP по порту к БД postgres Низкоуровневый go-драйвера pgx Должен совпадать с владельцем кластера (gpadmin)
3 Вызывается команда backup утилиты pgbackrest для stanza master-а GP c флагом инкрементального бекапирования incr Бекап-хост Локальный запуск утилиты pgbackrest ТУЗ gpdr
4 Вызывается команда backup утилиты pgbackrest для каждой stanza (блок в pgbackrest.conf) c флагом инкрементального бекапирования incr.
Все команды выполняются параллельно в goroutine
Бекап-хост Локальный запуск утилиты pgbackrest ТУЗ gpdr
5 Каждый процесс из шагов 3 и 4 открывает подключение к хостам кластер и вызывает на них дочерний процесс утилиты gpbackrest Все хосты PROD кластера GP SSH Должен совпадать с владельцем кластера (gpadmin)
6 Каждый процесс выполняет проверку архивов WAL, контрольных сумм data-файлов и сверку файлов с полным архивным резервным копированием. При наличии дифференциальных или инкрементальных резервных копий после полного архивного резервного копирования сверка с ними игнорируется. После проверок запускается N дочерних процессов резервного копирования, где N соответствует значению параметра process-max из файла pgbackrest.conf хоста резервного копирования Все хосты PROD кластера GP Локальный запуск утилиты pgbackrest на каждом хосте Должен совпадать с владельцем кластера (gpadmin)
7 Каждый процесс из шага 6 - параллельные независимые процессы бекапирования новых дата-файлов сегментов в соответсвующие stanza-репозитории Все хосты PROD кластера GP SSH repo1-host-user из конфига pgbackrest.conf на хостах
8 При неуспешном выполнении любой команды для какой-либо stanza утилита прекращает работу и завершается с ошибкой Бекап-хост
Все хосты PROD кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
9 При успешном выполнении всех процессов pgbackrest завершает работу и фиксирует итоги в логи Бекап-хост
Все хосты PROD кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
10 Создется новый restore-point через вызов команд gp_create_restore_point() и gp_switch_wal() Мастер-хост PROD кластера GP по порту к БД postgres SSH Должен совпадать с владельцем кластера (gpadmin)
11 Информация о бекапах, их метках, точках восстановления и связи мастер-метки и меток сегментов сохранятеся во внутренний файл segment.info по пути Бекап-хост Локальная запись в файл /segment.info ТУЗ gpdr
12 При успешном выполнении всех предыдущих шагов утилита завершает работу Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr
13 При возникновении ошибок на любом из предыдущих шагов они фиксируются в логе, и утилита завершается с ошибкой Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr

Алгоритм выставления нового чек-поинта для наката WAL

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -project-config=project_config.toml add-restore-point Бекап-хост Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Производится подключение к кластеру GreenPlum.
Подключение остается активным до завершения бекапирования
Мастер-хост PROD кластера GP по порту к БД postgres Низкоуровневый go-драйвера pgx Должен совпадать с владельцем кластера (gpadmin)
3 Производится чтение файла /segment.info. Находим последний чек-поинт последнего бекапа, например N Бекап-хост Локальноче чтение файл /segment.info ТУЗ gpdr
4 Создется новый restore-point с номером N+1 через вызов команд gp_create_restore_point(N+1) и gp_switch_wal() Мастер-хост PROD кластера GP по порту к БД postgres SSH Должен совпадать с владельцем кластера (gpadmin)
5 Производится запись в файл /segment.info информации о последнем чек-поинте N+1 Бекап-хост Локальная запись в файл /segment.info ТУЗ gpdr
6 При успешном выполнении всех предыдущих шагов утилита завершает работу Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr
7 При возникновении ошибок на любом из предыдущих шагов они фиксируются в логе, и утилита завершается с ошибкой Бекап-хост Локальная запись в файл-лога /.log
STDOUT
ТУЗ gpdr

Восстановление кластеров

restore - команда выполняет восстановление кластеров. Алгоритм восстановления одинаков для всех режимов.

Требования:

  • Выключенный кластер, на который будет производиться восстановление
  • ТУЗ gpdr и пользователь должны быть созданы в операционной системе и базе данных
  • Настроен беспарольный доступ по SSH на все хосты кластера для указанных учетных записей
  • Пользователь должен совпадать с владельцем кластера (gpadmin)

Алгоритм восстановления из бэкапа

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -config=<conf.ini> -set=<label либо last> -point=<restore_point (при last не указываем)> -project-config=project_config.toml restore Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Считываения файла <conf.ini>. Получаем информацию о DR кластере Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальное чтение файла конфигурации <conf.ini> ТУЗ gpdr
3 Считывание файла segment.info. Производится проверка наличия указанного label и restore point. Если указан last, берется последний лейбл и последний чек-поинт Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальное чтение файла конфигурации /segment.info ТУЗ gpdr
4 На каждом хосте кластера DR GP вызывается команда pgbackrest с опциями restore с указаниями лейбл и последний чек-поинт для каждой stanza сегмента.
Все команды выполняются параллельно в goroutine
Все хосты DR кластера GP SSH pg1-host-user из pgbackrest.conf каждого хоста
5 При неуспешном выполнении любой команды для какой-либо stanza утилита прекращает работу и завершается с ошибкой Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Все хосты DR кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
6 При успешном выполнении всех процессов pgbackrest завершает работу и фиксирует итоги в логи Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Все хосты DR кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr
7 Каждый процесс pgbackrest порождает дочерние процессы в количестве N, где N - значение process-max из pgbackrest.conf управляющего-хоста. Все хосты DR кластера GP Локальный запуск утилиты pgbackrest pg1-host-user из pgbackrest.conf каждого хоста
8 В postgresql.conf удаляются следующие параметры на каждом хосте:
  1. archive_mode
  2. wal_level
  3. archive_command
Все хосты DR кластера GP SSH user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
9 Редактирование файла recovery.conf в дата-каталогах на всех хостах согласно параметру directory в conf.ini
В каждый файл добавляются следующие строки:
standby_mode='off'
recovery_target_action='shutdown'
Все хосты DR кластера GP SSH user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
10 Вызывается команда pg_ctl start -s -D <directory в <conf.ini> для каждого сегмента кластера GP.
В ассинхронном режиме производится накат WAL для каждого сегмента до установленного restore point
Все хосты DR кластера GP SSH user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
11 Утилита не дожидается окончания наката WAL и завершает свою работу Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Все хосты PROD кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr

Алгоритм restore-continuous

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -config=<conf.ini> -point=<restore_point либо last> -project-config=project_config.toml restore-continuous Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Считываение файла <conf.ini>. Получаем информацию о DR кластере Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальное чтение файла конфигурации <conf.ini> ТУЗ gpdr
3 Считываение файла /segment.info. Производится проверка есть ли указыванный restore point. Если указан last, берется последний чек-поинт последнего бекапа Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальное чтение файла конфигурации /segment.info ТУЗ gpdr
4 Считываем файл backup_label на мастер хосте GP DR. Получаем lable. Master хост DR кластера GP SSH
<directory в <conf.ini>/backup_label
user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
5 Вызов pgbackrest info для мастер-хоста GP DR. Получаем последний lable последнего бекапа.
Производится сверка с lable полученного из пункта 4. Если метки не совпадают, то необходимо сначала выполнить восстановление на последний бекап.
Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальный запуск утилиты pgbackrest ТУЗ gpdr
6 Для каждого сегмента при наличии recovery.conf меняем чек-поинт на последний.
Если recovery.conf не существует, то аналогичное действие проделывается с recovery.done, при этом recovery.done переименовывается в recovery.conf
Все хосты DR кластера GP SSH
<directory в <conf.ini>>/recovery.conf или <directory в <conf.ini>>/recovery.done
user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
7 Файл backup_label переименовывается в backup_label.old Все хосты DR кластера GP SSH
<directory в <conf.ini>/backup_label
pg1-host-user из pgbackrest.conf каждого хоста
8 Удаляем все WAL файлы в папках pg_xlog на всех хостах кластера DR GP Все хосты DR кластера GP SSH
<directory в <conf.ini>/pg_xlog
user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
9 Вызывается команда pg_ctl start -s -D <directory в <conf.ini> для каждого сегмента кластера GP.
В ассинхронном режиме производится накат WAL для каждого сегмента до установленного restore point
Все хосты DR кластера GP SSH user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
10 Утилита не дожидается окончания наката WAL и завершает свою работу Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Все хосты DR кластера GP
Локальная запись в файл-лога /.log
Каждый ssh процесс pgbaсkrest пишет свой лог на хостах кластера /.log
STDOUT
ТУЗ gpdr

Активация DR кластеров после восстановления

Вывод кластера из recovery режима

N Действие Где выполняется Протокол Пользователь
1 Запуск утилиты greenplum_disaster_recovery -config=<conf.ini> -project-config=project_config.toml activate Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальный запуск go-утилиты greenplum_disaster_recovery ТУЗ gpdr
2 Считываение файла <conf.ini>. Получаем информацию о DR кластере Бекап-хост - если используется один управляющий хост для бекапа и рестора.
Рестор-хост - если используется два управляющих хоста
Локальное чтение файла конфигурации <conf.ini> ТУЗ gpdr
3 Меняем системную таблицу gp_segment_configuration. Мастер хост DR кластера gpstart -am update address from gp_segment_configuration update hostname from gp_segment_configuration user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)
4 Для каждого сегмента при наличии recovery.conf переименовываем его в recovery.done
Если файл не найден, то приложение выдаст предупреждение, но продолжит работать дальше
Все хосты DR кластера GP SSH
<directory в <conf.ini>>/recovery.conf или <directory в <conf.ini>>/recovery.done
user из <conf.ini> Должен совпадать с владельцем кластера (gpadmin)

Описание конфигурационных файлов

project_config.toml

Файл project_config.toml предназначен для детальной настройки конфигурационного файла pgbackrest.conf, определения путей к внутренним файлам и указания адреса мастер-ноды.

Характеристики файла project_config.toml:

  1. Файл имеет расширение .toml.
  2. Путь и название к файлу передаётся в параметрах командной строки утилиты - project-config. По умолчанию файл находится в одном каталоге с утилитой и имеет название project_config.toml.
  3. Формат установки флага <имя флага>=<значение>.
  4. Типы значений флагов: bool, string, int.
  5. Файл project_config.toml создаётся и редактируется пользователем, который использует утилиту для бэкапрования и восстановления.
  6. Используется во всех основных командах.
  7. Нет проверки неиcпользуемых флагов.

pgbackrest.conf

Пример конфигурационного файла pgbackrest.conf для бэкапирования на резервный или удалённый хост:

pgbackrest.conf
[global]
archive-check = n 
archive-copy = y 
archive-timeout = 60m 
delta = n 
fork = GPDB 
log-level-console = info 
log-level-file = info 
log-path = /usr/local/pgbackrest/log/ 
process-max = 4 
repo1-retention-full = 9999 
start-fast = y 

[gpseg-1]
pg1-host = 10.22.0.26 
pg1-host-user = gpadmin 
pg1-path = /data1/master/gpseg-1 
pg1-port = 5432 
repo1-path = /tmp/pgbackrest/gpseg-1 
repo1-retention-full = 9999 

[gpseg0]
pg1-host = 10.22.0.65 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg0 
pg1-port = 6000 
repo1-path = /tmp/pgbackrest/gpseg0 
repo1-retention-full = 9999 

[gpseg1]
pg1-host = 10.22.0.65 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg1 
pg1-port = 6001 
repo1-path = /tmp/pgbackrest/gpseg1 
repo1-retention-full = 9999 

[gpseg2]
pg1-host = 10.22.0.11 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg2 
pg1-port = 6000 
repo1-path = /tmp/pgbackrest/gpseg2 
repo1-retention-full = 9999 

[gpseg3]
pg1-host = 10.22.0.11 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg3 
pg1-port = 6001 
repo1-path = /tmp/pgbackrest/gpseg3 
repo1-retention-full = 9999
Структура конфигурационного файла pgbackrest.conf для хоста резервного копирования:

  • [global] - глобальные настройки утилиты
  • archive-check - флаг проверки архива WAL.
  • archive-copy - флаг копирования архива WAL.
  • fork - указание системы, для которой используется утилита. Для GreenPlum всегда устанавливается значение GPDB
  • process-max - количество дочерних процессов, порождаемых командой pgbackrest
  • log-level-file - уровень логирования при записи в файл для команд pgbackrest
  • log-level-console - уровень логирования в консоль для команд pgbackrest
  • log-path - путь для хранения логов pgbackrest
  • archive-timeout - время архивации WAL-файлов при резервном копировании
  • delta - определяет необходимость замены файлов при восстановлении
  • [gpseg] - настройки stanza сегмента
  • pg1-host - имя хоста сегмента соответствующего PROD-кластера
  • pg1-host-user - пользователь для подключения к сегменту PROD-кластера (должен быть владельцем кластера)
  • pg1-path - путь к data-каталогу соответствующего сегмента PROD-кластера
  • repo1-path - путь к stanza для создания архивов данного сегмента на хосте резервного копирования
  • repo1-retention-full - максимальное количество полных резервных копий, хранимых в stanza

Для каждого сегмент-хоста генерируется отдельный конфигурационный файл pgbackrest.conf, который описывает все сегменты, расположенные на данном хосте.

pgbackrest.conf
[global]
fork = GPDB 
log-level-file = detail 
repo1-host = drsim-prm-bck.ru-central1.internal 
repo1-host-user = pgbackrest 
[gpseg1]
pg1-path = /data1/primary/gpseg1 
repo1-path = /tmp/pgbackrest/gpseg1 
[gpseg0]
pg1-path = /data1/primary/gpseg0 
repo1-path = /tmp/pgbackrest/gpseg0

Структура конфигурационного файла pgbackrest.conf на сегмент-хостах:

  • [global] - глобальные настройки утилиты
  • fork = GPDB - указание системы, для которой используется утилита. Для GreenPlum всегда устанавливается значение GPDB
  • log-level-file - уровень логирования по умолчанию.
  • repo1-host - имя хоста репозитория резервного копирования
  • repo1-host-user - имя пользователя хоста резервного копирования, который является владельцем stanza репозитория
  • [gpseg] - настройки stanza сегмента
  • pg1-path - путь к data-каталогу соответствующего сегмента PROD-кластера
  • repo1-path - путь к stanza для записи архивов данного сегмента на хосте резервного копирования

Подробное описание параметров см. в официальной документации pgbackrest: http://pgbackrest.org/configuration.html

segment.info

Файл segment.info является внутренним файлом утилиты, содержащим информацию о всех метках резервных копий на всех нодах, точках восстановления и названиях wal-logs, на которых завершилось резервное копирование.

Файл автоматически создается и редактируется утилитой.
Добавление данных происходит при каждом резервном копировании кластера или создании новой точки восстановления.
Удаление данных выполняется при удалении конкретной резервной копии или всех резервных копий.

Ручное редактирование файла segment.info может привести к нарушению процесса восстановления.

Формат файла segment.info.

segment.info
[ <имя метки мастер ноды> ] 
backup_labels = [ <через запятую, список всех меток бэкапа на всех нодах, по индексу равному 0, стоит метка масте ноды> ] 
list_prefixes = [ <список префиксов,  имя равняется имени --stanza, индекс list_prefixes должен совпадать по индексу с соответствующей меткой в backup_labels>] 
restore_points =[<список точек восстановления>] 
wal_logs =[ <список wal-logs, на котором завершился архивный бэкап, индекс wal_logs должен совпадать по индексу с соответствующей меткой в backup_labels> ]

В представленном ниже примере файла segment.info описаны два бэкапирования (полный и инкрементальный).

segment.info
[20240809-150520F]
backup_labels = ["20240809-150520F", "20240809-150528F", "20240809-150528F", "20240809-150528F", "20240809-150528F", "20240809-150527F", "20240809-150527F", "20240809-150528F", "20240809-150528F", "20240809-150527F"] 
list_prefixes = ["gpseg-1", "gpseg1", "gpseg2", "gpseg3", "gpseg4", "gpseg6", "gpseg8", "gpseg0", "gpseg5", "gpseg7"] 
restore_points = ["RP1032905", "RP1032906"] 
wal_logs = ["000000010000000000000003", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004", "000000010000000000000004"]
[20240809-150520F_20240809-151657I] 
backup_labels = ["20240809-150520F_20240809-151657I", "20240809-150528F_20240809-151703I", "20240809-150528F_20240809-151703I", "20240809-150527F_20240809-151703I", "20240809-150527F_20240809-151703I", "20240809-150527F_20240809-151703I", "20240809-150528F_20240809-151703I", "20240809-150528F_20240809-151703I", "20240809-150528F_20240809-151703I", "20240809-150528F_20240809-151703I"] 
list_prefixes = ["gpseg-1", "gpseg1", "gpseg4", "gpseg6", "gpseg7", "gpseg8", "gpseg0", "gpseg2", "gpseg3", "gpseg5"] 
restore_points = ["RP1028851"] 
wal_logs = ["000000010000000000000007", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008", "000000010000000000000008"]

conf.ini

Пример конфигурационного файла conf.ini

conf.ini
[gpseg-1]
user="gpadmin" 
hostname="drsim-stb-mstr" 
directory="/data1/master/gpseg-1" 
[gpseg0]
user="gpadmin" 
hostname="drsim-stb-seg1" 
directory="/data1/primary/gpseg0" 
[gpseg1] 
user="gpadmin" 
hostname="drsim-stb-seg1" 
directory="/data1/primary/gpseg1" 
[gpseg2]
user="gpadmin" 
hostname="drsim-stb-seg2" 
directory="/data1/primary/gpseg2" 
[gpseg3]
user="gpadmin" 
hostname="drsim-stb-seg2" 
directory="/data1/primary/gpseg3"

Структура конфигурационного файла conf.ini:

  • [seg_name] - название stanza сегмента
  • user - пользователь под который производится подключение к сегменту DR кластера. Должен быть владельцем кластера
  • hostname - имя сегмент-хоста соответствующего хоста DR-кластера
  • directory - путь до data-каталога соответствующего сегмента DR-кластера

pgbackrest.conf

Пример конфигурационного файла pgbackrest.conf для восстановления на бэкап-хосте:

pgbackrest.conf
[global]
archive-check = n 
archive-copy = y 
fork = GPDB 
log-level-file = detail 
process-max = 4 

[gpseg-1]
pg1-host = drsim-stb-mstr 
pg1-host-user = gpadmin 
pg1-path = /data1/master/gpseg-1 
repo1-path = /tmp/pgbackrest/gpseg-1 
repo1-retention-full = 9999

[gpseg0]
pg1-host = drsim-stb-seg1 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg0 
repo1-path = /tmp/pgbackrest/gpseg0 
repo1-retention-full = 9999 

[gpseg1]
pg1-host = drsim-stb-seg1 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg1 
repo1-path = /tmp/pgbackrest/gpseg1 
repo1-retention-full = 9999 

[gpseg2]
pg1-host = drsim-stb-seg2 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg2 
repo1-path = /tmp/pgbackrest/gpseg2 
repo1-retention-full = 9999 

[gpseg3]
pg1-host = drsim-stb-seg2 
pg1-host-user = gpadmin 
pg1-path = /data1/primary/gpseg3 
repo1-path = /tmp/pgbackrest/gpseg3 
repo1-retention-full = 9999

Структура конфигурационного файла pgbackrest.conf для бекап-хоста:

  • [global] - глобальные настройки утилиты
  • archive-check - флаг проверки архива WAL
  • archive-copy - флаг копирования архива WAL
  • fork = GPDB - для какой системы используется утилита. В данном случае всегда GPDB так как GreenPlum
  • log-level-file - уровень логирования по умолчанию
  • process-max - сколько дочерних процессов порождает команда pgbackrest
  • [gpseg] - название stanza сегмента
  • pg1-host - имя сегмент-хоста соответствующего хоста DR-кластера
  • pg1-host-user - пользователь под который производится подключение к сегменту DR кластера. Должен быть владельцем кластера
  • pg1-path - путь до data-каталога соответствующего сегмента DR-кластера
  • repo1-path - путь до stanza, где хранятся архивы данного сегмента на хосте резервного копирования
  • repo1-retention-full - максимальное число полных резервных копий

Подробное описание параметров см. в официальной документации pgbackrest: http://pgbackrest.org/configuration.html

Для каждого сегмент-хоста генерируется следующий конфигурационный файл pgbackrest. Конфигурационный файл описывает каждый сегмент на данном хосте:

pgbackrest.conf
[global]
fork = GPDB 
log-level-file = detail 
repo1-host = drsim-prm-bck.ru-central1.internal 
repo1-host-user = pgbackrest 
[gpseg-1]
pg1-path = /data1/master/gpseg-1 
repo1-path = /tmp/pgbackrest/gpseg-1

Структура конфигурационного файла pgbackrest.conf для сегмент-хостов:

  • [global] - глобальные настройки утилиты
  • fork = GPDB - для какой системы используется утилита. В данном случае всегда GPDB так как GreenPlum
  • log-level-file - уровень логирования по умолчанию
  • repo1-host - имя хоста репозитория резервного копирования
  • repo1-host-user - имя пользователя хоста резервного копирования, который является владельцем stanza репозитория
  • [gpseg] - название stanza сегмента
  • pg1-path - путь к data-каталогу соответствующего сегмента DR-кластера
  • repo1-path - путь к stanza, где хранятся архивы данного сегмента на хосте резервного копирования

Аналогичные файлы конфигурации формируются для остальных сегмент-хостов.

В таблице представлены используемые параметры конфигурационного файла pgbackrest.conf и соответствующие ключи с указанием возможности настройки и значений по умолчанию.

N Имя параметра Конфигурируемый Значения
1 fork Нет GPDB
2 log-level-file Да • по умолчанию: info
• все значения: off, error, warn, info, detail, debug, trace
3 repo1-host Да Имя хоста
4 repo1-host-user Да Имя пользователя. Например, pgbackrest.
5 [gpseg] Нет Автоматически
6 pg1-path Автоматически Путь к каталогу б.д.
7 repo1-path Автоматически Путь к репозиторию
8 archive-check Нет Постоянное значение: n
9 archive-copy Нет Постоянное значение: y
10 process-max Да По умолчанию - 4
11 pg1-host • для мастера: да
• для сегментов: автоматически
Имя хоста
12 pg1-host-user • для мастера: да
• для сегментов: автоматически
Имя пользователя, например, gpadmin
13 repo1-retention-full Нет 9999
14 config Нет /etc/pgbackrest/pgbackrest.conf
15 config-include-path Нет /etc/pgbackrest/conf.d
16 config-path Нет /etc/pgbackrest/
17 archive-timeout Да По умолчанию - 30s
18 exclude Нет n
19 compress-type Нет none
20 compress Нет n
21 compress-level Нет *
22 delta Нет • для backup - n
• для restore - y
23 log-path Нет /var/log/pgbackrest/
24 log-subprocess Нет n
25 repo1-type Нет posix
26 db-include Нет *
27 pg-host-config Нет /etc/pgbackrest/pgbackrest.conf
28 pg-host-config-include-path Нет /etc/pgbackrest/conf.d
29 pg-host-type Нет ssh
30 pg-socket-path Нет *

Список флагов

Полный список флагов предоставлен в таблице с указанием их соответствия в pgbackrest.
Подробное описание параметров см. в официальной документации pgbackrest: http://pgbackrest.org/configuration.html

Флаг в repo_nodes.toml Соответствие в pgbackrest Значение по умолчанию в repo_nodes.toml Примечание
user pg1-host-user * Имя пользователя мастер хоста, необходимый для подключения к кластеру
host pg1-host * Имя хоста мастер хоста, необходимый для подключения к кластеру
port pg1-port * Имя пользователя мастер хоста, необходимый для подключения к кластеру
host repo1-host * Флаг описан в оффициальной документации pgbackrest
repo-path repo1-path "/tmp/pgbackrest" Флаг описан в оффициальной документации pgbackrest
config-path config-path "/etc/pgbackrest/" Флаг описан в оффициальной документации pgbackrest
archive-timeout archive-timeout "60m" Флаг описан в оффициальной документации pgbackrest
repo-retention-full repo1-retention-full 9999 Флаг описан в оффициальной документации pgbackrest
process-max process-max 4 Флаг описан в оффициальной документации pgbackrest
log-level log-level-file;
log-level-console
info Флаг описан в оффициальной документации pgbackrest
delta delta y Флаг описан в оффициальной документации pgbackrest
prefix * gpseg Префикс сегмента в репозитории. Также определяет имя stanza блока в файле pgbackrest.conf.
Изменения данного параметра следует выполнять только при работе с пустым репозиторием без существующих резервных копий

Все флаги можно разделить на следующие группы:

  1. Флаги, меняющие путь к данным:
    • repo-path
    • config-path
  2. Флаги, меняющие сетевые настройки:
    • user
    • host
    • port
  3. Флаги, меняющие таймауты:
    • archive-timeout
  4. Остальные флаги - более тонкая настройка утилиты pgbackrest

Структура конфигурационного файла

Файл состоит из следующих блоков:

  1. Содержит все описанные выше флаги без указания блока
  2. [segments.<номер_сегмента>]- необязательные разделы для отдельных сегментов. Используются в случае, когда для конкретного сегмента требуется репозиторий, отличный от указанного выше. В данных блоках изменяются только флаги:
    • host
    • repo-path

Пример конфигурационного файла


process_max=3
user="gpadmin"
port=5432
host="drsim-stb-mstr"
repo_path="/tmp/repo/"
config_path="/tmp/pgbackrest/"
log_level="info"
backup_sleep=0
restore_config="conf.ini"
[segments.1]
host="drsim-stb-seg1"
repo_path="/tmp/repo/"
[segments.3]
host="drsim-stb-seg1"
repo_path="/tmp/repo/"
[segments.2]
host="drsim-stb-seg1"
repo_path="/tmp/repo/"

Список флагов командной строки

Некоторые флаги настраиваются через командную строку, а не через конфигурационный файл. Это связано с тем, что данные флаги часто изменяются. Все флаги начинаются с одинарным тире ("-").

  • project-config - флаг, определяющий расположение конфигурационного файла repo_nodes. Значение по умолчанию - project_config.toml

  • config - флаг, определяющий расположение конфигурационного файла для команд восстановления (configure-restore, restore, restore-continuous, activate). Значение по умолчанию - conf.ini

  • type - тип резервного копирования. Используется для команды backup. Значение по умолчанию - full. Возможные значения: full, inc, diff.

  • set - имя метки резервной копии для команды restore. Имя можно получить с помощью команды info.

  • point - имя точки восстановления для команд restore и restore-continuous.

Список флагов, которые есть в конфигурационном файле и в командной строке

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

  • host
  • user
  • port