Руководство пользователя (RHEL)
Введение
Это руководство следует читать последовательно от начала до конца: каждый раздел опирается на предыдущий. Например, раздел Восстановление предполагает настройку, выполненную в разделе Быстрый старт . После установки и запуска pgBackRest можно переходить между разделами, но при первом знакомстве рекомендуется пройти руководство по порядку.
Хотя примеры в этом руководстве рассчитаны на RHEL и PostgreSQL 14, их должно быть довольно легко адаптировать к любому дистрибутиву Unix и любой версии PostgreSQL. От ОС зависят только команды создания, запуска, остановки и удаления кластеров PostgreSQL. Команды pgBackRest одинаковы во всех системах Unix, хотя расположение исполняемого файла может различаться. pgBackRest стремится работать одинаково с разными версиями PostgreSQL, однако между ними есть небольшие различия, которые могут проявляться в отдельных примерах этого руководства, например в путях, именах файлов и настройках PostgreSQL.
Сведения о настройке и документация PostgreSQL доступны в руководстве PostgreSQL .
При подготовке этого руководства используется несколько необычный подход. При сборке документации из исходных XML-файлов каждая команда выполняется на виртуальной машине. Это позволяет с высокой уверенностью утверждать, что команды корректно работают в указанном порядке. При необходимости вывод сохраняется и показывается под командой. Если вывод отсутствует, он был сочтён несущественным или отвлекающим от изложения.
Все команды рассчитаны на выполнение непривилегированным пользователем с правами sudo для пользователей root и postgres. Команды также можно без изменений выполнять непосредственно от имени соответствующих пользователей; в этом случае префиксы sudo можно убрать.
Основные понятия
Ниже приведены определения понятий в контексте pgBackRest, PostgreSQL и этого руководства.
Резервная копия
Резервная копия — это согласованная копия кластера баз данных, которую можно восстановить после аппаратного сбоя, для возврата к определённому моменту времени или для запуска нового резервного сервера.
Полная резервная копия: pgBackRest копирует в резервную копию всё содержимое кластера баз данных. Первая резервная копия кластера всегда является полной. pgBackRest всегда может восстановить полную резервную копию непосредственно. Её согласованность не зависит от файлов за пределами самой полной резервной копии.
Дифференциальная резервная копия: pgBackRest копирует только те файлы кластера баз данных, которые изменились с момента последней полной резервной копии. При восстановлении дифференциальной резервной копии pgBackRest копирует все файлы выбранной дифференциальной копии и соответствующие неизменившиеся файлы предыдущей полной копии. Преимущество дифференциальной копии в том, что она занимает меньше места, чем полная, однако для её восстановления должны быть исправны как дифференциальная, так и полная резервная копия.
Инкрементная резервная копия: pgBackRest копирует только те файлы кластера баз данных, которые изменились с момента последней резервной копии (другой инкрементной, дифференциальной или полной). Поскольку инкрементная копия включает лишь файлы, изменившиеся после предыдущей копии, она обычно значительно меньше полной или дифференциальной. Как и в случае дифференциальной копии, восстановление инкрементной копии зависит от исправности других резервных копий. Поскольку инкрементная копия содержит только файлы, изменившиеся после последней копии, для её восстановления должны быть исправны все предшествующие инкрементные копии вплоть до предыдущей дифференциальной, сама эта дифференциальная копия и предшествующая полная копия. Если дифференциальной копии нет, должны быть исправны все предшествующие инкрементные копии вплоть до предыдущей полной копии, наличие которой обязательно, а также сама полная копия.
Восстановление
Восстановление — это копирование резервной копии в систему, где она будет запущена как рабочий кластер баз данных. Для корректного восстановления нужны файлы резервной копии и один или несколько сегментов WAL.
Журнал предзаписи (WAL)
WAL — механизм, с помощью которого PostgreSQL гарантирует сохранность зафиксированных изменений. Транзакции последовательно записываются в WAL; транзакция считается зафиксированной после того, как эти записи сброшены на диск. Затем фоновый процесс записывает изменения в основные файлы кластера баз данных (также называемые кучей). После аварийного завершения WAL воспроизводится, чтобы привести базу данных в согласованное состояние.
Концептуально WAL бесконечен, но на практике он разбит на отдельные файлы размером 16MB, называемые сегментами. Имена сегментов WAL имеют вид 0000000100000A1E000000FE: первые 8 шестнадцатеричных цифр обозначают временную шкалу, а следующие 16 — логический порядковый номер (LSN).
Шифрование
Шифрование — это преобразование данных в формат, который невозможно распознать без соответствующего пароля (также называемого парольной фразой).
pgBackRest шифрует репозиторий с использованием пароля, заданного пользователем, предотвращая несанкционированный доступ к хранящимся в нём данным.
Обновление pgBackRest
Обновление pgBackRest с v2.x до v2.y
Обновление с v2.x до v2.y несложно. Формат репозитория не изменился, поэтому в большинстве установок достаточно установить исполняемые файлы новой версии. Понижение версии также возможно, если не использовались новые функции, которые не поддерживаются старой версией.
ВАЖНО:
Локальная и удалённая версии pgBackRest должны в точности совпадать, поэтому их следует обновлять одновременно. При несовпадении версий архивирование WAL и резервное копирование не будут работать, пока версии не совпадут. В этом случае выводится ошибка: [ProtocolError] expected value '2.x' for greeting key 'version' but got '2.y'.
Сборка
Предпочтительнее устанавливать pgBackRest из пакета, чем собирать из исходного кода. Дополнительные сведения о пакетах приведены в разделе Установка .
Сборку из исходного кода лучше выполнять на отдельном сервере сборки, а не в рабочей среде. Многие необходимые для сборки инструменты обычно не следует устанавливать в рабочей среде. pgBackRest состоит из одного исполняемого файла, поэтому после сборки его легко скопировать на другой сервер.
build ⇒ Загрузить pgBackRest версии 2.59.3 в каталог /build
build ⇒ Установить зависимости для сборки
build ⇒ Настроить и скомпилировать pgBackRest
build ⇒ При необходимости запустить базовые тесты, чтобы проверить правильность сборки pgBackRest
Установка
Для демонстрационного кластера и выполнения примеров pgBackRest создаётся новый сервер с именем pg-primary.
Предпочтительнее устанавливать pgBackRest из пакета, чем собирать из исходного кода. При установке из пакета остальные инструкции этого раздела обычно не нужны, однако пакет может не создать какой-либо каталог или назначить неверные права доступа. В таком случае может потребоваться вручную создать каталоги или исправить права.
Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .
Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.
pg-primary ⇒ Установить зависимости
pg-primary ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки
Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.
pg-primary ⇒ Создать файл конфигурации и каталоги pgBackRest
Теперь pgBackRest должен быть установлен правильно, но лучше это проверить. Если какие-либо зависимости пропущены, при запуске pgBackRest из командной строки возникнет ошибка.
pg-primary ⇒ Убедиться в успешной установке
Быстрый старт
В разделе «Быстрый старт» рассматривается базовая настройка pgBackRest и PostgreSQL, а также команды backup, restore и info.
Создание демонстрационного кластера
Создавать демонстрационный кластер необязательно, но настоятельно рекомендуется, особенно новым пользователям: команды в примерах этого руководства обращаются именно к нему. Предполагается, что демонстрационный кластер работает на порту по умолчанию (5432). Кластер будет запущен в одном из следующих разделов, поскольку сначала нужно завершить настройку.
pg-primary ⇒ Создать демонстрационный кластер
По умолчанию RHEL включает день недели в имя файла журнала. Это несколько усложняет руководство, поэтому для log_filename задаётся постоянное значение.
pg-primary:/var/lib/pgsql/14/data/postgresql.conf ⇒ Задать log_filename
Настройка stanza кластера
Stanza — это конфигурация кластера баз данных PostgreSQL, определяющая его расположение, способ резервного копирования, параметры архивирования и т. д. На большинстве серверов баз данных работает только один кластер PostgreSQL, поэтому достаточно одной stanza. На серверах резервного копирования требуется отдельная stanza для каждого кластера, резервные копии которого нужно создавать.
Может возникнуть желание назвать stanza по имени первичного кластера, но лучше выбрать имя, описывающее базы данных этого кластера. Поскольку имя stanza будет использоваться для первичного сервера и всех реплик, уместнее выбрать имя, отражающее назначение кластера, например app или dw, а не локальное имя кластера, например main или prod.
Имя «demo» точно отражает назначение этого кластера, поэтому подходит и в качестве имени stanza.
pgBackRest должен знать расположение основного каталога данных кластера PostgreSQL. Путь можно запросить непосредственно у PostgreSQL, но при восстановлении процесс PostgreSQL будет недоступен. Во время резервного копирования значение, переданное pgBackRest, сравнивается с путём, который использует работающий PostgreSQL: они должны совпадать, иначе резервное копирование завершится ошибкой. Убедитесь, что pg-path в точности совпадает с data_directory, возвращаемым PostgreSQL.
По умолчанию RHEL хранит кластеры в /var/lib/pgsql/[version]/data, поэтому правильный путь к каталогу данных определить легко.
При создании файла /etc/pgbackrest/pgbackrest.conf владелец базы данных (обычно postgres) должен получить права на его чтение.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог данных кластера PostgreSQL
Файлы конфигурации pgBackRest используют формат, похожий на INI в Windows. Секции обозначаются текстом в квадратных скобках, каждая секция содержит пары ключ/значение. Строки, начинающиеся с #, игнорируются и могут использоваться как комментарии, но комментарии после значения в той же строке не поддерживаются. Кавычки не поддерживаются, пробельные символы по краям ключей и значений удаляются. Повторно встречающиеся секции объединяются.
Файлы конфигурации pgBackRest могут загружаться несколькими способами:
configиconfig-include-pathимеют значения по умолчанию: загружается файл конфигурации по умолчанию, если он существует, затем добавляются файлы*.confиз каталога включаемой конфигурации по умолчанию, если они существуют.- Указан параметр
config: загружается только указанный файл конфигурации; он должен существовать. - Указан
config-include-path: загружаются файлы*.confиз каталога включаемой конфигурации; сам каталог должен существовать. Файл конфигурации по умолчанию загружается, если он существует. Чтобы загрузить только файлы из указанного каталога включаемой конфигурации, можно также передать параметр--no-config. - Указаны
configиconfig-include-path: используются заданные пользователем значения; загружается файл конфигурации, затем добавляются файлы*.confиз каталога включаемой конфигурации. Файлы должны существовать. - Указан
config-path: эта настройка переопределяет базовый путь к файлу конфигурации по умолчанию и/или базовый путь настройки config-include-path по умолчанию, если параметры config и/или config-include-path не заданы явно.
Файлы объединяются так, как если бы это был один большой файл, причём каждый файл должен быть корректен сам по себе. Поэтому в каждом файле необходимо указывать секции, в которых должны храниться пары ключ/значение. Порядок не важен, но приоритет зависит от секции. Приоритет от высшего к низшему:
- [stanza:command]
- [stanza]
- [global:command]
- [global]
ПРИМЕЧАНИЕ:
--config, --config-include-path и --config-path доступны только в командной строке.
pgBackRest также можно настраивать через переменные среды (пример ниже); эти переменные действуют для таких команд, как backup , restore и archive-push .
pg-primary ⇒ Настроить log-path через переменную среды
Создание репозитория
Репозиторий — место, где pgBackRest хранит резервные копии и архивирует сегменты WAL.
Заранее оценить необходимое место может быть непросто. Лучше всего создать несколько резервных копий, записать размеры копий разных типов (full/incr/diff) и измерить объём WAL, создаваемый за сутки. Это даст общее представление о требуемом месте, хотя со временем требования, скорее всего, будут меняться по мере развития базы данных.
В этом примере репозиторий будет храниться на том же сервере, что и PostgreSQL. Это простейшая конфигурация; она полезна, когда для резервного копирования сервера баз данных используется обычное ПО резервного копирования.
pg-primary ⇒ Создать репозиторий pgBackRest
Путь к репозиторию необходимо настроить, чтобы pgBackRest знал, где его искать.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить путь к репозиторию pgBackRest
Можно настроить и несколько репозиториев. Подробности см. в разделе Несколько репозиториев .
Настройка архивирования
Для резервного копирования работающего кластера PostgreSQL должно быть включено архивирование WAL. Через %p PostgreSQL указывает расположение сегмента WAL, который нужно архивировать. Обратите внимание: в ходе резервного копирования создаётся как минимум один сегмент WAL, даже если в кластер явно ничего не записывается.
pg-primary:/var/lib/pgsql/14/data/postgresql.conf ⇒ Настроить параметры архивирования
После внесения этих изменений и перед резервным копированием кластер PostgreSQL необходимо перезапустить.
pg-primary ⇒ Перезапустить демонстрационный кластер
Настройка hot_standby включена по умолчанию; её следует оставлять включённой на всех кластерах. В дальнейшем любой кластер может быть восстановлен как резервный, например первичный сервер, заново созданный в качестве резервного после переключения при отказе. Без этой настройки резервный сервер не принимает соединения для чтения.
Если ожидается, что архивирование сегмента WAL в репозиторий pgBackRest займёт более 60 секунд (значение по умолчанию), следует увеличить параметр pgBackRest archive-timeout. Это не то же самое, что параметр PostgreSQL archive_timeout, который принудительно переключает сегмент WAL и полезен для баз данных с длительными периодами отсутствия активности. Дополнительные сведения о параметре PostgreSQL archive_timeout см. в разделе Журнал предзаписи
документации PostgreSQL.
Для команды archive-push можно задать отдельные параметры. Например, меньший уровень сжатия может ускорить архивирование, не влияя на сжатие резервных копий.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить archive-push на меньший уровень сжатия
Этот способ настройки применим к любой команде и даже к конкретной stanza, например demo:archive-push.
Настройка срока хранения
pgBackRest удаляет устаревшие резервные копии на основании параметров срока хранения.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить хранение 2 полных резервных копий
Дополнительные сведения приведены в разделе Срок хранения .
Настройка шифрования репозитория
Для демонстрации шифрования в репозитории будут настроены тип шифра и ключ. Шифрование всегда выполняется на стороне клиента, даже если тип репозитория (например, S3 или другое объектное хранилище) поддерживает шифрование.
В качестве ключа шифрования важно использовать длинную случайную парольную фразу. Подходящий способ её создания — команда openssl rand -base64 48.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить шифрование репозитория pgBackRest
ПРИМЕЧАНИЕ:
Выше настройки шифрования размещены в секции [global], чтобы команда info могла читать все stanza. Без параметра stanza команда info читает настройки шифрования только из секции [global], поэтому при настройке шифрования для отдельных stanza для чтения зашифрованной stanza требуется параметр stanza.
После настройки репозитория, создания и проверки stanza изменить настройки шифрования репозитория нельзя.
Создание stanza
Для инициализации stanza необходимо выполнить команду stanza-create. После stanza-create рекомендуется выполнить check, чтобы убедиться в правильной настройке архивирования и резервного копирования.
pg-primary ⇒ Создать stanza и проверить конфигурацию
Проверка конфигурации
Команда check проверяет, правильно ли настроены pgBackRest и параметр archive_command для архивирования и резервного копирования указанной stanza. Она попытается проверить все репозитории и базы данных, настроенные для сервера, на котором выполняется. Команда выявляет ошибки конфигурации, особенно архивирования, из-за которых резервные копии оказываются неполными, поскольку необходимые сегменты WAL не попали в архив. Команду можно выполнять на сервере PostgreSQL или сервере репозитория. Её также можно выполнять на резервном сервере, однако, поскольку на нём нельзя вызвать pg_switch_xlog()/pg_switch_wal(), в этом случае проверяется только конфигурация репозитория.
Обратите внимание: для принудительного архивирования сегмента WAL в PostgreSQL вызываются pg_create_restore_point('pgBackRest Archive Check') и pg_switch_xlog()/pg_switch_wal().
pg-primary ⇒ Проверить конфигурацию
Настройка производительности
В pgBackRest есть ряд параметров производительности, которые по умолчанию отключены для сохранения обратной совместимости репозитория. Однако при создании нового репозитория рекомендуется использовать следующие параметры. Их можно применять и к существующему репозиторию, но тогда старые версии pgBackRest не смогут его читать. Эта несовместимость зависит от версии, в которой появилась функция, как указано в списке ниже.
compress-type— определяет алгоритм сжатия для командbackupиarchive-push. По умолчанию используетсяgz(Gzip), но рекомендуетсяzst(Zstandard): он гораздо быстрее и обеспечивает степень сжатия, близкую кgz. Значениеzstподдерживается параметромcompress-typeначиная с v2.27 . Подробности см. в разделе Тип сжатия .repo-bundle— объединяет небольшие файлы при резервном копировании, экономя место и ускоряя командыbackupиrestore, особенно в объектных хранилищах, таких как S3. Параметрrepo-bundleпоявился в v2.39 . Подробности см. в разделе Пакетирование файлов .repo-block— при резервном копированииdiff/incrкомандойbackupсохраняет только изменившиеся части файлов, а не файлы целиком. Это экономит место и ускоряетbackup. Параметрrepo-blockпоявился в v2.46 , но рекомендуется как минимум v2.52.1 . Подробности см. в разделе Блочное инкрементное копирование .
Есть и другие параметры производительности, отключённые по умолчанию, поскольку они требуют дополнительной настройки или значение по умолчанию безопасно, но не оптимально. Эти параметры доступны во всех версиях pgBackRest v2.
process-max— определяет количество процессов, используемых командами. Значение по умолчанию — 1, и оно почти никогда не является подходящим. Каждая команда используетprocess-maxпо-своему; подробности см. в документации соответствующей команды.archive-async— архивирует файлы WAL в репозиторий пакетами, что значительно ускоряет архивирование. По умолчанию отключён, поскольку требует создания каталога очереди. Подробности см. в разделе Асинхронное архивирование .backup-standby— выполняет резервное копирование с резервного сервера вместо первичного, снижая нагрузку на первичный сервер. По умолчанию отключён, поскольку требует дополнительной настройки и наличия одного или нескольких резервных серверов. Подробности см. в разделе Резервное копирование с резервного сервера .
Создание резервной копии
По умолчанию pgBackRest перед началом резервного копирования ждёт следующей плановой контрольной точки. В зависимости от настроек checkpoint_timeout и checkpoint_segments в PostgreSQL до завершения контрольной точки и начала резервного копирования может пройти немало времени. Обычно лучше задать start-fast=y, чтобы резервное копирование начиналось сразу. Это принудительно создаёт контрольную точку, но, поскольку резервные копии обычно создаются раз в сутки, дополнительная контрольная точка не должна заметно влиять на производительность. Однако на очень нагруженных кластерах может быть лучше передавать --start-fast в командной строке по мере необходимости.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить быстрый запуск резервного копирования
Чтобы создать резервную копию кластера PostgreSQL, запустите pgBackRest с командой backup.
pg-primary ⇒ Создать резервную копию демонстрационного кластера
По умолчанию pgBackRest пытается создать инкрементную резервную копию. Однако инкрементная копия должна опираться на полную, а поскольку полной копии ещё не было, pgBackRest создал полную копию.
Параметр type позволяет явно указать полное или дифференциальное резервное копирование.
pg-primary ⇒ Создать дифференциальную резервную копию демонстрационного кластера
На этот раз предупреждения не было, поскольку полная резервная копия уже существовала. Инкрементные копии могут опираться на полную или дифференциальную копию, а дифференциальные должны опираться на полную. Для создания полной копии выполните команду backup с --type=full.
Во время резервного копирования работающего кластера pgBackRest ожидает архивирования сегментов WAL, необходимых для согласованности резервной копии. Время ожидания задаётся параметром pgBackRest archive-timeout, значение которого по умолчанию составляет 60 секунд. Если известно, что архивирование отдельного сегмента занимает больше времени, этот параметр следует увеличить.
Планирование резервного копирования
Резервное копирование можно запускать по расписанию с помощью таких утилит, как cron.
В следующем примере настроены два задания cron: полное резервное копирование каждое воскресенье в 6:30 утра и дифференциальное в 6:30 утра с понедельника по субботу. Если этот crontab устанавливается впервые посреди недели, при первом запуске задания дифференциального копирования pgBackRest создаст полную копию, а на следующий день — дифференциальную.
После настройки расписания важно настроить срок хранения, чтобы устаревшие копии регулярно удалялись; см. раздел Срок хранения .
Сведения о резервных копиях
Для получения сведений о резервных копиях используйте команду info.
pg-primary ⇒ Получить сведения о демонстрационном кластере
Команда info работает с одной stanza или со всеми stanza. По умолчанию используется текстовый вывод, который содержит удобную для чтения сводку резервных копий запрошенных stanza. Этот формат может измениться в любом выпуске.
Для машиночитаемого вывода используйте --output=json. Вывод JSON содержит намного больше сведений, чем текстовый, и остаётся стабильным, если только не обнаружена ошибка.
Чтобы ускорить выполнение, ограничьте вывод сведениями о ходе выполнения, указав --detail-level=progress. При этом пропускаются все проверки, кроме проверки доступности stanza.
Для каждой stanza выводится отдельный раздел; параметром --stanza можно ограничить вывод одной stanza. Поле «status» кратко отражает состояние stanza. Значение «ok» означает, что pgBackRest работает нормально. При наличии нескольких репозиториев статус «mixed» указывает на проблемы со stanza в одном или нескольких репозиториях; в этом случае её состояние подробно приводится для каждого репозитория. Если ошибка репозитория не соответствует ни одному из известных кодов ошибок, используется код «other» и выводятся полные сведения об ошибке. Поле «wal archive min/max» показывает минимальный и максимальный WAL, хранящиеся в архиве; при наличии нескольких репозиториев оно охватывает их все, если не задан параметр --repo. Учтите, что из-за политик срока хранения архива или по другим причинам в последовательности могут быть пропуски.
Если на сервере сейчас выполняется одна из соответствующих команд, рядом со сведениями «status» появляются сообщения «backup/expire running» и/или «restore running». В текстовом выводе также отображается ход выполнения по каждому репозиторию, а в вывод JSON добавляется массив «repo».
Резервные копии выводятся от старых к новым. Самая старая копия всегда полная (обозначается F в конце метки), а самая новая может быть полной, дифференциальной (метка оканчивается на D) или инкрементной (оканчивается на I).
Поле «timestamp start/stop» задаёт период выполнения резервного копирования. По «timestamp stop» можно выбрать копию для восстановления на определённый момент времени. Дополнительные сведения приведены в разделе Восстановление на определённый момент времени
.
Поле «wal start/stop» определяет диапазон WAL, необходимый для приведения базы данных в согласованное состояние при восстановлении. Перед завершением команда backup убеждается, что этот диапазон WAL есть в архиве.
Поле «database size» — полный размер базы данных без сжатия, а «database backup size» — объём данных базы, которые фактически нужно скопировать (для полных копий эти значения совпадают).
Поле «repo» указывает, в каком репозитории находится копия. Поле «backup set size» включает все файлы этой копии и тех копий репозитория, на которые она ссылается и которые необходимы для восстановления базы данных из неё, а «backup size» — только файлы самой этой копии (для полных копий эти значения также совпадают). Если в pgBackRest включено сжатие, размеры в репозитории учитывают сжатый размер файлов.
Поле «backup reference total» содержит сводку дополнительных резервных копий, необходимых для восстановления этой копии. Чтобы вывести полный список ссылок, используйте параметр --set.
Восстановление резервной копии
Резервные копии защищают от ряда аварийных ситуаций; наиболее распространены аппаратные сбои и повреждение данных. Простейший способ имитировать повреждение данных — удалить важный файл кластера PostgreSQL.
pg-primary ⇒ Остановить демонстрационный кластер и удалить файл pg_control
При запуске кластера без этого важного файла возникнет ошибка.
pg-primary ⇒ Попытаться запустить повреждённый демонстрационный кластер
Чтобы восстановить резервную копию кластера PostgreSQL, запустите pgBackRest с командой restore. Кластер необходимо остановить (в данном случае он уже остановлен), а из каталога данных PostgreSQL удалить все файлы.
pg-primary ⇒ Удалить старые файлы демонстрационного кластера
pg-primary ⇒ Восстановить демонстрационный кластер и запустить PostgreSQL
На этот раз кластер успешно запустился, поскольку при восстановлении был возвращён отсутствующий файл pg_control.
Дополнительные сведения о команде restore приведены в разделе Восстановление
.
Мониторинг
Мониторинг — важная часть любой рабочей системы. Доступно множество инструментов, и с небольшой доработкой любой из них можно использовать для мониторинга pgBackRest.
pgBackRest может выводить сведения о репозитории в формате JSON, включая список всех резервных копий для каждой stanza и сведения об архиве WAL.
В PostgreSQL
Команда PostgreSQL COPY позволяет загрузить сведения pgBackRest в таблицу. В следующем примере эта логика оформлена как функция, с помощью которой можно выполнять запросы в реальном времени.
pg-primary ⇒ Загрузить функцию получения сведений pgBackRest для PostgreSQL
Теперь с помощью функции monitor.pgbackrest_info() можно узнать время последней успешной резервной копии и архивированный WAL для stanza.
pg-primary ⇒ Запросить время последней успешной резервной копии и архивированный WAL
Резервное копирование
Если настроено несколько репозиториев, pgBackRest создаёт резервную копию в репозитории с наивысшим приоритетом (например, repo1), если не указан параметр --repo.
У pgBackRest нет встроенного планировщика, поэтому лучше запускать его из cron или другого планировщика.
Дополнительные сведения и примеры см. в разделе Создание резервной копии .
Пакетирование файлов
Объединение файлов в пакеты в репозитории экономит время резервного копирования и часть места в репозитории. Это особенно заметно, когда репозиторий находится в объектном хранилище, таком как S3, или в файловой системе с большим размером блока. Создание отдельного файла в объектном хранилище занимает больше времени, а хранение очень маленьких файлов может стоить столько же, сколько хранение более крупных.
Пакетирование файлов включается параметром repo-bundle.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-bundle
Без пакетирования файлов каталог полной резервной копии содержит 1000+ файлов, а с пакетированием их общее количество значительно уменьшается. Дополнительное преимущество: файлы нулевой длины не сохраняются (кроме записи в манифесте), тогда как при обычном резервном копировании каждый такой файл хранится отдельно.
pg-primary ⇒ Создать полную резервную копию
pg-primary ⇒ Проверить общее количество файлов
Для настройки можно использовать параметры repo-bundle-size и repo-bundle-limit, хотя значения по умолчанию должны быть оптимальными в большинстве случаев.
Хотя пакетирование файлов обычно эффективнее, оно затрудняет ручное извлечение файлов из репозитория. Для хранилища с дедупликацией оно может быть не лучшим выбором: каждая полная резервная копия размещает файлы в пакетах по-разному. Наконец, копирование пакетов файлов нельзя возобновить, поэтому не следует задавать слишком большое значение repo-bundle-limit.
Блочное инкрементное копирование
Блочные инкрементные резервные копии экономят место: сохраняются лишь части файла, изменившиеся после предыдущей резервной копии, а не весь файл.
Блочное инкрементное копирование включается параметром repo-block и наиболее эффективно, когда включено для всех типов резервных копий. Пакетирование файлов также должно быть включено.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-block
Аннотации резервных копий
К резервной копии можно прикреплять информационные пары ключ/значение. Этот параметр можно указать несколько раз, чтобы добавить несколько аннотаций.
pg-primary ⇒ Создать полную резервную копию с аннотациями
В текстовом выводе команды info аннотации отображаются, когда резервная копия указана через --set; в выводе JSON они присутствуют всегда.
pg-primary ⇒ Получить сведения о демонстрационном кластере
Аннотации, заданные в команде backup, впоследствии можно добавлять, изменять или удалять с помощью команды annotate.
pg-primary ⇒ Изменить аннотации резервной копии
Срок хранения
Обычно лучше хранить как можно больше резервных копий, чтобы расширить доступный интервал восстановления на определённый момент времени , но необходимо учитывать и практические ограничения, например объём диска. Параметры срока хранения позволяют удалять старые копии, когда они больше не нужны.
pgBackRest выполняет ротацию полных резервных копий в зависимости от типа срока хранения: по количеству или по периоду времени. Если задано количество, при удалении учитывается не время создания копий, а то, сколько их нужно сохранить. Дифференциальные копии хранятся по количеству, но всегда удаляются при удалении полной копии, от которой зависят. Инкрементные копии не удаляются по сроку хранения независимо: они всегда удаляются вместе со связанной полной или дифференциальной копией. Подробности и примеры см. в разделах Хранение полных резервных копий и Хранение дифференциальных резервных копий .
По умолчанию архивированный WAL сохраняется для резервных копий, срок хранения которых не истёк. Этот порядок можно изменить отдельно для каждого репозитория параметрами retention-archive, хотя делать это не рекомендуется. Подробности и примеры см. в разделе Хранение архива .
Команда expire автоматически выполняется после каждого успешного резервного копирования; её также может запускать пользователь. При ручном запуске удаление выполняется в соответствии с настройками срока хранения каждого настроенного репозитория. Если передан параметр --repo, удаление выполняется только в указанном репозитории. Пользователь может также ограничить удаление конкретным набором резервной копии с помощью --set; если при этом не указан --repo, поиск выполняется во всех репозиториях и удаляются все совпадающие наборы. Следует учитывать, что при каждом запуске expire проверяется и применяется политика хранения архива.
Хранение полных резервных копий
Параметр repo1-retention-full-type определяет, как интерпретировать repo1-retention-full: как количество сохраняемых полных резервных копий или как число дней их хранения. Удаление выполняется только после завершения новых резервных копий. То есть при repo1-retention-full-type=count и repo1-retention-full=2 перед удалением самой старой копии будут храниться три полные копии; при repo1-retention-full-type=time и repo1-retention-full=20 для начала удаления должна существовать хотя бы одна полная копия возрастом не менее 20 дней.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-full
Для резервного копирования задано repo1-retention-full=2, но пока существует только одна полная копия, поэтому создание следующей полной копии не приведёт к удалению полных копий.
pg-primary ⇒ Создать полную резервную копию
Архив удаляется, поскольку сегменты WAL были созданы до самой старой резервной копии. Для восстановления они бесполезны: восстановить копию можно только с помощью сегментов WAL, созданных после неё.
pg-primary ⇒ Создать полную резервную копию
Полная резервная копия 20261002-185647F удаляется, а хранение архива теперь определяется копией 20261002-185711F, которая стала самой старой полной копией.
Хранение дифференциальных резервных копий
Установите repo1-retention-diff равным нужному количеству дифференциальных резервных копий. Дифференциальные копии зависят только от предыдущей полной копии, поэтому можно создать «скользящий» набор дифференциальных копий за последние сутки или более длительный период. Это обеспечивает быстрое восстановление на недавние моменты времени и при этом уменьшает общий расход места.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-diff
Для резервного копирования задано repo1-retention-diff=1, поэтому прежде, чем одна дифференциальная копия будет удалена, нужно создать две. Для демонстрации удаления инкрементной копии добавляется инкрементное резервное копирование; в данном случае её удаление зависит от удаления дифференциальной копии.
pg-primary ⇒ Создать дифференциальную и инкрементную резервные копии
Теперь создание дифференциальной резервной копии приведёт к удалению предыдущих дифференциальной и инкрементной копий, оставив только одну дифференциальную.
pg-primary ⇒ Создать дифференциальную резервную копию
Хранение архива
Хотя pgBackRest автоматически удаляет архивированные сегменты WAL при удалении устаревших резервных копий (по умолчанию WAL полных копий удаляется на основании параметра repo1-retention-full), для экономии дискового пространства может быть полезно удалять архив более активно. При хранении архива дифференциальных копий полные копии также считаются дифференциальными.
При удалении архива никогда не удаляются сегменты WAL, необходимые для согласованности резервной копии. Однако восстановление на определённый момент времени (PITR) возможно только при непрерывном потоке WAL, поэтому при агрессивном удалении архива вне обычного процесса удаления резервных копий следует соблюдать осторожность. Чтобы узнать, что будет удалено, ничего фактически не удаляя, можно передать в командной строке параметр dry-run команде expire.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-retention-diff
pg-primary ⇒ Создать дифференциальную резервную копию
pg-primary ⇒ Удалить устаревший архив
У дифференциальной копии 20261002-185713F_20261002-185717D есть архивированные сегменты WAL, которые необходимо сохранить для согласованности старых копий, хотя продвинуть их дальше с помощью PITR уже нельзя. Сегменты WAL, созданные после 20261002-185713F_20261002-185717D, но до 20261002-185713F_20261002-185719D, удаляются. Сегменты, созданные после новой копии 20261002-185713F_20261002-185719D, остаются и могут использоваться для PITR.
Поскольку при хранении архива дифференциальных копий полные копии считаются дифференциальными, если теперь создать полную копию с теми же настройками, для PITR останется только архив этой полной копии.
Восстановление
По умолчанию команда восстановления автоматически выбирает последнюю резервную копию из первого репозитория, в котором есть копии (см. Быстрый старт — Восстановление резервной копии
). Порядок проверки репозиториев определяется файлом pgbackrest.conf (например, repo1 проверяется раньше repo2). Для выбора конкретного репозитория можно передать --repo (например, --repo=1). Если нужна не последняя резервная копия, можно передать параметр --set.
При PITR с --type=time или --type=lsn целевое время или LSN необходимо указать с помощью параметра --target. Если --set не задан, настроенные репозитории проверяются по порядку: выбирается резервная копия, время завершения которой предшествует целевому времени или LSN завершения которой меньше либо равен целевому LSN. Если подходящая копия не найдена, pgBackRest выдаёт ошибку как для --type=time, так и для --type=lsn; перехода к последней резервной копии не происходит. Для других типов PITR, например xid, необходимо указать параметр --set, если цель предшествует последней резервной копии. Подробнее и с примерами см. Восстановление на заданный момент времени
.
В соответствии с рекомендацией PostgreSQL слоты репликации не включаются в резервную копию. Дополнительные сведения см. в разделе Резервное копирование каталога данных документации PostgreSQL.
В следующих разделах рассматриваются дополнительные возможности команды restore.
Владельцы файлов
Если restore выполняется от имени пользователя, отличного от root (обычный случай), все восстановленные файлы будут принадлежать пользователю и группе, от имени которых запущен pgBackRest. Если существующие файлы принадлежат другому пользователю или группе и сменить владельца на пользователя и группу процесса не удаётся, возникает ошибка. В этом случае перед повторной попыткой восстановления привилегированный пользователь должен изменить владельца файлов.
Если restore выполняется от имени root, pgBackRest пытается восстановить владельцев, записанных в манифест при создании резервной копии. В манифесте хранятся только имена пользователей и групп, поэтому на сервере восстановления должны существовать те же имена. Если имя пользователя или группы локально не найдено, используется пользователь или группа каталога данных PostgreSQL, а если их не удаётся сопоставить с именем — root.
Параметр delta
В разделе Восстановление резервной копии
главы Быстрый старт
перед выполнением restore требовалось очистить каталог кластера баз данных. Параметр delta позволяет pgBackRest автоматически определить, какие файлы в каталоге кластера можно сохранить, а какие нужно восстановить из резервной копии. Он также удаляет файлы, отсутствующие в манифесте копии, устраняя расходящиеся изменения. Для этого вычисляется криптографический хеш SHA-1
каждого файла в каталоге кластера. Если хеш SHA-1 не совпадает с хешем в резервной копии, файл восстанавливается. Эта операция очень эффективна в сочетании с параметром process-max. Поскольку на время восстановления сервер PostgreSQL остановлен, можно использовать больше процессов, чем было бы желательно при резервном копировании работающего сервера PostgreSQL.
pg-primary ⇒ Остановить демонстрационный кластер и выполнить дельта-восстановление
pg-primary ⇒ Перезапустить PostgreSQL
Восстановление выбранных баз данных
Иногда требуется выборочно восстановить отдельные базы данных из резервной копии кластера. Это может понадобиться для повышения производительности или для переноса выбранных баз на машину, где недостаточно места для восстановления всего кластера.
Для демонстрации этой возможности создаются две базы данных: test1 и test2.
pg-primary ⇒ Создать две тестовые базы данных
В каждой тестовой базе будут созданы таблицы и данные, чтобы показать, что восстановление работает и при выборочном восстановлении.
pg-primary ⇒ Создать тестовую таблицу в каждой базе данных
Создаётся новая резервная копия, чтобы pgBackRest получил сведения о новых базах данных.
pg-primary ⇒ Создать резервную копию
Одна из основных причин использовать выборочное восстановление — экономия места. Здесь показан размер базы test1, чтобы его можно было сравнить с расходом дискового пространства после выборочного восстановления.
pg-primary ⇒ Показать место, занимаемое базой test1
Если неизвестно, какую базу данных нужно восстановить, используйте параметр set команды info, чтобы узнать, какие базы входят в набор резервной копии.
pg-primary ⇒ Показать список баз данных в резервной копии
Остановите кластер и восстановите только базу test2. Встроенные базы (template0, template1 и postgres) восстанавливаются всегда.
ПРЕДУПРЕЖДЕНИЕ:
Если не указать --type=immediate, восстановление может завершиться ошибкой. Причина в том, что после достижения согласованности PostgreSQL считает обнулённые страницы ошибкой даже при записи полной страницы. В PostgreSQL ≥ 13 можно использовать настройку ignore_invalid_pages, чтобы игнорировать некорректные страницы. В этом случае после восстановления важно проверить журналы и убедиться, что сообщений о некорректных страницах в выбранных базах данных нет.
pg-primary ⇒ Восстановить последнюю резервную копию, включив только базу test2
После завершения восстановления база test2 будет содержать все ранее созданные таблицы и данные.
pg-primary ⇒ Продемонстрировать восстановление базы test2
База test1, несмотря на успешное восстановление, недоступна. Причина в том, что вся база была восстановлена в виде разреженных обнулённых файлов. PostgreSQL может успешно применить WAL к таким файлам, но база в целом будет некорректна, поскольку ключевые файлы не содержат данных. Это сделано намеренно, чтобы исключить случайное использование базы, которая может содержать лишь часть данных, применённых при воспроизведении WAL.
pg-primary ⇒ Попытка подключиться к базе test1 приведёт к ошибке
Поскольку база test1 восстанавливается в виде разреженных обнулённых файлов, она займёт лишь столько места, сколько WAL будет записано при восстановлении. Объём WAL, создаваемого во время резервного копирования и применяемого при восстановлении, может быть значительным, но обычно составляет небольшую долю полного размера базы, особенно для крупных баз, где эта возможность наиболее полезна.
Очевидно, что при выборочном восстановлении база test1 занимает гораздо меньше места, чем при полном восстановлении базы.
pg-primary ⇒ Показать место, занимаемое базой test1 после восстановления
На этом этапе единственное действие, которое можно выполнить с некорректной базой test1, — drop database. pgBackRest не удаляет базу автоматически, поскольку это невозможно до завершения восстановления и появления доступа к кластеру.
pg-primary ⇒ Удалить базу test1
После удаления некорректной базы test1 остаются только test2 и встроенные базы.
pg-primary ⇒ Показать оставшиеся базы данных
Восстановление на определённый момент времени
В разделе Восстановление резервной копии главы Быстрый старт использовалось восстановление по умолчанию — воспроизведение WAL до самого конца потока. При аппаратном сбое это обычно лучший вариант, но при повреждении данных, вызванном машиной или человеком, часто уместнее восстановление на определённый момент времени (PITR).
Восстановление на определённый момент времени (PITR) позволяет воспроизвести WAL из резервной копии до заданного LSN, времени, идентификатора транзакции или точки восстановления. В типичных сценариях восстановление по времени, пожалуй, наиболее полезно. Частый случай — восстановление случайно удалённой таблицы или данных. Восстановление удалённой таблицы нагляднее, поэтому здесь используется именно такой пример, но удалённые данные восстанавливаются точно так же.
pg-primary ⇒ Создать таблицу с очень важными данными
Важно задавать время так, как его понимает PostgreSQL, и включать смещение часового пояса. Это уменьшает вероятность нежелательного преобразования часовых поясов и неожиданного результата восстановления.
pg-primary ⇒ Получить время из PostgreSQL
Теперь, когда время записано, таблица удаляется. На практике определить точное время удаления таблицы гораздо труднее, чем в этом примере. Точное время может оказаться неизвестным, но некоторое исследование должно позволить достаточно близко его оценить.
pg-primary ⇒ Удалить важную таблицу
Если для восстановления выбрана неверная резервная копия, восстановление на нужный момент времени завершится неудачей. Для демонстрации создаётся новая инкрементная копия, в которой important_table уже отсутствует.
pg-primary ⇒ Создать инкрементную резервную копию
Восстановить потерянную таблицу из этой копии не получится, поскольку PostgreSQL может воспроизводить изменения только вперёд, но не назад.
pg-primary ⇒ Попытаться восстановить данные из неподходящей резервной копии
Надёжный способ — позволить pgBackRest автоматически выбрать копию, из которой возможно восстановление на целевой момент времени, то есть копию, завершившуюся до указанного времени.
ПРИМЕЧАНИЕ:
pgBackRest не может автоматически выбрать копию при типе восстановления xid или name.
pg-primary ⇒ Восстановить демонстрационный кластер на момент 2026-10-02 18:57:39.575732+00
pgBackRest сформировал настройки восстановления в postgresql.auto.conf, поэтому PostgreSQL можно запустить сразу. Через %f PostgreSQL указывает нужный сегмент WAL, а через %p — место, куда его следует скопировать. После того как PostgreSQL завершит восстановление, таблица снова будет существовать и к ней можно будет обращаться с запросами.
pg-primary ⇒ Запустить PostgreSQL и проверить наличие важной таблицы
Журнал PostgreSQL также содержит полезные сведения. В нём указаны время и транзакция, на которых остановилось восстановление, а также время последней применённой транзакции.
pg-primary ⇒ Просмотреть журнал PostgreSQL
Удаление stanza
Команда stanza-delete удаляет из репозитория данные, связанные со stanza.
ПРЕДУПРЕЖДЕНИЕ:
Используйте эту команду с осторожностью: она безвозвратно удаляет из репозитория pgBackRest все резервные копии и архивы указанной stanza.
Чтобы удалить stanza:
- Остановите кластер PostgreSQL, связанный со stanza (или используйте –force для обхода этого требования).
- Выполните команду
stopна сервере, где будет запущенаstanza-delete. - Выполните команду
stanza-delete.
После успешного завершения команды пользователь должен самостоятельно удалить stanza из всех файлов конфигурации pgBackRest и/или переменных среды.
За один раз stanza можно удалить только из одного репозитория. Чтобы удалить stanza из нескольких репозиториев, повторите команду stanza-delete для каждого из них, указав параметр --repo.
pg-primary ⇒ Остановить удаляемый кластер PostgreSQL
pg-primary ⇒ Остановить pgBackRest для stanza
pg-primary ⇒ Удалить stanza из одного репозитория
Несколько репозиториев
Можно настроить несколько репозиториев, как показано в разделе Поддержка S3 . Одно из возможных преимуществ — локальный репозиторий для быстрого восстановления и удалённый для избыточности.
Некоторые команды, например stanza-create
/stanza-upgrade
, автоматически работают со всеми настроенными репозиториями. Для других, например stanza-delete
, репозиторий нужно указать параметром repo.
Для обратной совместимости параметр repo не требуется, если настроен только repo1. Однако, если единственный репозиторий настроен, например, как repo2, параметр repo обязателен. Это позволяет избежать нарушения работы команд при последующем добавлении нового репозитория.
Команда archive-push всегда отправляет WAL в архивы всех настроенных репозиториев. Если один репозиторий недоступен, WAL всё равно отправляется в остальные. Однако для эффективной работы необходимо включить archive-async=y; иначе остальные репозитории смогут опередить недоступный лишь на один сегмент WAL. Также учтите: если WAL не удаётся отправить в какой-либо репозиторий, PostgreSQL не удалит его из каталога pg_wal, из-за чего на томе может закончиться место.
Для каждого репозитория нужно отдельно задать расписание резервного копирования. Во многих случаях это удобно, поскольку типы копий и сроки хранения различаются между репозиториями. Аналогично, при восстановлении необходимо указать репозиторий. Обычно для восстановления лучше выбирать репозиторий с низкой задержкой или стоимостью, даже если само восстановление займёт больше времени. Определить наиболее эффективный репозиторий можно только испытаниями восстановления.
Поддержка объектных хранилищ, совместимых с Azure
pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с Azure. Контейнер для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне контейнера (/), но обычно лучше использовать вложенный путь, чтобы в том же контейнере можно было хранить журналы объектного хранилища и другие данные без конфликтов.
ПРЕДУПРЕЖДЕНИЕ:
Не включайте «иерархическое пространство имён»: это приведёт к ошибкам при удалении устаревших копий.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить Azure
Для использования подписей общего доступа задайте параметру repo2-azure-key-type значение sas, а параметру repo2-azure-key — токен подписи общего доступа.
Команды выполняются точно так же, как если бы репозиторий находился на локальном диске.
pg-primary ⇒ Создать stanza
Создание файлов в Azure происходит относительно медленно, поэтому включение пакетирования файлов
повышает производительность backup/restore.
pg-primary ⇒ Создать резервную копию демонстрационного кластера
Поддержка объектных хранилищ, совместимых с S3
pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с S3. Бакет для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне бакета (/), но обычно лучше использовать вложенный путь, чтобы в том же бакете можно было хранить журналы объектного хранилища и другие данные без конфликтов.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить S3
ПРИМЕЧАНИЕ:
Регион и конечную точку необходимо настроить в соответствии с расположением бакета. Здесь приведены значения для региона us-east-1.
Для запуска pgBackRest следует создать роль, а права доступа к бакету следует максимально ограничить. Если роль связана с экземпляром AWS, при repo3-s3-key-type=auto pgBackRest автоматически получает временные учётные данные, поэтому явно задавать ключи в /etc/pgbackrest/pgbackrest.conf не требуется.
Этот пример политики Amazon S3 ограничивает все операции чтения и записи указанным бакетом и путём репозитория.
Команды выполняются точно так же, как если бы репозиторий находился на локальном диске.
pg-primary ⇒ Создать stanza
Создание файлов в S3 происходит относительно медленно, поэтому включение пакетирования файлов
повышает производительность backup/restore.
pg-primary ⇒ Создать резервную копию демонстрационного кластера
Поддержка SFTP
pgBackRest поддерживает размещение репозиториев на серверах SFTP. Передача файлов по SFTP относительно медленная, поэтому увеличение process-max для параллельной передачи файлов повышает производительность команд.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить SFTP
При использовании SFTP, если libssh2 собрана с OpenSSH, параметр repo4-sftp-public-key-file необязателен.
pg-primary ⇒ Создать пару ключей SSH для резервного копирования по SFTP
sftp-server ⇒ Скопировать открытый ключ pg-primary для резервного копирования по SFTP на sftp-server
Команды выполняются точно так же, как если бы репозиторий находился на локальном диске.
pg-primary ⇒ Добавить отпечаток sftp-server в файл known_hosts, поскольку значение repo4-sftp-host-key-check-type по умолчанию — «strict»
pg-primary ⇒ Создать stanza
pg-primary ⇒ Создать резервную копию демонстрационного кластера
Поддержка объектных хранилищ, совместимых с GCS
pgBackRest поддерживает размещение репозиториев в объектных хранилищах, совместимых с GCS. Бакет для репозитория необходимо создать заранее: pgBackRest не создаёт его автоматически. Репозиторий можно разместить в корне бакета (/), но обычно лучше использовать вложенный путь, чтобы в том же бакете можно было хранить журналы объектного хранилища и другие данные без конфликтов.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить GCS
При работе в GCE задайте repo5-gcs-key-type=auto, чтобы автоматически проходить аутентификацию через служебную учётную запись экземпляра.
Команды выполняются точно так же, как если бы репозиторий находился на локальном диске.
Создание файлов в GCS происходит относительно медленно, поэтому включение пакетирования файлов
повышает производительность backup/restore.
Целевое время репозитория
Целевое время определяет, на какой момент команды читают репозиторий в хранилище с поддержкой версий. Это позволяет прочитать состояние репозитория на определённый момент времени, чтобы восстановить данные, удалённые или повреждённые случайными действиями пользователя либо вредоносной программой.
Хранение версий поддерживается в S3, GCS и Azure, но обычно по умолчанию отключено. Помимо включения версий, может быть полезно включить блокировку объектов в S3 и обратимое удаление в GCS или Azure.
При указании repo-target-time также необходимо передать параметр repo. Вероятно, не все типы репозиториев поддерживают версии, и в целом для восстановления имеет смысл выбирать один репозиторий.
Обратите внимание: временные метки хранилища сравниваются с указанной меткой по условию <=, а миллисекунды в переданной метке времени отбрасываются.
Для демонстрации этой возможности stanza demo удаляется из репозитория S3.
pg-primary ⇒ Удалить stanza из репозитория S3
После удаления stanza команда info покажет ошибочное состояние репозитория.
pg-primary ⇒ Ошибка при выполнении info
Однако, поскольку хранилище поддерживает версии, можно посмотреть состояние репозитория до удаления stanza. В зависимости от ситуации определить целевое время бывает непросто, но в данном случае момент удаления stanza можно установить по времени удаления backup.info.
pg-primary ⇒ Показать версии backup.info в бакете
Теперь можно выполнить команду info с целевым временем, чтобы увидеть репозиторий до удаления.
pg-primary ⇒ Выполнить info с целевым временем
Если команда info показывает нужную резервную копию, её можно восстановить с тем же целевым временем.
pg-primary ⇒ Выполнить восстановление с целевым временем
Выделенный сервер репозитория
Конфигурация, описанная в разделе Быстрый старт , подходит для простых установок, но в корпоративных средах обычно используют выделенный сервер репозитория для хранения резервных копий и файлов архива WAL. Так резервные копии и архив WAL отделены от сервера баз данных и меньше страдают при его отказе. При этом по-прежнему полезно применять обычное ПО резервного копирования для самого сервера репозитория.
На серверах PostgreSQL параметр pg1-path должен содержать путь к локальному кластеру PostgreSQL, а pg1-host задавать не следует. При настройке сервера репозитория в файле конфигурации pgbackrest необходимо задать pg-host для подключения к первичному и резервным серверам, если они есть. Сведения более чем об одном сервере PostgreSQL следует указывать только в конфигурации pgbackrest на сервере репозитория. Порядок не важен: например, pg1-path/pg1-host и pg2-path/pg2-host могут соответствовать как первичному, так и резервному серверу.
Установка
Для хранения резервных копий кластера создаётся новый сервер с именем repository.
ПРИМЕЧАНИЕ:
Версия pgBackRest на сервере репозитория должна в точности совпадать с версией на сервере PostgreSQL.
В качестве владельца репозитория pgBackRest создаётся пользователь pgbackrest. Владельцем может быть любой пользователь, но во избежание путаницы лучше не использовать postgres, если он существует.
ПРИМЕЧАНИЕ:
При установке pgBackRest из пакета может предоставляться конфигурация logrotate, например /etc/logrotate.d/pgbackrest, которая выполняет ротацию журналов от имени определённого пользователя через директиву su (например, su postgres postgres). Поскольку файлы в /var/log/pgbackrest принадлежат пользователю, запускающему pgBackRest (здесь pgbackrest), директиву su необходимо изменить так, чтобы она соответствовала этому пользователю, иначе logrotate завершится ошибкой прав доступа.
repository ⇒ Создать пользователя pgbackrest
Предпочтительнее устанавливать pgBackRest из пакета, чем собирать из исходного кода. При установке из пакета остальные инструкции этого раздела обычно не нужны, однако пакет может не создать какой-либо каталог или назначить неверные права доступа. В таком случае может потребоваться вручную создать каталоги или исправить права.
Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .
Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.
repository ⇒ Установить зависимости
repository ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки
Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.
repository ⇒ Создать файл конфигурации и каталоги pgBackRest
repository ⇒ Создать репозиторий pgBackRest
Конфигурация
pgBackRest может использовать TLS с клиентскими сертификатами для обмена данными между серверами. Также можно использовать SSH; см. Настройка SSH .
pgBackRest ожидает, что клиентские и серверные сертификаты созданы так же, как для PostgreSQL. Подробные инструкции по созданию сертификатов см. в разделе Защищённые соединения TCP/IP с TLS .
На сервере репозитория необходимо указать узел pg-primary, пользователя для подключения к нему и путь к базе данных. Первичный сервер будет настроен как pg1, чтобы позднее можно было добавить резервный.
repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg1-host/pg1-host-user и pg1-path
На сервере баз данных необходимо указать сервер и пользователя репозитория. Значение параметра repo1-host-user по умолчанию — pgbackrest. Если пользователь postgres выполняет восстановление на сервере репозитория, лучше не разрешать пользователю postgres также создавать резервные копии. Однако пользователь postgres может читать репозиторий непосредственно, если входит в ту же группу, что и пользователь pgbackrest.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить repo1-host/repo1-host-user
Настройка PostgreSQL описана в разделе Настройка архивирования .
Команды выполняются так же, как в конфигурации с одним сервером, за исключением того, что некоторые команды, например backup и expire, запускаются на сервере репозитория, а не на сервере баз данных.
Настройка сервера TLS
Сервер TLS pgBackRest необходимо настроить и запустить на каждом узле.
repository ⇒ Настроить сервер pgBackRest
pg-primary ⇒ Настроить сервер pgBackRest
Создание и проверка stanza
Создайте stanza в новом репозитории.
repository ⇒ Создать stanza
Проверьте правильность конфигурации и на сервере баз данных, и на сервере репозитория. Дополнительные сведения о команде check см. в разделе Проверка конфигурации
.
pg-primary ⇒ Проверить конфигурацию
repository ⇒ Проверить конфигурацию
Создание резервной копии
Чтобы создать резервную копию кластера PostgreSQL, запустите pgBackRest с командой backup на сервере репозитория.
repository ⇒ Создать резервную копию демонстрационного кластера
Поскольку на сервере репозитория был создан новый репозиторий, появилось предупреждение о замене инкрементного резервного копирования полным.
Восстановление резервной копии
Чтобы восстановить кластер PostgreSQL, запустите pgBackRest с командой restore на сервере баз данных.
pg-primary ⇒ Остановить демонстрационный кластер, восстановить его и перезапустить PostgreSQL
Параллельное резервное копирование и восстановление
pgBackRest поддерживает параллельную обработку для ускорения сжатия и передачи данных. Количество используемых процессов задаётся параметром --process-max.
Обычно для команды backup лучше использовать не более 25% доступных CPU. Резервное копирование не обязательно должно быть очень быстрым, если оно выполняется регулярно; по возможности следует избегать влияния этого процесса на производительность базы данных.
Для команды восстановления можно и следует использовать все доступные CPU, поскольку во время восстановления кластер PostgreSQL остановлен и на сервере обычно не выполняется другая важная работа. Если на сервере несколько кластеров, это следует учитывать при настройке параллелизма восстановления.
repository ⇒ Создать резервную копию одним процессом
repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на использование нескольких процессов backup
repository ⇒ Создать резервную копию несколькими процессами
repository ⇒ Получить сведения о резервных копиях демонстрационного кластера
Использование нескольких процессов должно повысить производительность последнего резервного копирования. Для очень маленьких копий разница может быть незаметна, но с ростом базы данных будет увеличиваться и экономия времени.
Запуск и остановка
Если резервный сервер повышается до первичного для тестирования или тестовый кластер восстанавливается из резервной копии рабочей среды, полезно запретить этим кластерам запись в репозитории pgBackRest. Для этого служит команда stop.
Команда stop блокирует следующие команды записи: archive-push, backup, expire, stanza-create и stanza-upgrade. Исключение из этого правила — stanza-delete (подробности см. в разделе Удаление stanza
).
pg-primary ⇒ Запретить команды записи pgBackRest
Новые команды записи pgBackRest больше не будут запускаться.
repository ⇒ Попытаться создать резервную копию
Укажите --force, чтобы завершить уже работающие команды записи pgBackRest. Это относится и к асинхронному archive-get (хотя он снова запустится, если потребуется PostgreSQL). Если pgBackRest уже остановлен, повторная остановка выдаст предупреждение.
pg-primary ⇒ Повторно остановить службы pgBackRest
Снова разрешите команды записи pgBackRest командой start. Команды записи, выполнявшиеся до остановки, не возобновятся автоматически, но теперь их можно запускать.
pg-primary ⇒ Разрешить команды записи pgBackRest
Также можно остановить pgBackRest для отдельной stanza.
pg-primary ⇒ Запретить команды записи pgBackRest для stanza demo
Новые команды записи pgBackRest для указанной stanza больше не будут запускаться.
repository ⇒ Попытаться создать резервную копию
При разрешении команд записи pgBackRest для отдельной stanza её также необходимо указать.
pg-primary ⇒ Разрешить команды записи pgBackRest для stanza demo
Репликация
Репликация позволяет создать из одного первичного сервера несколько копий кластера PostgreSQL, называемых резервными серверами. Они полезны для распределения нагрузки чтения и обеспечения избыточности на случай отказа первичного сервера.
Установка
Для запуска резервного сервера создаётся новый узел с именем pg-standby.
Предпочтительнее устанавливать pgBackRest из пакета, чем собирать из исходного кода. При установке из пакета остальные инструкции этого раздела обычно не нужны, однако пакет может не создать какой-либо каталог или назначить неверные права доступа. В таком случае может потребоваться вручную создать каталоги или исправить права.
Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .
Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.
pg-standby ⇒ Установить зависимости
pg-standby ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки
Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.
pg-standby ⇒ Создать файл конфигурации и каталоги pgBackRest
Горячий резерв
Горячий резервный сервер выполняет репликацию через архив WAL и допускает запросы только для чтения.
Конфигурация pgBackRest почти такая же, как на pg-primary, но используется тип восстановления standby, чтобы кластер оставался в режиме восстановления после достижения конца потока WAL.
pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на резервном сервере
pg-standby ⇒ Настроить сервер pgBackRest
Создайте каталог, в который будет восстановлен PostgreSQL.
pg-standby ⇒ Создать каталог PostgreSQL
Теперь резервный сервер можно создать командой restore.
ВАЖНО:
Если кластер планируется вывести из режима восстановления, не делая его новым первичным сервером (например, для отчётности или тестирования), отключите архивирование с помощью --archive-mode=off или настройки archive_mode=off в postgresql.conf. Если архивирование не отключить, в репозиторий может попасть посторонний WAL, затрудняющий восстановление.
pg-standby ⇒ Восстановить демонстрационный резервный кластер
Эта конфигурация рассчитана на случай, если резервный сервер будет повышен до первичного.
pg-standby:/var/lib/pgsql/14/data/postgresql.conf ⇒ Настроить PostgreSQL
pg-standby ⇒ Запустить PostgreSQL
Журнал PostgreSQL содержит полезные сведения о восстановлении. В частности, обратите внимание на сообщения о том, что кластер перешёл в режим резервного сервера и готов принимать соединения только для чтения.
pg-standby ⇒ Проверить журнал PostgreSQL на наличие сообщений об успешном запуске
Простой способ проверить правильность настройки репликации — создать таблицу на pg-primary.
pg-primary ⇒ Создать новую таблицу на первичном сервере
Затем запросить ту же таблицу на pg-standby.
pg-standby ⇒ Запросить новую таблицу на резервном сервере
Что же пошло не так? Поскольку PostgreSQL получает сегменты WAL для репликации из архива, изменения не будут видны на резервном сервере, пока pg-primary не отправит в архив сегмент WAL, содержащий эти изменения.
Это можно сделать вручную вызовом pg_switch_wal(), который отправляет текущий сегмент WAL в архив (для последующих изменений создаётся новый сегмент WAL).
pg-primary ⇒ Вызвать pg_switch_wal()
Теперь после небольшой задержки таблица появится на pg-standby.
pg-standby ⇒ Теперь новая таблица есть на резервном сервере (может потребоваться несколько повторных попыток)
Проверьте конфигурацию доступа резервного сервера к репозиторию.
pg-standby ⇒ Проверить конфигурацию
Потоковая репликация
Потоковая репликация устанавливает прямое соединение с первичным сервером и применяет изменения сразу после их появления на нём, не полагаясь только на архив WAL. Это значительно уменьшает отставание резервного сервера от первичного.
Для потоковой репликации требуется пользователь с правом репликации.
pg-primary ⇒ Создать пользователя репликации
Файл pg_hba.conf необходимо изменить, чтобы разрешить резервному серверу подключаться от имени пользователя репликации. Обязательно замените IP-адрес ниже фактическим IP-адресом pg-standby. После изменения pg_hba.conf потребуется перечитать конфигурацию.
pg-primary ⇒ Создать запись pg_hba.conf для пользователя репликации
Резервный сервер должен знать, как подключиться к первичному, поэтому в pgBackRest будет настроен параметр primary_conninfo.
pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Задать primary_conninfo
Пароль можно указать в primary_conninfo, но использование файла .pgpass гибче и безопаснее.
pg-standby ⇒ Задать пароль репликации в файле .pgpass.
Теперь резервный сервер можно создать командой restore.
pg-standby ⇒ Остановить PostgreSQL и восстановить демонстрационный резервный кластер
ПРИМЕЧАНИЕ:
Настройка primary_conninfo записана в файл postgresql.auto.conf, поскольку в pgbackrest.conf она задана как recovery-option. Если требуется сохранить существующий файл postgresql.auto.conf, с командой restore можно использовать параметр --type=preserve.
По умолчанию RHEL хранит файл postgresql.conf в каталоге данных PostgreSQL. Поэтому изменение postgresql.conf было перезаписано при последнем восстановлении, и настройку hot_standby необходимо включить снова. Другие способы решения этой проблемы — хранить файл postgresql.conf в другом месте или включить hot_standby на сервере pg-primary, где эта настройка будет игнорироваться.
pg-standby:/var/lib/pgsql/14/data/postgresql.conf ⇒ Включить hot_standby
pg-standby ⇒ Запустить PostgreSQL
Журнал PostgreSQL подтвердит запуск потоковой репликации.
pg-standby ⇒ Проверить журнал PostgreSQL на наличие сообщений об успешном запуске
Теперь таблица, созданная на pg-primary, быстро появится на pg-standby без необходимости вызывать pg_switch_wal().
pg-primary ⇒ Создать новую таблицу на первичном сервере
pg-standby ⇒ Запросить таблицу на резервном сервере
Несколько stanza
pgBackRest поддерживает несколько stanza. Чаще всего несколько stanza используют общий сервер репозитория.
Установка
Для запуска нового первичного сервера создаётся узел с именем pg-alt.
Предпочтительнее устанавливать pgBackRest из пакета, чем собирать из исходного кода. При установке из пакета остальные инструкции этого раздела обычно не нужны, однако пакет может не создать какой-либо каталог или назначить неверные права доступа. В таком случае может потребоваться вручную создать каталоги или исправить права.
Пакеты pgBackRest для RHEL доступны на yum.postgresql.org .
Если для используемого дистрибутива или его версии нет пакетов, можно собрать программу из исходного кода , а затем установить её вручную, как показано ниже.
pg-alt ⇒ Установить зависимости
pg-alt ⇒ Скопировать исполняемый файл pgBackRest с сервера сборки
Для pgBackRest нужны каталоги журналов и конфигурации, а также файл конфигурации.
pg-alt ⇒ Создать файл конфигурации и каталоги pgBackRest
Конфигурация
Конфигурация pgBackRest почти идентична конфигурации pg-primary, но используется stanza demo-alt, чтобы резервные копии и архив хранились отдельно.
pg-alt:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pgBackRest на новом первичном сервере
repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg1-host/pg1-host-user и pg1-path
pg-alt ⇒ Настроить сервер pgBackRest
Создание демонстрационного кластера
pg-alt ⇒ Создать демонстрационный кластер
pg-alt:/var/lib/pgsql/14/data/postgresql.conf ⇒ Настроить параметры PostgreSQL
pg-alt ⇒ Запустить демонстрационный кластер
Создание stanza и проверка конфигурации
Для инициализации stanza необходимо выполнить команду stanza-create. После stanza-create рекомендуется выполнить check, чтобы убедиться в правильной настройке архивирования и резервного копирования.
pg-alt ⇒ Создать stanza и проверить конфигурацию
Если команда check запускается на сервере репозитория, проверяются все stanza.
repository ⇒ Проверить конфигурацию всех stanza
Асинхронное архивирование
Асинхронное архивирование включается параметром archive-async. Он включает асинхронную работу обеих команд: archive-push и archive-get.
Необходим каталог очереди. Команды хранят в нём временные данные, но работают с ним существенно по-разному, поэтому использование каталога очереди подробно описано в соответствующих разделах.
pg-primary ⇒ Создать каталог очереди
pg-standby ⇒ Создать каталог очереди
Необходимо настроить каталог очереди и включить асинхронное архивирование. Само по себе асинхронное архивирование даёт некоторое преимущество за счёт уменьшения количества соединений с удалённым хранилищем, а настройка process-max может значительно повысить производительность благодаря параллельному выполнению операций. Не задавайте process-max настолько большим, чтобы это влияло на обычную работу базы данных.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог очереди и асинхронное архивирование
pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить каталог очереди и асинхронное архивирование
ПРИМЕЧАНИЕ:
process-max задаётся в секциях команд, чтобы этот параметр не применялся к резервному копированию и восстановлению. Это также позволяет задать разные значения для archive-push и archive-get.
Для демонстрации потоковая репликация будет нарушена, чтобы PostgreSQL получал WAL через restore_command.
pg-primary ⇒ Нарушить потоковую репликацию, изменив пароль репликации
pg-standby ⇒ Перезапустить резервный сервер, чтобы разорвать соединение
Отправка в архив
Асинхронная команда archive-push передаёт архивирование WAL отдельному процессу или процессам для повышения пропускной способности. Она «заглядывает вперёд» и находит сегменты WAL, готовые к архивированию помимо того, который PostgreSQL сейчас запрашивает через archive_command. Сегменты WAL передаются в архив непосредственно из каталога pg_xlog/pg_wal, а archive_command сообщает об успехе только после того, как сегмент WAL надёжно сохранён в архиве.
Каталог очереди содержит текущее состояние архивирования WAL. Записываемые в него файлы состояния обычно имеют нулевую длину и должны занимать минимум места (не более нескольких МБ) и создавать очень небольшую нагрузку ввода-вывода. Все сведения в этом каталоге можно воссоздать, поэтому при переносе кластера на другое оборудование сохранять каталог очереди не требуется.
ВАЖНО:
В первоначальной реализации асинхронного архивирования сегменты WAL копировались в каталог очереди перед сжатием и передачей. Новая реализация копирует WAL непосредственно из каталога pg_xlog. Если асинхронное архивирование использовалось в v1.12 или более ранней версии, перед обновлением внимательно прочитайте примечания к выпуску v1.13.
Файл [stanza]-archive-push-async.log позволяет отслеживать работу асинхронного процесса. Удобный способ проверки — быстро отправить несколько сегментов WAL.
pg-primary ⇒ Проверить параллельное асинхронное архивирование
Теперь файл журнала будет содержать записи о параллельной асинхронной работе.
pg-primary ⇒ Проверить результаты в журнале
Получение из архива
Асинхронная команда archive-get поддерживает локальную очередь WAL для повышения пропускной способности. Если сегмента WAL нет в очереди, он извлекается из репозитория вместе с достаточным количеством последовательных сегментов WAL для заполнения очереди. Максимальный размер очереди задаётся параметром archive-get-queue-max. Когда очередь заполнена менее чем наполовину, для её заполнения извлекаются дополнительные сегменты WAL.
Асинхронная работа наиболее полезна в средах с большим объёмом генерируемого WAL или высокой задержкой соединения с хранилищем репозитория (например, S3 или другим объектным хранилищем). При высокой задержке соединения может быть полезно увеличить process-max.
Файл [stanza]-archive-get-async.log позволяет отслеживать работу асинхронного процесса.
pg-standby ⇒ Проверить результаты в журнале
pg-primary ⇒ Восстановить потоковую репликацию, изменив пароль репликации
Резервное копирование с резервного сервера
pgBackRest может выполнять резервное копирование с резервного сервера вместо первичного. Для этого необходимо настроить сервер pg-standby и включить параметр backup-standby. Если настроено несколько резервных серверов, для резервного копирования используется первый найденный работающий резервный сервер.
repository:/etc/pgbackrest/pgbackrest.conf ⇒ Настроить pg2-host/pg2-host-user и pg2-path
Для резервного копирования необходимы и первичная, и резервная базы данных, хотя подавляющее большинство файлов копируется с резервного сервера, чтобы снизить нагрузку на первичный. Серверы баз данных можно настроить в любом порядке. pgBackRest автоматически определит, какой сервер первичный, а какой резервный.
repository ⇒ Создать резервную копию демонстрационного кластера с pg2
Эта инкрементная копия показывает, что большинство файлов копируется с сервера pg-standby и только несколько — с pg-primary.
pgBackRest создаёт с резервного сервера копию, идентичную копии с первичного. Для этого он запускает и завершает резервное копирование на pg-primary, копирует с pg-standby только реплицируемые файлы, а затем копирует немногочисленные оставшиеся файлы с pg-primary. Поэтому резервная копия включает журналы и статистику первичной базы данных.
Обновление PostgreSQL
Сразу после обновления PostgreSQL до новой основной версии во всех конфигурациях pgBackRest необходимо изменить pg-path на новое расположение базы данных и выполнить команду stanza-upgrade. Если на сервере настроено несколько репозиториев, stanza обновляется в каждом из них. Если база данных остановлена, используйте параметр --no-online.
Следующие инструкции не являются полным руководством по обновлению PostgreSQL: они описывают общий порядок обновления первичного и резервного серверов, чтобы показать необходимые шаги перенастройки pgBackRest. Перед обновлением рекомендуется создать резервную копию.
pg-primary ⇒ Остановить старый кластер
Остановите старый кластер на резервном сервере: он будет восстановлен из только что обновлённого кластера.
pg-standby ⇒ Остановить старый кластер
Создайте новый кластер и выполните обновление.
pg-primary ⇒ Создать новый кластер и выполнить обновление
Настройте параметры и порт нового кластера.
pg-primary:/var/lib/pgsql/15/data/postgresql.conf ⇒ Настроить PostgreSQL
Обновите конфигурацию pgBackRest на всех системах, указав новый кластер.
pg-primary:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg1-path
pg-standby:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg-path
repository:/etc/pgbackrest/pgbackrest.conf ⇒ Обновить pg1-path и pg2-path, отключить резервное копирование с резервного сервера
pg-primary ⇒ Скопировать конфигурацию hba
Перед запуском нового кластера необходимо выполнить команду stanza-upgrade.
pg-primary ⇒ Обновить stanza
Запустите новый кластер и убедитесь в успешной установке.
pg-primary ⇒ Запустить новый кластер
Проверьте конфигурацию командой check.
pg-primary ⇒ Проверить конфигурацию
Удалите старый кластер.
pg-primary ⇒ Удалить старый кластер
Установите исполняемые файлы новой версии PostgreSQL на резервном сервере и создайте кластер.
pg-standby ⇒ Удалить старый кластер и создать новый
Выполните check на сервере репозитория. Предупреждение о недоступности резервного сервера ожидаемо, поскольку резервный кластер остановлен. Эта команда показывает, что сервер репозитория располагает сведениями о резервном сервере и правильно настроен для работы с первичным.
repository ⇒ Проверить конфигурацию
Создайте полную резервную копию нового кластера, а затем восстановите из неё резервный сервер. Если запрошен тип incr или diff, он автоматически изменится на full.
repository ⇒ Создать полную резервную копию
pg-standby ⇒ Восстановить демонстрационный резервный кластер
pg-standby ⇒ Запустить PostgreSQL и проверить конфигурацию pgBackRest
После восстановления резервного сервера можно включить резервное копирование с него.
repository:/etc/pgbackrest/pgbackrest.conf ⇒ Снова включить резервное копирование с резервного сервера