Пост

Разворачиваем PostgreSQL кластер с помощью autobase. Часть 2

Настраиваем бэкапы кластера в s3 хранилище с помощью pgbackrest

Текущая версия autobase в ui консоли не поддерживает управление резервным копированием, поэтому настроим эту опцию через предлагаемые конфигурации.

📦 Подготавливаем s3 хранилище

🔹 Ставим MinIO s3 локально или арендуем хранилище с большим диском у облачных провайдеров. Для поддержки https протокола подключим самоподписанный сертификат.

1
2
3
4
5
6
7
8
9
10
11
docker run \
   -p 9000:9000 \
   -p 9001:9001 \
   --name minio \
   -v ~/autobase/minio/data:/data \
   -v ~/autobase/minio/certs:/certs \
   -e "MINIO_ROOT_USER=demouser" \
   -e "MINIO_ROOT_PASSWORD=demouser" \
   -e "MINIO_SCHEME=https" \
   -e "SSL_CERT_FILE=/certs/public.crt" \
   quay.io/minio/minio server /data --console-address ":9001" /data --certs-dir /certs

🔹 Идем в веб панель на порт 9001

  • Создаем bucket autobase для хранения резервных копий.
  • Создаем Access Key.
  • В настройках прописываем регион хранилища.

⚒️ Настраиваем и пересобираем образ automation

🔹 Клонируем ветку актуального релиза autobase

1
git clone --branch 2.1.0 --single-branch https://github.com/vitabaks/autobase.git

🔹 Настраиваем pgbackrest под s3

Для включения бэкапов нужно внести корректировки в конфигурацию вспомогательного образа automation, который ранее подтягивался из dockerhub уже в готовом виде.

1
vi ./autobase/automation/vars/main.yml

❗️❗️ pgbackrest требует работу через https. Регион хранилища также должен быть задан.

Находим секцию pgbackrest и заменяем значения на заготовленную конфигурацию для бэкапов в MinIO S3 из документации. Не забываем внести свои значения параметров доступа к развернутому ранее MinIO.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# pgBackRest
pgbackrest_install: true  # or 'true' to install and configure backups using pgBackRest
pgbackrest_install_from_pgdg_repo: true  # or 'false'
pgbackrest_stanza: ""  # specify your --stanza
pgbackrest_repo_type: "s3"  # or "s3", "gcs", "azure"
pgbackrest_repo_host: ""  # dedicated repository host (optional)
pgbackrest_repo_user: ""  # if "repo_host" is set (optional)
pgbackrest_conf_file: "/etc/pgbackrest/pgbackrest.conf"
# config https://pgbackrest.org/configuration.html
pgbackrest_conf:
  global:  # [global] section
    - { option: "log-level-file", value: "detail" }
    - { option: "log-path", value: "/var/log/pgbackrest" }
    - { option: "repo1-type", value: "" }
    - { option: "repo1-path", value: "/pgbackrest" }  # logical path in bucket
    - { option: "repo1-s3-endpoint", value: "https://192.168.1.135:9001" }  # change this value
    - { option: "repo1-s3-key", value: "GzYy8dfBuzsk6MThj2RO" }  # change this value
    - { option: "repo1-s3-key-secret", value: "GzcS6Dot3vIkwQruXxPL3a9tV1BT6fDRIS4vonwn" }  # change this value
    - { option: "repo1-s3-bucket", value: "autobase" }  # change this value
    - { option: "repo1-s3-region", value: "desoft-local-region" }  # change this value
    - { option: "repo1-s3-uri-style", value: "path" }
    - { option: "repo1-s3-verify-tls", value: "n" }
    - { option: "repo1-retention-full", value: "4" }
    - { option: "repo1-retention-archive", value: "4" }
    - { option: "archive-check", value: "y" }
    - { option: "archive-copy", value: "n" }
    - { option: "archive-async", value: "y" }
    - { option: "archive-get-queue-max", value: "1GiB" }
#    - { option: "archive-push-queue-max", value: "100GiB" }
    - { option: "spool-path", value: "/var/spool/pgbackrest" }
    - { option: "repo1-bundle", value: "y" }
    - { option: "repo1-block", value: "y" }
    - { option: "start-fast", value: "y" }
    - { option: "stop-auto", value: "y" }
    - { option: "link-all", value: "y" }
    - { option: "resume", value: "n" }
    - { option: "backup-standby", value: "y" }  # when set to 'y', standby servers will be automatically added to >
    - { option: "process-max", value: "2" }

Устанавливаем расписание бэкапов в секции pgbackrest_cron_jobs (по умолчанию еженедельные полные бэкапы).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# By default, the cron jobs is created on the database server.
# If 'repo_host' is defined, the cron jobs will be created on the pgbackrest server.
pgbackrest_cron_jobs:
  - name: "pgBackRest: Full Backup"
    file: "/etc/cron.d/pgbackrest-"
    user: "postgres"
    minute: "00"
    hour: "3"
    day: "*"
    month: "*"
    weekday: "0"
    job: "if [ $(psql -tAXc 'select pg_is_in_recovery()') = 'f' ]; then pgbackrest --stanza= --type=full backup; fi"
  - name: "pgBackRest: Diff Backup"
    file: "/etc/cron.d/pgbackrest-"
    user: "postgres"
    minute: "00"
    hour: "3"
    day: "*"
    month: "*"
    weekday: "1-6"
    job: "if [ $(psql -tAXc 'select pg_is_in_recovery()') = 'f' ]; then pgbackrest --stanza= --type=diff backup; fi"

Указываем pgbackrest как метод создания реплик patroni.

1
2
3
4
5
patroni_create_replica_methods:
  - pgbackrest
#  - wal_g
#  - pg_probackup
#  - basebackup

🔹 Собираем локальный образ automation

1
2
cd ./autobase
docker build -t automation-pgrest:latest -f ./automation/Dockerfile .

🚀 Запускаем консоль autobase

🔹 Указываем в переменной окружения консоли PG_CONSOLE_DOCKER_IMAGE собранный выше локальный образ automation и запускаем.

1
2
3
4
5
6
7
8
9
10
11
docker run -d --name autobase-pgrest-console \
  --publish 80:80 \
  --publish 8080:8080 \
  --env PG_CONSOLE_API_URL=http://192.168.1.135:8080/api/v1 \
  --env PG_CONSOLE_AUTHORIZATION_TOKEN=secret_token \
  --env PG_CONSOLE_DOCKER_IMAGE=automation-pgrest:latest \
  --volume console_postgres:/var/lib/postgresql \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume /tmp/ansible:/tmp/ansible \
  --restart=unless-stopped \
  autobase/console:latest

🔹 Создаем и разворачиваем кластер согласно инструкции из первой части.

pgbackrest устанавливается как на основной хост кластера, так и на реплики. Для проверки и отладки работы программы можно отслеживать логи по пути, указанному в конфигурационном файле main.yml собственного образа automation, { option: "log-path", value: "/var/log/pgbackrest" }.

📌 Согласно информации от разработчика, ведется работа над Expert mode, который раскроет дополнительные опции в веб интерфейсе autobase, включая управление резервным копированием. Ожидаем появления нового режима в будущих релизах.

Больше полезной информации в Telegram-канале