Докер для работы с бэкапами основанными на pg_probackup утилите
940
Докер для работы с бэкапами основанными на 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 Переменные окружения контейнера
Переменные влияющие на работу скриптов по бэкапам:
| Name | Default value | Description |
|---|---|---|
| BACKUP_MODE | delta | Режим инкрементального бэкапа. Альтернативное значение page. Также можно задать значение full чтобы принудительно создать полный бэкап |
| BACKUP_PATH | /mnt/pgbak | Каталог используемый утилитой pg_probackup для хранения всех бэкапов |
| BACKUP_THREADS | 4 | На сколько потоков можно параллелить бэкап/рестор процесс |
| BACKUP_STREAM | yes | yes - создавать автономные резервные копии. no - создавать резервные копии для которых обязательно нужны WAL файлы. |
Переменные для отправки писем:
| Name | Default value | Description |
|---|---|---|
| EMAILTO | На какой адрес отправлять почтовые сообщения | |
| EMAIL_SERVER | Имя почтового сервера для отправки писем | |
| EMAIL_HOSTNAME | noreplay@.ru | имя отправителя писем |
| EMAIL_SEND | yes | Отправку писем можно отменить указав no |
Если нет возможности подключиться к БД postgres под Unix cокет, то можно использовать эти переменные с данными по подключению к БД:
| Name | Default value | Description |
|---|---|---|
| PGUSER | postgres | Имя пользователя для подключения |
| PGHOST | Имя хоста для подключения | |
| PGPASSWORD | Определяет пароль пользователя PGUSER. | |
| PGPORT | 5432 | Номер порта |
Контейнер ожидает следующие примапленные каталоги:
| Name | Description |
|---|---|
| /var/lib/postgresql/data | каталог с данными кластера |
| /mnt/pgbak | каталог для бэкапов кластера |
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"
Для запуска 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"
Для запуска 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"
Такие управляющие файлы рекомендуется запускать командами (backup_start.sh):
#!/bin/bash
clear
docker-compose -f "backup-service.yml" up --build "$@"
Content type
Image
Digest
sha256:233f2fafd…
Size
50 MB
Last updated
over 2 years ago
docker pull grufos/pgprobackup