[cBackup] cBackup — резервное копирование конфигураций сетевого оборудования

Резервное копирование, Сетевые технологии, Системное администрирование

Лучше резервного копирования может быть только резервное копирование с контролем версий и проверкой целостности. Существует уйма программного обеспечения различного уровня платности под разные операционные системы для резервного копирования файлов, баз данных и образов, а также для управления конфигурациями серверов и ПО. А вот для работы с конфигурациями сетевого оборудования решений не так и много.

Мы создали приложение cBackup (от configuration backup) для работы с конфигурациями сетевого оборудования. Кроме непосредственно резервного копирования конфигов, можно отслеживать изменения между их версиями, что помогает локализовать источник проблемы при восстановлении после сбоев. cBackup — open source и распространяется бесплатно, включая отдельно скачиваемые шаблоны поддержки различных сетевых устройств.

Для кого?

cBackup разрабатывался админами для админов, которым не требуется тяжеловес типа NOC Project. Мы в своей работе администрируем несколько тысяч свитчей и роутеров, поэтому поддержание сетевой конфигурации в должном порядке — жизненная необходимость. Отсюда и вполне осязаемые параллели в основных принципах работы: discovery, как в системах мониторинга сетевой инфраструктуры; уже где-то виданная терминология в большинстве разделов; управление расписанием, как в crontab и так далее.

Что уже есть?

Текущая версия доступна для скачивания в виде tar.gz архива, а также в виде rpm и deb пакетов. Документация в наличии. Система изначально проектировалась под Linux, но и под Windows запустить можно, хотя официальной поддержки пока нет. После установки пакета или распаковки на подготовленный сервер, потребуется пройти установку в самой системе через веб-инсталлятор. Документация максимально подробно освещает этот процесс, поэтому в рамках материала в PR-хабе установка и эксплуатация описываться не будут. Если появятся запросы, то про техническую сторону работы и юзкейсы расскажу в отдельном материале в профильном хабе.

Если коротко описать архитектуру, то интерфейс cBackup — это веб-приложение, написанное на Yii2 фреймворке с демоном, написанном на Java 8 с использованием Spring Boot. В качестве базы данных используется MySQL, а для контроля версий используется Git. Система, обрабатывающая 1200 свитчей и роутеров, вполне комфортно себя чувствует на виртуалке с двумя ядрами и двумя гигабайтами оперативки, обрабатывая задачи по сбору конфигураций, STP и гео карт в 30 потоков. Место на жёстком диске расходуется тоже экономно — за год использования папка приложения с данными занимает 350 Мб, а база данных — 35 Мб.

cBackup бесплатен и распространяется по лицензии Affero GPL v3. Также бесплатны наши плагины, обновления и скачиваемый контент с поддержкой вендоров и устройств. На данный момент интерфейс системы поддерживает английский и русский языки. Скрытых платежей, ограничений функционала и микротранзакций нет и не планируется. Впрочем, наша команда открыта для сотрудничества по деплою, запросам на официальную поддержку для бизнеса с SLA и для корпоративной поддержки, включая индивидуальные разработки.

Реестр подсетей и оборудования, автоматический поиск новых устройств

cBackup умеет работать как по предопределённому вручную списку узлов, так и ходить по заданным подсетям, обнаруживая установленные устройства (discovery). Отдельно можно исключить адреса из любых процессов и задач. Поддержка оборудования скачивается и устанавливается из официального репозитория. Если же сервер с бэкапером находится в изолированной сети и доступа в интернет не имеет, можно закачать файлы вручную или же добавить поддержку нового оборудования самостоятельно.

Сам по себе менеджмент реестра подсетей и оборудования может показаться излишне навороченным, но поработав с разными вендорами, мы убедились, что каждый придумывает какие-то свои фишки в протоколах и процессах. И речь даже не об STP, реализация которого может отличаться, как день от ночи, а о банальной работе с командной строкой по SSH. Поэтому менеджмент инфраструктуры сильно детализирован, обеспечивая возможность создавать плагины и фабрики для отдельных моделей и/или вендоров, переопределяя взаимодействие с устройством или моделью на любом этапе.

Резервное копирование конфигураций

Непосредственно задачи по взаимодействию с узлами возложены на системный сервис, который работает в многопоточном режиме. Сервис являет собой исполняемый файл на Java и не задействует системный crontab, используя исключительно свой функционал. С ядром системы демон общается через RESTful API и, теоретически, может быть вообще вынесен на отдельный сервер, если на то возникнет необходимость. Взаимодействие с конечными устройствами оформлено в виде последовательностей команд с обработкой получаемых данных, и может осуществляться по протоколам Telnet, SSH и SNMP v1/v2.

Система контроля версий

Одной из главных целей для нас было дать возможность не только прочитать и восстановить конфиг из резервной копии в рамках disaster recovery, но и также в случае факапа с конфигурацией найти проблему. Поскольку с оборудованием работает значительное количество операторов, поиск и локализация изменений для нас были крайне важной задачей. Вообще, на Git в нашей системе возложено довольно много функций: контроль версий конфигураций, обновление системы, скачивание и обновление поддержки оборудования и вендоров.

Плагины и API

Мы убеждены, что каждая система должна делать своё дело. Поэтому, если в названии софта есть слово ‘backup’, то оно в первую очередь должно заниматься, собственно, самим бэкапом. Всё остальное — строго опционально. cBackup реализует функционал подключения плагинов, но на данный момент их всего два — позиционирование узла на карте на основании информации в OID system.sysLocation.0 и отрисовка STP деревьев. Если возникнет реальная необходимость и запрос — мы охотно допишем требуемый функционал. Сюда же относится и API, который позволяет интегрировать cBackup с другими сервисами.

Что будет?

Изначально проект писался «для внутренних нужд» и по сути являлся переделкой с нуля самописной утилиты для сохранения конфигураций свитчей. Уже в процессе рефакторинга пришла идея, что проект может оказаться полезным и за пределами наших сетей. Система обросла уймой новых фишек с прицелом на универсальность, получила многоязычность и более серьёзную документацию, а теперь вот вышла на публику.

Планы по развитию есть, и на доске за моей спиной висит roadmap на грядущие версии. Но поскольку на данный момент cBackup покрывает все наши нужды, хотелось бы выслушать пожелания сообщества и пользователей, если кто-то начнёт применять это ПО. Пожелания и вопросы можно оставлять в почте, на нашем форуме, в issue трекере на Github или в нашем чате в Discord.

Из ключевых фич в очереди на реализацию у нас значатся: поддержка SNMP v3, поддержка IPv6, валидация конфигов по заданным правилам и импорт узлов из внешних баз данных или API. Дополнение списка поддерживаемого оборудования будет осуществляться по запросам пользователей «без отрыва от производства», благо, для этого обновление установленной системы не требуется. Постараемся сделать этот процесс гладким, в надежде, что ухищрений бóльших, чем MikroTik, никто из вендоров не придумает. Также в планах значатся изменения в архитектуре демона, чтобы обеспечить плагинами и его.