Настройка PostgreSQL для работы с Backup Wrapper
Backup Wrapper использует утилиту wal-g для создания резервных копий баз данных PostgreSQL. Для корректной работы сервиса предварительно необходимо настроить базу данных.
| Утилита wal-g устанавливается вместе с Backup Wrapper. Подробности приведены в разделе Установка и настройка Backup Wrapper. |
Настройка базы данных PostgreSQL состоит из следующих этапов:
| Все действия необходимо производить на физическом сервере или виртуальной машине, на которых развернута база данных PostgreSQL. |
Создание пользователя для работы с резервными копиями
Чтобы создать пользователя PostgreSQL:
-
Подключитесь к PostgreSQL как суперпользователь, выполнив команду:
psql -U postgres -
Создайте пользователя для работы с резервными копиями баз данных и выдайте ему необходимые права, выполнив SQL-запросы:
CREATE USER backup_user WITH PASSWORD '<password>' REPLICATION; GRANT pg_read_all_data TO backup_user;Здесь:
-
<password>— пароль нового пользователя.
-
Настройка файла конфигурации postgresql.conf
Файл конфигурации postgresql.conf определяет основные параметры работы экземпляра базы данных.
Чтобы настроить файл конфигурации:
-
Откройте файл
postgresql.conf.Вы можете узнать расположение файла
postgresql.conf, выполнив SQL-запрос:SHOW config_file -
Добавьте в файл следующие строки в зависимости от сценария работы:
-
WAL-архивирование
-
Без WAL-архивирования
В данном сценарии происходит WAL-архивирование резервной копии базы данных. Это позволяет коррректно производить восстановление данных из резервной копии. Данный сценарий подходит для итогового решения.
wal_level = replica max_wal_senders = 3 archive_mode = on archive_timeout = 300 archive_command = '/usr/bin/wal-g wal-push %p >> /var/log/pgsql/archive.log 2>&1' max_wal_size = 4GBВ данном сценарии не происходит WAL-архивирование резервной копии базы данных. Из-за этого невозможно восстановить данные с помощью инструмента wal-g из резервной копии. Данный сценарий подходит для тестирования работы с резервными копиями.
wal_level = replica max_wal_senders = 3 archive_mode = on archive_command = '/bin/true' max_wal_size = 4GBВ дальнейшем для смены сценария работы достаточно выполнить SQL-запрос:
ALTER SYSTEM SET archive_command = '<scenario_type>'; SELECT pg_reload_conf();Здесь:
-
<scenario_type>— тип работы wal-g:-
/usr/bin/wal-g wal-push %p— с WAL-архивированием. -
/bin/true— без WAL-архивирования, только для тестирования.
-
-
Настройка подключения к S3-совместимому хранилищу
Чтобы настроить подключение к S3-совместимому хранилищу:
-
Создайте файл конфигурации
.walg.jsonот имени пользователя postgres, выполнив команду:su - postgres -c 'cat <<EOF >/<path_to_postgresql>/.walg.json { "PGDATA": "<pgdata>", "PGHOST": "<pghost>", "AWS_ACCESS_KEY_ID": "<access_key>", "AWS_SECRET_ACCESS_KEY": "<secret_key>", "AWS_REGION": "<aws_region>", "AWS_ENDPOINT": "<aws_endpoint>", "AWS_S3_FORCE_PATH_STYLE": "true", "WALG_S3_PREFIX": "<walg_s3_prefix>", "WALG_UPLOAD_CONCURRENCY": "2", "WALG_DOWNLOAD_CONCURRENCY": "4", "WALG_UPLOAD_DISK_CONCURRENCY": "2", "WALG_DELTA_MAX_STEPS": "7", "WALG_COMPRESSION_METHOD": "lz4" } EOF'Здесь:
-
<path_to_postgresql>— путь до корневой директории PostgreSQL, например,/var/lib/pgsql/. -
<pgdata>— путь до директории с данными PostgreSQL (PGDATA), например,/var/lib/pgsql/16/data/. -
<pghost>— имя хоста сервера базы данных для подключения. Например,/var/run/postgresql, если подключение происходит через UNIX-сокет. -
<access_key>— идентификатор ключа доступа к S3-совместимому хранилищу. -
<secret_key>— секретный ключ доступа к S3-совместимому хранилищу. -
<aws_region>— код региона, в котором развернуты и выполняются ваши сервисы и функции AWS, например,ru-central1-a. -
<aws_endpoint>— URL-адрес для подключения к S3-совместимому хранилищу, например,http://minio:9000. -
<walg_s3_prefix>— путь до хранилища, в котором будут храниться резервные копии, например,s3://backups/postgresql/wal.
-
-
Установите права доступа к файлу
.walg.json, выполнив команды:chmod 600 /<path_to_postgresql>/.walg.json chown postgres:postgres /<path_to_postgresql>/.walg.jsonЗдесь:
-
<path_to_postgresql>— путь до корневой директории PostgreSQL, например,/var/lib/pgsql/.
-
Настройка файла pg_hba.conf
Файл конфигурации pg_hba.conf позволяет управлять доступом к серверу баз данных.
Чтобы настроить файл pg_hba.conf:
-
Откройте для редактирования файл конфигурации
pg_hba.conf.Вы можете узнать расположение файла
pg_hba.conf, выполнив SQL-запрос:SHOW hba_file; -
Вставьте в файл
pg_hba.confследующие строки:local replication backup_user trust host replication backup_user 127.0.0.1/32 md5 host replication backup_user ::1/128 md5
Перезапуск PostgreSQL и проверка настроек
Для применения всех внесенных изменений необходимо перезапустить PostgreSQL. Чтобы это сделать:
-
Перезагрузите конфигурацию менеджера системы, выполнив команду:
sudo systemctl daemon-reload -
Выполните команду перезапуска PostgreSQL:
sudo systemctl restart <postgresql>Здесь:
-
<postgresql>— название сервиса postgresql, напримерpostgresqlилиpostgresql-16.
Чтобы получить название сервиса, выполните следующую команду:
systemctl list-units | grep postgres -
-
Проверьте, что настройки файла конфигурации
postgresql.confвыставлены корректно, с помощью команды:sudo -u postgres psql -c "SELECT name, setting FROM pg_settings WHERE name IN ('wal_level', 'max_wal_senders', 'archive_mode', 'archive_command');" -
Проверьте, что WAL-архивирование работает корректно, с помощью команды:
sudo -u postgres psql -c "SELECT archived_count, failed_count FROM pg_stat_archiver;"После выполнения команды подождите количество секунд, которое вы указали в параметре
archive_timeoutранее.
Подготовка директории для хранения логов
Чтобы подготовить директорию для хранения логов:
-
Создайте директорию
pgsql, выполнив команду:mkdir -p /var/log/pgsql -
Установите права доступа к директории
pgsql, выполнив команды:chown postgres:postgres /var/log/pgsql chmod 750 /var/log/pgsql
Мониторинг объема директории с WAL-файлами
Для мониторинга объема директории с WAL-файлами доступны следующие команды:
-
Вывод размера директории
pg_wal:du -sh /<path_to_pgdata>/pg_wal/Здесь:
-
<path_to_pgdata>— путь до директории с данными PostgreSQL (PGDATA), например,/var/lib/pgsql/16/data/.
-
-
Вывод количества WAL-файлов, ожидающих архивации:
ls -la /<path_to_pgdata>/pg_wal/archive_status/*.ready 2>/dev/null | wc -lЗдесь:
-
<path_to_pgdata>— путь до директории с данными PostgreSQL (PGDATA), например,/var/lib/pgsql/16/data/.
-
-
Вывод статистики WAL-архиватора:
sudo -u postgres psql -c "SELECT * FROM pg_stat_archiver;"Интерпретация полей
pg_stat_archiver-
archived_count— количество успешно архивированных WAL-файлов с момента последнего сбора статистики. -
failed_count— количество неудачных попыток архивации. -
last_archived_wal— имя последнего успешно архивированного WAL-файла. -
last_archived_time— время завершения последней успешной архивации. -
last_failed_wal— имя WAL-файла, при архивации которого произошла последняя ошибка. -
last_failed_time— время последней ошибки. -
stats_reset— время последнего сброса статистики.
Количество неудачных попыток архивации (
failed_count) больше нуля приемлемо при кратковременных сбоях S3-совместимого хранилища. PostgreSQL автоматически перезапускает процесс WAL-архивации.Сценарии, при которых необходимо обратить внимание:
-
количество неудачных попыток архивации (
failed_count) постоянно растет; -
с последней ошибки архивации (
last_failed_time) прошло немного времени и количество успешно архивированных WAL-файлов (archived_count) не увеличивается.
-
Была ли полезна эта страница?