barman — backup postgresql

barman утилита позволяющая делать:
* обычный бэкап
* инкрементальный бэкап
* бэкап с standby сервера
* восстановление из бэкапа

Документация: http://docs.pgbarman.org

Schema description
Для такой схемы понадобится 3 сервера:
* Master — основной сервер
* Standby — реплика с master, hot standby
* Backup — сервер на котором будут находится бэкапы

Схема может быть полезной в том случае если и master и standby находятся в одном ДЦ и необходимо сделать независимый бэкап в другой ДЦ.
В случае если standby уже находится в другом ДЦ бэкап может запускаться локально на standby сервере.
Если же репликации совсем нет, можно бэкапить master сервер напрямую в бэкап сервера.

Во всех этих случаях бэкап тоже удобно делать с помощью barman.

Настройка схемы master->standby->backup

Мы рассмотрим схему при которой бэкап делается с standby сервера, wal логи при такой схеме копируются с master сервера.
Настройка репликации здесь не рассматривается.

Master:
1) Редактируем postgresql.conf

archive_mode = on
archive_command = '/var/lib/postgresql/bin/archive.sh %f %p'

2) Создаем скрипт /var/lib/postgresql/bin/archive.sh

#!/bin/bash

F=$1
P=$2

/usr/bin/rsync -az $P barman@[BACKUP_IP]:/var/lib/barman/main/incoming/$F

Standby
1) в ~postgres/.ssh/authorized_keys
Добавляем ключи от barman@backup

2) В _pg_hba.conf_ добавляем права коннекта под пользователем _postgres_ с сервера _Backup_

host    all             postgres        [BACKUP_IP]/32       md5

Backup
1) в ~barman/.ssh/authorized_keys
Добавляем ключи от postgresql@master

2) Setup

Пакеты: http://www.postgresql.org/download/linux/ubuntu/

aptitude install barman

3) Создаем конфигурацию:
/etc/barman.conf

[barman]
barman_home = /var/lib/barman
barman_user = barman
log_file = /var/log/barman/barman.log
compression = gzip
configuration_files_directory = /etc/barman.d
minimum_redundancy = 1
backup_options = concurrent_backup

/etc/barman.d/main.conf

[main]
description =  "Main PostgreSQL Database"
ssh_command = ssh postgres@STANDBY_IP
conninfo = host=STANDBY_IP port=5432 user=postgres password=akjlsjaldjlasJklajslkCUb
minimum_redundancy = 1
retention_policy = REDUNDANCY 3

Добавляем в cron:

10 01 * * *     /usr/bin/barman backup main

Пояснения к конфигурационному файлу
1) minimum_redundancy — не даст удалить старые бэкапы меньше этого значения, те при значении 1, гарантирует наличие хотя бы 1 полного бэкапа. При попытке удалить последний бэкап командой

 backup delete main _ID_ 

вернет ошибку и бэкап не будет удален.

2) retention_policy = REDUNDANCY 3
retention_policy — может быть как просто числом бэкапов которое хранится так и «окном восстановления» — в этом случае гарантируется восстановление в пределах определенного времени.
В данном случае _REDUNDANCY 3_ — будет сохранять 3-и полных бэкапа. А команда

barman cron

будет удалять старые бэкапы.

3) Тк мы делаем бэкап с standby сервера, в параметре conninfo — прописывает строку подключения к _standby_ серверу а не к _master_

Таким образом у нас получается следующая схема:
* Master во время архивирования wal отправляет их на backup сервер.
* barman cron на backup сервере регулярно перемещает wal логи в нужные каталоги для будущего _PITR_ восстановления. И удаляет старые.
* barman backup — делает бэкап с standby сервера.

Recovery

Остановим postgresql и восстановим бэкап напрямую в каталог где его ждет postgres

su - barman
barman recover main 20150527T120135 /var/lib/postgresql/9.3/main

Каталог куда будем восстанавливать должен принадлежать пользователю barman, даже если востановление мы запускаем от root’а.

Вывод на экран будет примерно такой:

Starting local restore for server main using backup 20150527T120135
Destination directory: /var/lib/postgresql/9.3/main
Copying the base backup.
Copying required wal segments.
Generating archive status files
Disabling dangerous settings in destination directory.

Your PostgreSQL server has been successfully prepared for recovery!

Please review network and archive related settings in the PostgreSQL
configuration file before starting the just recovered instance.

WARNING: Before starting up the recovered PostgreSQL server,
please review also the settings of the following configuration
options as they might interfere with your current recovery attempt:

    data_directory = '/var/lib/postgresql/9.3/main'             # use data in another directory
    external_pid_file = '/var/run/postgresql/9.3-main.pid'                      # write an extra PID file
    hba_file = '/etc/postgresql/9.3/main/pg_hba.conf'   # host-based authentication file
    ident_file = '/etc/postgresql/9.3/main/pg_ident.conf'       # ident configuration file
    ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'              # (change requires restart)
    ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'             # (change requires restart)

Recovery completed successful.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *