ActiveScaleинженерная практика

initialize: первый запуск модели через marvin_install

Установка installinitializemodelfederationfederatedmongod

Коротко. Stage-2 (initialize) поднимает management-слой: пакеты, MongoDB, marvinweb, task manager. Запускает его человек — сервис marvin_install.service продуктом не регистрируется, это задумка, а не дефект. Одна ошибка обходится дорого: если на converged-ноде не отработал --init-federated, федеративная БД и /federated/ не разворачиваются, и install-ng -i падает с No suitable management server found; догнать это повторным запуском нельзя.


1. Что делает stage-2

Две фазы, обе видны в логе как 1/2 BASE и 2/2 MARVIN:

  1. initialize.py — базовая часть: репозиторий, базовые пакеты (marvinbase, marvintaskmgr, mcore).
  2. initialize_marvin.py — ansible-плейбуки локально: пакетный репозиторий, management system, база management_model, веб-приложения, task manager; пишет initial_environment.json, переносит upgrade-архив.

После stage-2 есть работающий Marvin с моделью и task manager. S3 и storage на этом этапе ещё нет — это stage-3 (install-ng). install-ng без stage-2 падает machine.cfg not found: stage-2 — обязательный bootstrap, а не опция.

Порядок плейбуков внутри 2/2 фиксирован: пакетный репозиторий → machine.yml (пользователи, SSL, службы) → mongodb.yml (база management_model с самоподписанным CA) → marvinweb.yml → marvintaskmgr.yml. В initial_environment.json попадают сертификаты и ключ модели, главный секрет окружения, версия продукта и список дополнительных пакетов. Этот файл — не отчёт, а вход для stage-3: если его нет, следующий этап нечего импортировать. Отдельно отметим: база метаданных и модель живут на каждой ноде кластера, поэтому stage-2 проходится на каждой mgmt-ноде, а не только на первой.


2. Предусловие: вы на диске, а не в live

findmnt /        # /dev/md4 (или md3 в другой раскладке), НЕ overlay
id sysadmin      # учётная запись существует
hostname         # <NODE_HOSTNAME>

Если корень — overlay//cow, вы всё ещё в live-среде: всё, что создаст initialize, уедет вместе с перезагрузкой. Возврат к stage-1.


3. Запуск: вручную и в терминале

marvin_install.service не регистрируется — продукт ждёт, что оператор сам запустит установку после ребута. Штатный путь для человека:

sudo /usr/bin/marvin_install

Скрипт делает всё в фоне и занимает по нашим наблюдениям 10–20 минут. Не запускать его через systemd-юнит с Type=forking — сломается таймаут. После завершения /usr/bin/marvin_install самоудаляется, а результат пишется в /tmp/marvin_initialize.rc.

Внутри обёртка передаёт управление initialize.py с параметрами дистрибутива и локального репозитория (--distro, --repo=/opt/packages). Репозиторий продукта при этом должен быть доступен: без него базовые пакеты не установятся, и фаза BASE упадёт на apt-get. Если установка идёт в закрытом контуре, репозиторий поднимается локально заранее — до запуска marvin_install.

Запускать stage-2 повторно «на всякий случай» бессмысленно: скрипт уже удалён, а окружение помечено инициализированным. Если что-то пошло не так, разбираться надо по deploy.log, а не перезапуском.


4. --init-federated: почему это критично

Флаг --init-federated разворачивает федеративную БД (federated_model) и location /federated/ в nginx. Без него на converged-ноде:

  • в логе нет шага Deploy federated_model database;
  • /federated/_status/ отвечает 404;
  • install-ng -i падает: federated.No suitable management server found.

Догнать позже нельзя: повторный запуск видит environment already initialized и выходит с 0, ничего не делая; удаление окружения через API отвечает 500; ручная сборка mongod/nginx нештатна и неидемпотентна. То есть пропущенный флаг = чистый старт с live, без «дожима».

На чистом converged-прогоне порядок такой: environment.json → stage-2 с федерацией → install-ng без -S. Почему именно без -S — в статье Федерация: путь A и B.


5. Маркеры готовности

tail -f /opt/ampli/var/log/marvin/deploy.log

Признаки успеха — все вместе:

  • в конце deploy.log стоит Done, пройдены шаги от Deploy package repository server до Moving upgrade archive;
  • создан /home/marvin/initial_environment.json;
  • upgrade-архив лежит в /home/marvin;
  • /usr/bin/marvin_install исчез, появился /tmp/marvin_initialize.rc;
  • живы процессы: ps -ef | grep -E "mongod|uwsgi.*marvinweb|taskmanager".

6. Проверка management-слоя

curl -sk https://localhost:8443/          # ответ 400 «no SSL cert» — это НОРМА
curl -sk https://localhost:8443/model/_status/
ls -la /opt/ampli/apps/marvinbase/tools/install-ng.py
  • 8443 отвечает: marvinweb поднят. 400 без клиентского сертификата — ожидаемое поведение, не ошибка.
  • /model/_status/ → 200 за десятки миллисекунд. Это гейт перед stage-3: если ответ медленный (секунды и больше), модель ещё не готова, и install-ng будет выглядеть «зависшим».
  • install-ng.py на месте — можно переходить к очереди и stage-3.

Дополнительно, если нужен контроль федерации:

curl -sk https://localhost:8443/federated/_status/ \
  -w '\nHTTP=%{http_code} time=%{time_total}s\n'

200 и время меньше 50 мс. 404 — федерация не развёрнута (см. п. 4); десятки секунд — topology-hang, порт/репликасет не тот.


7. Логи и типовые отказы

Симптом Что смотреть
скрипт завершился, модели нет deploy.log на failed=; rc в /tmp/marvin_initialize.rc
machine.cfg not found на stage-3 stage-2 не дошёл до конца
/federated/_status/ → 404 stage-2 без --init-federated
повторный запуск «ничего не делает» guard environment already initialized — это не сбой
ImportError: taskmgr.constants запуск initialize_marvin.py не из venv marvintaskmgr
модель отвечает секундами mongod не поднялся/тормозит; смотреть процессы и логи mongod

/tmp/ing.log и deploy.log — разные файлы: первый относится к stage-3, второй к stage-2. Не искать следы initialize в ing.log.

Две «ложные тревоги», на которые не стоит тратить время: пустой deploy.log сразу после полуночи — это logrotate, смотреть предыдущий файл с датой; отсутствие пакета samurai на ранней фазе — норма, он появляется на stage-3. Обе картины выглядят как «установка встала», но установка при этом идёт.


8. Источники

  • Software Documentation Center (дата доступа 2026-11-07)
  • Наша практика (обезличено): прогоны stage-2 на 3-нодных стендах; разбор пропуска --init-federated.
  • Обновлено: 2026-11-07.

Нужен инженер? Разберу вашу ситуацию и скажу, что делать — по шагам, с проверками.

Обсудить задачу