У меня система состоит из нескольких борг-серверов для хранения бэкапов, набора скриптов, а так-же их мониторинга на Zabbix. Под катком реализовано: легкий деплой конфигурации на бэкапируемую систему, Zabbix-мониторинг с проверкой целостности, унификация процесса бекапа, защищенность бекапа от удаления.
Система на базе BORG помогает решить некоторые из них, а именно: Все остальное решается так: Подключение системы к бэкапам – для этого на борг-сервере написан скрипт автоматического деплоя. Первым параметром ему передается имя бэкапируемого сервера, все остальное он делает сам – загружает на бэкапируемый сервер бинарник борга, создает там для авторизации SSH ключ, загружает туда скрипт бэкапа, ставит его на крон, создает удаленный репозиторий борга. База при этом бэкапится с помощью XtraBackup, соответственно необходимо чтобы от root не было проблем с подключением XtraBackup к базе, а сам бекап базы зажимается в qpress и сохраняется в /mnt/db_bkp. По завершению заливки на борг-сервер, бекап базы стирается со стороны клиента. Этот-же скрипт прописывает созданный ключ на борг-сервере и разрешает ему только операции добавления с помощью магической записи в файле ключей. Короче – полная автоматизация, нажал и готово! Надо заметить, что на крон задачи бэкапа ставятся с некоторым гистерезисом, я применяю рандомное окно запуска на 2 часа, с 00:00 по 02:00, чтобы предотвратить перегрузку канала и в целом всего борг-сервера, в ситуации когда десятки серверов клиентов одновременно начинают загрузку бэкапов. Естественно шелл этому ново-созданному пользователю становится недоступен, поскольку в файле ключа прописывается команда запуска: Это обеспечивает базовую защиту бэкапов от старания. Конечно есть вероятность что бэкапируемый сервер будет взломан и злоумышленник выполнит prune репозитория, но с ключем –append-only на борг-сервере данные не смогут быть удалены, а индексы можно легко перестроить, как это сделать описано тут. Единственное место где можно удалить бекап это изнутри самого борг-сервера, куда имеет доступ только админ. Как дополнительная его защита, при ротации бэкапов через prune со стороны борг-сервера, установлена проверка на количество бэкапов в архиве. В плане защиты, так-же не стоит оставлять на борг-сервере какие-бы то ни было открытые порты кроме 22, а парольный вход должен быть строго запрещен на уровне SSH, авторизация по ключам – наше все! Ну и авто-секьюрити-апдейт всей системы через cron-apt тоже весьма позитивная мысль. Контроль за целостностью архивов и их мониторинг осуществляется конечно-же Zabbix’ом. Для этого на каждом борг-сервере в кроне прописан скрипт. Предполагается, что за ночь все бекапы гарантированно успевают загрузится, и в 10:00 он начинает проверку бэкапов: Результат сохраняется в JSON. Потом в дело вступает Zabbix темплейт с LLD, он считывает по SSH JSON файлы, парсит из них все эти данные, а так-же получает информацию о свободном месте. В нем есть ряд триггеров: Как результат, критичные проблемы проверяются 1 раз в сутки, и если “что-то пошло не так”, админ информируется: Если это дополнить еще и графаной, то за состоянием бэкапов можно наблюдать на “гламурных” графиках, типа таких: Ну… да… мониторинг размера базы я добавил недавно… Естественно для всего этого требуется напильник, чтобы заточить это “под себя”, это лишь мой пример реализации, но я надеюсь он будет полезен кому-то. Когда бэкапов много, и они большие, применять обычные диски на борг-сервере(ах) я не рекомендую, слишком много дисковых операций, обычные винты захлебываются. Тут хорошо подходят только SSD. Пренебрегать выделением памяти и ядер борг-серверу тоже не стоит, но их сложно предугадать, я их выделяю по результату прогона тестов.
command="/usr/bin/borg serve --append-only --restrict-to-path /home/имя_хоста/имя_хоста",restrict
Вся процедура деплоя перенисана на Ansible, изменения можно посмотреть в основной ветке https://github.com/shodanx/borg_system