Sign inSign up

grufos/pgprobackup

By grufos

Updated over 2 years ago

Докер для работы с бэкапами основанными на pg_probackup утилите

Image
0

940

grufos/pgprobackup repository overview

docker-pgprobackup

Докер для работы с бэкапами основанными на pg_probackup утилите

Докер основан на образе debian https://hub.docker.com/_/debian

Для удобства работы с бэкапами создан отдельный контейнер содержащий внутри 3 sh файла.

backup.sh - создаёт новый бэкап (основная функция контейнера)

show.sh - показывает какие бэкапы есть.

check_cluster.sh - выполняет проверку кластера на возможные ошибки в структуре БД

Для запуска дополнительных скриптов можно использовать команды вида:

$ docker run --rm -v "/mnt/pgbak2/:/mnt/pgbak/" --entrypoint=show.sh temp_pgprobackup_backup

но, гораздо удобнее использовать docker-compose. Примеры файлов чуть ниже...

Каждый запуск контейнера запускает создание очередного бэкапа. В субботу (6-й день недели) формируется всегда полный бэкап. В другие дни недели, формируется инкрементальный бэкап. Через переменные окружения можно изменить тип инкрементального бэкапа (delta или page) и тип полного бэкапа (streem или archive). По умолчанию каталог бэкапов инициализируется с параметрами:

# Retention parameters
retention-window = 7
# Compression parameters
compress-algorithm = zlib
compress-level = 6

Вы можете их потом изменить на любые значения.

После создания бэкапа по умолчанию отправляется письмо с результатами на указанный в переменных почтовый адрес (определяется переменной EMAIL_SEND).

При вызове скрипта show.sh результат выводится на экран с возможностью отправки его на почту (определяется переменной EMAIL_SEND).

Если не нужно отправлять этот результат на почту, нужно обязательно задать переменную EMAIL_SEND=no Переменные окружения контейнера

Переменные влияющие на работу скриптов по бэкапам:

NameDefault valueDescription
BACKUP_MODEdeltaРежим инкрементального бэкапа. Альтернативное значение page. Также можно задать значение full чтобы принудительно создать полный бэкап
BACKUP_PATH/mnt/pgbakКаталог используемый утилитой pg_probackup для хранения всех бэкапов
BACKUP_THREADS4На сколько потоков можно параллелить бэкап/рестор процесс
BACKUP_STREAMyesyes - создавать автономные резервные копии. no - создавать резервные копии для которых обязательно нужны WAL файлы.

Переменные для отправки писем:

NameDefault valueDescription
EMAILTOНа какой адрес отправлять почтовые сообщения
EMAIL_SERVERИмя почтового сервера для отправки писем
EMAIL_HOSTNAMEnoreplay@.ruимя отправителя писем
EMAIL_SENDyesОтправку писем можно отменить указав no

Если нет возможности подключиться к БД postgres под Unix cокет, то можно использовать эти переменные с данными по подключению к БД:

NameDefault valueDescription
PGUSERpostgresИмя пользователя для подключения
PGHOSTИмя хоста для подключения
PGPASSWORDОпределяет пароль пользователя PGUSER.
PGPORT5432Номер порта

Контейнер ожидает следующие примапленные каталоги:

NameDescription
/var/lib/postgresql/dataкаталог с данными кластера
/mnt/pgbakкаталог для бэкапов кластера

Пример docker-compose файла backup-service.yml

version: '3.5'
services:
 
  pgprobackup_backup:
    build:
      context: ./docker-pgprobackup
      dockerfile: Dockerfile
 
    volumes:
      - "/var/lib/pgsql/13_1/data:/var/lib/postgresql/data"
      - "/mnt/pgbak2/:/mnt/pgbak/"
 
    environment:
      TZ: "Europe/Moscow"
#      PGPASSWORD: "qweasdzxc"
#      PGHOST: "10.10.2.139"
#      PGPORT: "5432"
#      PGUSER: "postgres"
      EMAILTO: "DBA-PostgreSQL@my_name.ru"
      EMAIL_SERVER: "mail.name.ru"
      EMAIL_HOSTNAME: "noreplay@my_host.ru"
      BACKUP_THREADS: "4"
      BACKUP_MODE: "page"
      BACKUP_STREAM: "yes"

Пример docker-compose файла backup-service-show.yml

Для запуска show.sh скрипта в этом контейнере рекомендуется использовать отдельный compose файл show_backup-service.yml:

version: '3.5'
services:
 
  pgprobackup_show:
    build:
      context: ./docker-pgprobackup
      dockerfile: Dockerfile
 
    volumes:
      - "/mnt/pgbak2/:/mnt/pgbak/"
 
    environment:
      TZ: "Europe/Moscow"
      EMAILTO: "DBA-PostgreSQL@my_name.ru"
      EMAIL_SERVER: "mail.name.ru"
      EMAIL_HOSTNAME: "noreplay@my_host.ru"
      EMAIL_SEND: "no"
 
    entrypoint: "/usr/local/bin/show.sh"

Пример docker-compose файла backup-service-checkcluster.yml

Для запуска check_cluster.sh скрипта в этом контейнере рекомендуется использовать отдельный compose файл backup-service-checkcluster.yml:

version: '3.5'
services:
 
  pgprobackup_checkcluster:
    build:
      context: ./docker-pgprobackup
      dockerfile: Dockerfile
 
    volumes:
      - "/var/lib/pgsql/13_1/data:/var/lib/postgresql/data"
      - "/mnt/pgbak2/:/mnt/pgbak/"
 
    environment:
      TZ: "Europe/Moscow"
#      PGPASSWORD: "qweasdzxc"
#      PGHOST: "10.10.2.139"
#      PGPORT: "5432"
#      PGUSER: "postgres"
      EMAILTO: "DBA-PostgreSQL@my_name.ru"
      EMAIL_SERVER: "mail.name.ru"
      EMAIL_HOSTNAME: "noreplay@my_host.ru"
      BACKUP_THREADS: "4"
      BACKUP_MODE: "page"
      BACKUP_STREAM: "yes"
 
    entrypoint: "/usr/local/bin/check_cluster.sh"

Старт docker-compose

Такие управляющие файлы рекомендуется запускать командами (backup_start.sh):

#!/bin/bash
clear
docker-compose -f "backup-service.yml" up --build "$@"

Tag summary

Content type

Image

Digest

sha256:233f2fafd

Size

50 MB

Last updated

over 2 years ago

docker pull grufos/pgprobackup