Настройка PostgreSQL для работы с Backup Wrapper

Backup Wrapper использует утилиту wal-g для создания резервных копий баз данных PostgreSQL. Для корректной работы сервиса предварительно необходимо настроить базу данных.

Утилита wal-g устанавливается вместе с Backup Wrapper. Подробности приведены в разделе Установка и настройка Backup Wrapper.

Настройка базы данных PostgreSQL состоит из следующих этапов:

Все действия необходимо производить на физическом сервере или виртуальной машине, на которых развернута база данных PostgreSQL.

Создание пользователя для работы с резервными копиями

Чтобы создать пользователя PostgreSQL:

  1. Подключитесь к PostgreSQL как суперпользователь, выполнив команду:

    psql -U postgres
  2. Создайте пользователя для работы с резервными копиями баз данных и выдайте ему необходимые права, выполнив SQL-запросы:

    CREATE USER backup_user WITH PASSWORD '<password>' REPLICATION;
    GRANT pg_read_all_data TO backup_user;

    Здесь:

    • <password> — пароль нового пользователя.

Настройка файла конфигурации postgresql.conf

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

Чтобы настроить файл конфигурации:

  1. Откройте файл postgresql.conf.

    Вы можете узнать расположение файла postgresql.conf, выполнив SQL-запрос:

    SHOW config_file
  2. Добавьте в файл следующие строки в зависимости от сценария работы:

    • 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-совместимому хранилищу:

  1. Создайте файл конфигурации .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.

  2. Установите права доступа к файлу .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:

  1. Откройте для редактирования файл конфигурации pg_hba.conf.

    Вы можете узнать расположение файла pg_hba.conf, выполнив SQL-запрос:

    SHOW hba_file;
  2. Вставьте в файл 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. Чтобы это сделать:

  1. Перезагрузите конфигурацию менеджера системы, выполнив команду:

    sudo systemctl daemon-reload
  2. Выполните команду перезапуска PostgreSQL:

    sudo systemctl restart <postgresql>

    Здесь:

    • <postgresql> — название сервиса postgresql, например postgresql или postgresql-16.

    Чтобы получить название сервиса, выполните следующую команду:

    systemctl list-units | grep postgres
  3. Проверьте, что настройки файла конфигурации 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');"
  4. Проверьте, что WAL-архивирование работает корректно, с помощью команды:

    sudo -u postgres psql -c "SELECT archived_count, failed_count FROM pg_stat_archiver;"

    После выполнения команды подождите количество секунд, которое вы указали в параметре archive_timeout ранее.

Подготовка директории для хранения логов

Чтобы подготовить директорию для хранения логов:

  1. Создайте директорию pgsql, выполнив команду:

    mkdir -p /var/log/pgsql
  2. Установите права доступа к директории 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) не увеличивается.

Была ли полезна эта страница?

Обратная связь