Postgres Pro Enterprise 13
Резервное копирование — 2
13
Авторские права
© Postgres Professional, 2023 год.
Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Удаленная работа
Архивирование WAL
Страничное копирование и восстановление
Частичное восстановление
Восстановление страниц
Восстановление на момент времени
3
Удаленная работа
Копируемые экземпляры и каталог копий располагаются
на разных серверах
В удаленных системах запускаются агенты
Агенты читают файлы и передают по протоколу SSH
агент
агент
SSH
pg_probackup
SSH
Утилита pg_probackup обычно используется в удаленном режиме,
основанном на протоколе SSH (Secure Shell). Копируемые экземпляры
могут находиться на разных серверах. Операции копирования,
восстановления и архивирования WAL выполняются удаленно по сети.
На сервере с каталогом копий и на серверах с копируемыми
экземплярами должен быть установлен pg_probackup одной и той же
версии.
В удаленном режиме pg_probackup на сервере с каталогом копий
подключается по SSH к утилите на сервере Postgres, последняя
запускает один или несколько процессов-агентов, которые
взаимодействуют с экземпляром Postgres и обмениваются данными
с основной утилитой. Количество агентов определяется ключом -j.
Для пользователя ОС, выполняющего резервное копирование, нужно
настроить доступ по ssh к целевому серверу с аутентификацией без
пароля (по ключу).
Параметры SSH-соединения команды backup:
--remote-host — адрес целевого сервера Postgres;
--remote-user — владелец экземпляра Postgres;
--remote-port порт на целевом сервере.
5
WAL
Архивация WAL
Архив WAL сохраняется в каталог копий
archive_command = 'pg_probackup archive-push ...'
--remote-host — адрес каталога копий
--remote-user — владелец каталога резервных копий
--remote-port — порт SSH на сервере резервного копирования
SSH
archive_mode = on
Непрерывная (файловая) архивация сегментов WAL применяется чаще
всего, так как она требуется для инкрементального копирования
в режиме PAGE и обеспечивает возможность восстановления на
момент в прошлом — PITR (Point In Time Recovery). При создании
резервной копии pg_probackup по умолчанию предполагает, что на
копируемом экземпляре настроена архивация WAL. Утилита
pg_probackup может использоваться для архивации, для этого
параметр archive_com mand должен содержать команду pg_probackup
archive-push.
При работе через SSH нужно задать параметры удаленного доступа.
Утилиту можно использовать и для архивации при локальной работе,
при этом она будет запускаться от имени владельца кластера данных,
обычно postgres. В таком случае каталог копий также должен
принадлежать postgres (это особенность реализации текущей версии
pg_probackup).
Подробности настройки описаны в документации:
7
WAL
Страничное копирование
Информация об измененных страницах — из архива WAL
В архиве должны быть все сегменты WAL, записанные
после предыдущей копии
FULL
PAGE
pg_probackup backup -b PAGE
PAGE
агент
При наличии архива WAL для создания инкрементальных копий можно
использовать еще один режим инкрементального резервного
копирования pg_probackup — страничное копирование (PAGE).
При копировании PAGE pg_probackup сканирует все записи WAL
в архиве, начиная с момента создания предыдущей полной или
инкрементальной копии, и определяет по ним список изменившихся
страниц. При этом необходимо, чтобы в архиве присутствовали все
файлы WAL, сгенерированные после предыдущей копии.
Режим PAGE особенно эффективен, когда в базах данных происходит
немного изменений. Если же размер журнальных файлов сравним
с общим размером файлов базы данных, ускорение будет
незначительным, хотя размер копии все равно будет меньше.
8
WAL
Восстановление
--remote-host — сервер с копируемым экземпляром
--remote-user — владелец экземпляра (postgres)
--remote-port — порт SSH на сервере с копируемым экземпляром
--archive-host — сервер резервного копирования
--archive-user — владелец каталога резервных копий
FULL
PAGE
pg_probackup restore
PAGE
агент
Для восстановления при удаленной работе утилита pg_probackup
запускается на сервере резервного копирования и взаимодействует
с агентом через SSH.
При удаленном восстановлении команда pg_probackup restore
использует ключи:
--remote-host — сервер с копируемым экземпляром;
--remote-user — владелец экземпляра (postgres);
--remote-port — порт SSH на сервере с копируемым экземпляром;
--archive-host — сервер резервного копирования;
--archive-user — владелец каталога резервных копий.
Обратите внимание, что ключ --remote_port задает порт для SSH-
соединения (по умолчанию 22), а не порт для соединения
с экземпляром Postgres (по умолчанию 5432).
10
Частичное восстановление
Восстановление только требуемых баз данных кластера
--db-include — база данных для восстановления
--db-exclude — база данных, которую не надо восстанавливать
Экспериментальная возможность, требует осторожности
pg_probackup restore
Частичное восстановление применяется в случаях, когда не требуется
восстанавливать все базы данных кластера. Эта возможность
экспериментальная, ее не следует использовать в промышленной
эксплуатации.
Ключом --db-include можно задать имя базы данных для
восстановления. Базы template0 и template1 восстанавливаются всегда.
Можно указать несколько ключей, по одному для каждой
восстанавливаемой базы данных.
Используя ключи --db-exclude, можно попросить утилиту восстановить
все базы, кроме указанных.
При частичном восстановлении потребуется столько же свободного
места на диске, сколько и для полного восстановления.
Роль, от имени которой утилита pg_probackup подключается к кластеру
баз данных, должна иметь право на чтение таблицы
pg_catalog.pg_database.
12
Восстановление страниц
Инкрементальное восстановление страниц — оптимизация
Восстанавливаются только некорректные или измененные
страницы
CHECKSUM — восстановление страниц с некорректными
контрольными суммами
LSN — по точке расхождения каталога с данными от резервной копии
pg_probackup restore -I тип
Инкрементальное восстановление работает при непустом каталоге
данных экземпляра, а восстанавливаются только некорректные или
измененные страницы. Инкрементальное восстановление включается
параметром -I команды pg_probackup restore, после которого указывают
требуемый тип восстановления. Рекомендуется инкрементальное
восстановление CHECKSUM, при котором читаются все файлы
в целевом каталоге, проверяются заголовки и контрольные суммы
страниц. Восстанавливаются только некорректные страницы и те,
в которых контрольная сумма и LSN отличаются от значений в странице
в копии.
При типе восстановления LSN из файла pg_control восстанавливаемого
экземпляра извлекаются значения REDO LSN и REDO TLI,
позволяющие определить точку в истории (точку сдвига), в которой
состояние каталога данных сдвинулось с цепочки резервных копий.
Если эта точка достижима, то читаются все файлы данных в каталоге
данных, проверяются заголовки и контрольные суммы страниц, затем
восстанавливаются только страницы с неверной контрольной суммой
или с LSN, превышающим позицию точки сдвига. При этом требуется,
чтобы контрольные суммы были включены, а также необходима
синхронность файла pg_control с состоянием каталога данных. При
повреждении файла pg_control этот режим использовать нельзя.
Тип NONE отключает инкрементальную оптимизацию.
Возможный сценарий использования: ускоренное восстановление
бывшего ведущего сервера после переключения на реплику.
14
WAL
Восстановление PITR
При наличии архива WAL можно восстановить систему
на момент времени — point-in-time recovery
Требуется архив WAL от момента создания резервной копии
pg_probackup restore
целевая точка
восстановления
Если до выполнения резервного копирования уже был настроен архив
WAL, то с помощью pg_probackup можно выполнить восстановление на
момент времени в прошлом (Point-in-Time Recovery, PITR). Резервные
копии могут как включать журнальные файлы (автономные копии),
так и не включать, однако обязательно требуется наличие архива WAL
как минимум с момента создания резервной копии.
При восстановлении на момент времени не обязательно указывать
идентификатор копии. Утилита pg_probackup автоматически выбирает
резервную копию, ближайшую к заданной целевой точке, и начинает
восстановление.
Указать точку восстановления можно ключами:
--recovery-target-time — на заданное время в формате timestamp;
--recovery-target-xid — до заданной транзакции;
--recovery-target-lsn — до заданного LSN;
--recovery-target-name — до заранее созданной именованной точки;
--recovery-target="latest" — до последнего согласованного состояния;
--recovery-target='immediate' — до самого раннего согласованного
состояния.
16
Итоги
При удаленной работе каталог резервных копий находится
на выделенном сервере
Полное резервирование и три режима инкрементального:
DELTA, PAGE и PTRACK
Резервное копирование и восстановление может
использовать потоковую доставку и файловый архив WAL
17
Практика
1. Подготовьте экземпляр к удаленной работе
с архивированием WAL.
2. Подключите и настройте PTRACK.
3. Сравните время, затрачиваемое на создание полной
и инкрементальных копий в режимах DELTA, PAGE
и PTRACK.
4. Добавьте сжатие и проведите такие же измерения времени
создания копий.
5. Восстановите данные из последней сжатой инкрементальной
копии.
1. Подготовьте и инициализируйте каталог, зарегистрируйте роли и базу
данных так же, как в демонстрации. Не забудьте указать параметры
--remote-host=localhost --remote-user=postgres утилиты pg_probackup,
а также включить режим архивирования WAL в экземпляре СУБД.
2. Настройте параметр СУБД shared_preload_libraries = 'ptrack'
и перезагрузите экземпляр. Задайте размер ptrack.map_size = '1MB',
как в демонстрации. Подключите расширение ptrack.
3. Создайте полную и инкрементальные копии в трех режимах, не
забывая добавлять перед pg_probackup команду time для вывода
затраченного времени. Между командами резервного копирования
регистрируйте любые новые учетные записи и создавайте
принадлежащие этим пользователям базы данных для генерации
данных, которые будут попадать в инкрементальные копии.
Сравните полученные результаты с помощью pg_probackup show.
4. Проделайте такой же эксперимент, добавив --compress-algorithm=zlib.
5. Восстановитесь из последней сжатой резервной копии, не забывая
параметры pg_probackup --remote-user=postgres --remote-host=
localhost --archive-host=localhost --archive-user=student.