Описание
Утилита 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 удаляются следующие параметры на каждом хосте:
|
Все хосты 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:
- Файл имеет расширение .toml.
- Путь и название к файлу передаётся в параметрах командной строки утилиты -
project-config. По умолчанию файл находится в одном каталоге с утилитой и имеет названиеproject_config.toml. - Формат установки флага
<имя флага>=<значение>. - Типы значений флагов:
bool,string,int. - Файл
project_config.tomlсоздаётся и редактируется пользователем, который использует утилиту для бэкапрования и восстановления. - Используется во всех основных командах.
- Нет проверки неиcпользуемых флагов.
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 всегда устанавливается значение GPDBprocess-max- количество дочерних процессов, порождаемых командой pgbackrestlog-level-file- уровень логирования при записи в файл для команд pgbackrestlog-level-console- уровень логирования в консоль для команд pgbackrestlog-path- путь для хранения логов pgbackrestarchive-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, который описывает все сегменты, расположенные на данном хосте.
[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 всегда устанавливается значение GPDBlog-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.
[ <имя метки мастер ноды> ]
backup_labels = [ <через запятую, список всех меток бэкапа на всех нодах, по индексу равному 0, стоит метка масте ноды> ]
list_prefixes = [ <список префиксов, имя равняется имени --stanza, индекс list_prefixes должен совпадать по индексу с соответствующей меткой в backup_labels>]
restore_points =[<список точек восстановления>]
wal_logs =[ <список wal-logs, на котором завершился архивный бэкап, индекс wal_logs должен совпадать по индексу с соответствующей меткой в backup_labels> ]
В представленном ниже примере файла 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
[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 для восстановления на бэкап-хосте:
[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- флаг проверки архива WALarchive-copy- флаг копирования архива WALfork = GPDB- для какой системы используется утилита. В данном случае всегда GPDB так как GreenPlumlog-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. Конфигурационный файл описывает каждый сегмент на данном хосте:
[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 так как GreenPlumlog-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. Изменения данного параметра следует выполнять только при работе с пустым репозиторием без существующих резервных копий |
Все флаги можно разделить на следующие группы:
- Флаги, меняющие путь к данным:
repo-pathconfig-path
- Флаги, меняющие сетевые настройки:
userhostport
- Флаги, меняющие таймауты:
archive-timeout
- Остальные флаги - более тонкая настройка утилиты pgbackrest
Структура конфигурационного файла
Файл состоит из следующих блоков:
- Содержит все описанные выше флаги без указания блока
[segments.<номер_сегмента>]- необязательные разделы для отдельных сегментов. Используются в случае, когда для конкретного сегмента требуется репозиторий, отличный от указанного выше. В данных блоках изменяются только флаги:hostrepo-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.
Список флагов, которые есть в конфигурационном файле и в командной строке
Сетевые флаги также могут быть указаны через командную строку. При этом значения, переданные через командную строку, имеют приоритет над настройками в конфигурационном файле.
Описание данных флагов представлено в таблице параметров конфигурационного файла.
hostuserport