Задание
Для выполнения домашнего задания используйте методичку https://docs.google.com/document/d/1L0VtVCn2tXmC0Pirlfhnr6rEpOANbP-C/edit?usp=share_link&ouid=104106368295333385634&rtpof=true&sd=true
-
Настроить стенд Vagrant с двумя виртуальными машинами: backup_server и client.
-
Настроить удаленный бекап каталога /etc c сервера client при помощи borgbackup. Резервные копии должны соответствовать следующим критериям:
- директория для резервных копий /var/backup. Это должна быть отдельная точка монтирования. В данном случае для демонстрации размер не принципиален, достаточно будет и 2GB;
- репозиторий дле резервных копий должен быть зашифрован ключом или паролем - на ваше усмотрение;
- имя бекапа должно содержать информацию о времени снятия бекапа;
- глубина бекапа должна быть год, хранить можно по последней копии на конец месяца, кроме последних трех. Последние три месяца должны содержать копии на каждый день. Т.е. должна быть правильно настроена политика удаления старых бэкапов;
- резервная копия снимается каждые 5 минут. Такой частый запуск в целях демонстрации;
-
написан скрипт для снятия резервных копий. Скрипт запускается из соответствующей Cron джобы, либо systemd timer-а - на ваше усмотрение;
-
настроено логирование процесса бекапа. Для упрощения можно весь вывод перенаправлять в logger с соответствующим тегом. Если настроите не в syslog, то обязательна ротация логов.
-
Запустите стенд на 30 минут.
-
Убедитесь что резервные копии снимаются.
-
Остановите бекап, удалите (или переместите) директорию /etc и восстановите ее из бекапа.
Для сдачи домашнего задания ожидаем настроенные стенд, логи процесса бэкапа и описание процесса восстановления.
Формат сдачи: Vagrantfile + ansible
Решение Стенд развёртывается стандартно:
vagrant up
ansible-playbook playbook.yml
По таймеру systemd раз в 5 минут запускается сервис, который:
- делает свежую копию каталога /etc
- удаляет все бэкапы, кроме:
- 90 последних ежедневных бэкапов (1 последний бэкап за сутки)
- 9 ежемесячных бэкапов.
Поскольку политика borg prune применяется от секундных к ежегодным бэкапам, ранее учтённые бэкапы в расчёт очередного фильтра не берутся. Таким образом, эта политика позволяет хранить бэкап за последние 90 дней + бэкап за 91 день назад + ещё 8 бэкапов, по 1 на конец месяца. Логирование производится в стандартный journald, просмотреть журнал можно:
journalctl -u borg-backup.service
Журнал дополнительно выгружен в файл
Для проверки восстановления предположим, что по ошибке администратора был удалён каталог etc, при этом администратор успел заметить ошибку до отключения, и у него осталась активная сессия ssh на клиенте.
[root@client ~]# du -sh /etc
32M /etc
[root@client ~]# systemctl stop borg-backup.timer
[root@client ~]# rm -rf /etc 2&>/dev/null
[root@client ~]# du -sh /etc
0 /etc
Это состояние приводит centos в неработоспособное состояние из-за отсутствия большого числа конфигурационных файлов. Причём, из-за отсутствия ecdsa ключей у хоста, соединение по ssh, по которому работает borgbackup - также не работает. Для восстановления требуется:
- скопировать из бэкапа каталог /etc/ssh, а также файлы /etc/passwd, /etc/shadow в архив
- передать архив на клиент
- разархивировать архив, разместив содержимое по исходному пути.
- подключиться к серверу при помощи borgbackup, и развернуть последний бэкап.
На сервере:
[root@server ~]# borg list borg@192.168.11.102:backups
client-etc-20231002_183042 Mon, 2023-10-02 18:30:42 [d48e891952524e82a658f8505798f5d20298dbc55376e56dea1f1239550fa392]
[root@server ~]# borg mount borg@192.168.11.102:backups::client-etc-20231002_183042 /mnt
[root@server ~]# tar -czvf etc_exceprt.tar.gz /mnt/etc/ssh/* /mnt/etc/shadow /mnt/etc/passwd
cat etc_excerpt.tar.gz | base64
***вывод удалён***
Копируем вывод из base64 на клиентскую машину (например, если ssh-сессия осталась открыта - то через буфер обмена) На клиенте:
[root@client ~]# cat > etc.b64
***вставляем скопированный текст, нажимаем ctrl-d***
[root@client ~]# cat etc.b64 | base64 -d > etc.tar.gz
[root@client ~]# file etc.tar.gz
etc.tar.gz: gzip compressed data, from Unix
[root@client ~]# cd /
[root@client /]# tar -xvf ~/etc.tar.gz --strip-components=1
После этого - ssh-сессии с клиента можно будет поднять, и восстановить бэкап полностью.
[root@client /]# borg extract -v borg@192.168.11.102:backups::client-etc-20231002_183042
*** вывод удалён ***
[root@client /]# du -sh /etc
32M /etc