melmus.github.io

DevOps Customer

View on GitHub

Borg Backup

BorgBackup (сокращение от Borg) - это программа резервного копирования с дедупликацией. Опционально, он поддерживает сжатие и аутентифицированное шифрование.

Основная цель Borg - предоставить эффективный и безопасный способ резервного копирования данных. Используемая техника дедупликации данных делает Borg пригодным для ежедневного резервного копирования, поскольку сохраняются только изменения. Метод аутентифицированного шифрования позволяет сохранять бэкапы даже в недоверенных хранилищах.

Отличительный особенности Borg

Установка

Необходимо установить Borg на клиент и на сервер бэкапов

wget https://github.com/borgbackup/borg/releases/download/1.1.10/borg-linux64  -O /usr/bin/borg
chmod +x /usr/bin/borg

На сервере бэкапов создать пользователя borg:

useradd -m borg

Настроить подключение к серверу бэкапов по ssh-ключу (возможно подключение по логину/паролю в статье это не рассмотрено):

На клиенте выполнить:

cd /root/.ssh
ssh-keygen -t rsa -b 4096

На сервере бэкапов:

mkdir ~borg/.ssh
echo 'command="/usr/bin/borg serve" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNdaDfqUUf/XmSVWfF7PfjGlbKW00MJ63zal/E/mxm+vJIJRBw7GZofe1PeTpKcEUTiBBEsW9XUmTctnWE6p21gU/JNU0jITLx+vg4IlVP62cac71tkx1VJFMYQN6EulT0alYxagNwEs7s5cBlykeKk/QmteOOclzx684t9d6BhMvFE9w9r+c76aVBIdbEyrkloiYd+vzt79nRkFE4CoxkpvptMgrAgbx563fRmNSPH8H5dEad44/Xb5uARiYhdlIl45QuNSpAdcOadp46ftDeQCGLc4CgjMxessam+9ujYcUCjhFDNOoEa4YxVhXF9Tcv8Ttxolece6y+IQM7fbDR' >> ~borg/.ssh/authorized_keys
chown -R borg:borg ~borg/.ssh

Публичный ключ, использовать id_rsa.pub, сгенерированный на предыдущем шаге.

На сервере создать директорию храниения бэкапов:

mkdir -p /data/borg
chown -R borg:borg /data/borg

Работа с Borg

На клиенте запустить инициализацию хранилища Borg:

borg init -e none borg@backup_hostname:/data/borg/MyBorgRepo

Репозиторий MyBorgRepo Borg создаст автоматически при инициализации.

Создание бэкапа

borg create --stats --list borg@backup_hostname:/data/borg/MyBorgRepo::"MyFirstBackup-{now:%Y-%m-%d_%H:%M:%S}" /data/postgresql/pgsql

Просмотр списка бэкапов:

borg list borg@backup_hostname:/data/borg/MyBorgRepo


MyFirstBackup-2019-07-10_17:59:24    Wed, 2019-07-10 17:59:25 [c64ea991b8994552d856e8ac2560651d6ea69f623a12492ca6d0642dc3f17fa3]
MyFirstBackup-2019-07-10_18:27:52    Wed, 2019-07-10 18:27:53 [52368e51224d5f4d1370fc6fb250861f48c7ad1eff304b6dd2cea24b6663bbbf]
MyFirstBackup-2019-07-11_17:12:45    Thu, 2019-07-11 17:12:46 [e8f1f92f62326d3040013d57595815f98cfb344a436f45b0289f7334840c0118]

Восстановление из бэкапа

rm -rf /data/postgresql/pgsql 
cd /
borg extract borg@10.10.10.125:/data/borg/pg_backup::MyFirstBackup-2019-07-11_17:12:45

Директорию необходимо удалить т.к. Borg если видит что директория не пуста, восстановит лишь недостающие файлы, в случае восстановления БД состав файлов сохраняется и Borg не восстановит ничего.

Очистка бэкапов:

borg prune -v --list borg@backup_hostname:/data/borg/MyBorgRepo --keep-daily=7 --keep-weekly=4 --keep-monthly=6

Keep 7 daily backups, 4 weekly backups, and 6 monthly ones Borg оставляет 7 ежедневных бэкапов, 4 еженедельных, 6 ежемесячных

Порядок бэкапирования кластера Patroni

Снятие бэкапа

Бэкапы снимаются обязательно с ведомой ноды

Восстановление из бэкапа

Хотелось бы все сервисы бекапировать следующим видом (в процессе разработки):

logpath mkdir /var/log/borgbackup/

borg init -e none borg@10.10.10.125:/data/borg/Gitlab/ borg create
–stats
–list
borg@10.10.10.125:/data/borg/Gitlab::”$HOST-{now:%Y-%m-%d_%H:%M:%S}” /data/gitlab*
2» /var/log/borgbackup/$TIMESTAMP.log ||


### Восстановление

```bash
borg list borg@:/data/borg/
cd /
borg extract borg@:/data/borg/::