Коротко. «Конфигурация» ActiveScale — это модель в modeldb, очередь установки, group_vars плейбуков и файлы в /opt/ampli/cfg. Продукт рендерит конфиги из модели, поэтому снимок модели — главное, что нужно до любой правки. Бэкап кладём вне каталога продукта, проверяем читаемость (JSON парсится, число документов совпадает) и только потом меняем что-либо. Бэкап конфигурации не является бэкапом данных S3.
1. Что считается конфигурацией
| Что | Где | Зачем снимать |
|---|---|---|
Модель (modeldb) |
mongo на management-ноде | из неё рендерятся сеть, роли, политики, расписания |
| Очередь установки | /opt/ampli/apps/marvinbase/queue/<NODE>/ |
8 файлов, по ним идёт install-ng |
group_vars плейбуков |
/opt/ampli/provision/playbooks/group_vars/ |
переменные ролей, включая подключение федерации |
| Конфиги продукта | /opt/ampli/cfg/ (dss*, marvin, haproxy, samurai) |
сертификаты, шлюз, параметры DSS |
| Профили железа | /opt/ampli/cfg/product/hardware/types/ |
hardwaretype, фильтры FAN/NIC |
| Расписания и retention | modeldb.taskschedule, документ environment |
периодические задачи и сроки хранения |
Модель — не «настройки в файле», а база документов: machine, network, location,
environment, column, disk, networkswitch, configrule, supportedstoragepolicy,
task, taskschedule, event. Продукт читает её по mTLS на порт 8443 и рендерит конфиги
плейбуками. Поэтому правка «одного поля» — это изменение источника истины, а не косметика.
Отдельно стоят метаданные DSS: конфиги /opt/ampli/cfg/arakoon/{arakoonkeeper,dsskeeper}/*.cfg и
базы /mnt/meta4/arakoon_*/db. Их снимают перед работами по DSS и ленте, но это тяжёлый и
отдельный класс бэкапа — не «конфиг на каждый чих».
2. Когда бэкапить
- Перед любым
PUT/POSTв модель: сеть, маршрут, статус NIC, политика,rackunit. - Перед сменой политики DSS или правкой
supportedstoragepolicy. - Перед апгрейдом ОС/ПО: и модель, и очередь, и
group_vars. - Перед повторным прогоном
install-ngи перед любой правкой очереди. - Перед decommission диска/кассеты и перед работами по ёмкости.
- Перед применением вендорского патча и перед снятием обходов.
- Перед вайпом/переустановкой — снимок того, что ещё живо, чтобы было с чем сверять.
Правило простое: если после действия нельзя быстро ответить «каким было значение до», бэкап не сделан.
3. Три способа снять снимок
3.1. Model API (mTLS). Сертификаты продукта root-only, поэтому с ноды — под sudo -n:
for c in machine network location environment column disk networkswitch \
configrule supportedstoragepolicy task taskschedule event; do
sudo -n curl -sk \
--cert /opt/ampli/cfg/marvin/ssl/machine.cert \
--key /opt/ampli/cfg/marvin/ssl/machine.key \
"https://127.0.0.1:8443/model/$c/" > "<BACKUP_DIR>/$c.json"
done
Ожидается 200 и JSON с ключом коллекции. Без клиентского сертификата модель отвечает 400
мгновенно — это норма mTLS, а не отказ API.
3.2. mongodump. Полный снимок базы, включая документы, которые API отдаёт с пагинацией:
mongodump --ssl --sslCAFile /opt/ampli/cfg/ssl/.ca.crt \
--sslPEMKeyFile <MANAGEMENT_MODEL_PEM> \
--host 127.0.0.1:27017 --db modeldb \
--out "<BACKUP_DIR>/modeldb_$(date +%s)/"
Ожидается каталог с .bson-файлами коллекций, размер — не нулевой. Пути к PEM в старых
инструкциях устаревали; актуальный путь сверять по доступам к mongo.
3.3. Файлы. Очередь, group_vars, cfg, профили железа:
tar -C /opt/ampli/apps/marvinbase -czf "<BACKUP_DIR>/queue-$(date +%F).tgz" queue
tar -czf "<BACKUP_DIR>/cfg-$(date +%F).tgz" \
/opt/ampli/cfg/dss* /opt/ampli/cfg/marvin /opt/ampli/cfg/haproxy \
/opt/ampli/cfg/samurai /opt/ampli/cfg/product/hardware/types \
/opt/ampli/provision/playbooks/group_vars
Перечислять только существующие каталоги: отсутствие, например, /opt/ampli/cfg/haproxy в
конкретной сборке — не ошибка. У нас для модели есть полевой скрипт, который снимает её через
mTLS API и складывает каталог с датой-временем; он же удобен, когда mongodump недоступен.
4. Бэкап — вне каталога продукта
Это не формальность. Ansible 1.9.6 в поставке читает все файлы каталога group_vars: если
рядом с рабочим .yml лежит .orig или .bak, бэкап может «победить» и применится старое
значение. Поэтому копии group_vars не оставляют в самом каталоге.
Правила:
<BACKUP_DIR>— вне/opt/ampli(отдельный диск, каталог администратора, сетевая шара).- Имя каталога содержит дату и время:
<BACKUP_DIR>/model-YYYYMMDD-HHMMSS/. - В каталоге —
SHA256SUMS, чтобы через месяц можно было отличить целый снимок от обрезанного. - Временные распаковки и сравнения — тоже вне каталога продукта, иначе их подхватит рендер.
- Не складывать бэкап на ту же ноду, которую собираетесь менять: снимок должен пережить её переустановку.
5. Проверка, что бэкап читается
Снимок, который не открывается, — не бэкап. Проверка занимает минуту и делается до изменений.
-
JSON парсится, коллекция не пуста:
bash for f in "<BACKUP_DIR>"/*.json; do python3 -c 'import json,sys; d=json.load(open(sys.argv[1])); k=list(d)[0]; print(sys.argv[1], k, len(d[k]))' "$f" doneОжидается: имя файла, ключ коллекции и число документов.0уmachine/environment— признак, что запрос ушёл не туда или снимок пустой. -
Число документов совпадает с живой моделью:
bash sudo -n curl -sk --cert /opt/ampli/cfg/marvin/ssl/machine.cert \ --key /opt/ampli/cfg/marvin/ssl/machine.key \ "https://127.0.0.1:8443/model/machine/" \ | python3 -c 'import json,sys; print(len(json.load(sys.stdin)["machine"]))'Сравнить с числом из снимка. Расхождение — либо снимок старее, либо часть документов не выгрузилась (пагинация, права). -
Архивы целые:
bash tar -tzf "<BACKUP_DIR>/cfg-$(date +%F).tgz" | headОжидается список путей, а не ошибка формата. -
mongodumpне пустой:bash ls "<BACKUP_DIR>"/modeldb_*/modeldb/*.bson | wc -lОжидается число коллекций больше нуля; файлы ненулевого размера. -
Контрольные суммы записаны:
bash cd "<BACKUP_DIR>" && sha256sum *.json *.tgz > SHA256SUMSЧерез месяцsha256sum -c SHA256SUMSпокажет, цел ли снимок.
6. Хранение и чего бэкап не покрывает
Хранение. Держать копию перед изменением и периодическую копию отдельно от неё; ротация — по
датам в имени каталога, удалять самые старые, а не «все кроме последнего». Перед снятием проверить
место: df -h <BACKUP_DIR>; обрезанный по месту архив выглядит целым файлом и молча ломается при
распаковке.
Снимок модели может содержать чувствительные поля — учётки подключений (почта, SNMP, коннектор ленты), ключи. Хранить с ограниченным доступом и не выкладывать в общие каталоги.
Чего бэкап конфигурации не покрывает:
- Данные S3. Объекты и бакеты — данные приложения; их защита — репликация, версионирование, Object Lock, а не снимок модели.
- Метаданные DSS.
/mnt/meta4/arakoon_*/db— отдельный тяжёлый объект; снимается перед работами по DSS/ленте, не в ежедневный конфиг-бэкап. - Кассеты и лента. Реестр живёт в Tape Connector; снимок модели его не заменяет.
Вывод: «сделали бэкап модели» ≠ «можно спокойно вайпать диски». Перед деструктивными работами снимается ещё и то, что живёт вне модели.
7. Восстановление: ожидания и границы
mongorestore возвращает документы в базу, но модель — не изолированная таблица: она связана с
arakoon, DSS и приложениями. Восстановление «как было» может разойтись с фактическим состоянием
дисков, колонок и ленты.
Поэтому:
- Точечная правка откатывается не архивом, а
PUTконкретного документа значениями из снимка — это безопаснее и проверяемо. - Полное восстановление базы — операция уровня вендора: сначала на не-прод, с отмашкой, с планом
сверки (
GET /model/<entity>/до и после). - Перед восстановлением зафиксировать текущее состояние: без «до» невозможно доказать, что стало лучше.
- Если менялся
group_vars/очередь — восстанавливать файлы нужно вне каталога, из которого читает ansible, и переносить по одному, иначе снова сработает эффект «бэкап побеждает».
8. Профилактика: чек-лист перед изменением
- [ ] Понятно, какой документ/файл меняется и какое поле.
- [ ] Снимок снят в
<BACKUP_DIR>вне/opt/ampli, с датой в имени. - [ ] JSON парсится, число документов совпадает.
- [ ]
SHA256SUMSзаписан. - [ ] Место на диске проверено.
- [ ] Для деструктивных шагов — отмашка и план отката.
- [ ] После изменения — сверка моделью и событиями, а не «на глаз».
В GUI есть Download (выгрузка логов и диагностики) и health check
(Configuration > System > General Info > Health Check → Run, результат в Jobs), но кнопки
«бэкап конфигурации» в этих разделах нет: снимок делается через Model API и копирование файлов.
Источники
- Quantum, Manage System Settings (дата доступа 2026-11-07): разделы
Configuration > System,Download, health check. - Наша практика (обезличено): снимки модели через mTLS API и
mongodumpперед правками политики и перед вайпом на кластерах из трёх нод. - Обновлено: 2026-11-07.