Все статьи
обновлено 10 мин

Backup и disaster recovery для self-hosted AI: что бэкапить и как восстанавливать

Полный план backup для self-hosted AI: модели, vector store, документы, конфиги, логи. RPO/RTO, шифрование, тесты восстановления и типовые сценарии аварий.

disaster-recoverybackupself-hosted-aioperationsagmind

Backup и disaster recovery для self-hosted AI — это план защиты всей связки из 6-10 сервисов: модели, vector store, embedder-кэша, оркестратора и конфигов. Потеря vector store без бэкапа означает пересчёт эмбеддингов за часы GPU-времени; потеря файнтюна — повторение тренировки. Этот текст описывает что бэкапить, как часто и как тестировать восстановление.

Зачем AI-системе отдельный disaster recovery?

В обычной IT-инфре «бэкап БД + бэкап файлов = почти всё». В AI-стеке появляются специфические сущности:

  • Файлы моделей — десятки-сотни ГБ на каждую (Llama 70B Q4 ~40 ГБ, gguf-варианты разные).
  • Vector store — может быть терабайтным, переcчёт = часы GPU-времени.
  • Embedding-кэши — если потерять, модель пересчитывает заново.
  • Файнтюн-чекпойнты — если делали свой файнтюн, потеря = повторение тренировки.
  • Промпт-конфигурации — десятки версионированных промптов в Dify/LangFuse.
  • Knowledge base оригиналы — PDF, DOCX, страницы внутренних wiki.
  • Логи диалогов — нужны для compliance и для разбора инцидентов.

Каждое — со своими RPO (сколько данных можно потерять), RTO (как долго можно лежать), и стоимостью пересчёта.

Что бэкапить: матрица

КомпонентЧтоРазмерRPORTOМожно пересчитать?
Файлы моделей.gguf, .safetensors, конфиги40-200 ГБ/модель30 минСкачать заново (часы при медленной сети)
Файнтюн-чекпойнтыLoRA-адаптеры, full FT-чекпойнты1-150 ГБразовый бэкап после тренировкипо мере надобностиНет — повторить тренировку
Vector storesnapshot БД + конфиг индексов1-50 ГБ на 1М векторов24 часа30 минМожно (часы GPU)
Document store (оригиналы)PDF, DOCX, MDот ГБ до ТБ1-24 часа1 часНет
Метаданные (Postgres/SQLite)пользователи, роли, диалоги, теги документовсотни МБ-ГБ15 мин30 минНет
Промпт-конфигурацииDify/LangFuse экспортысотни МБ24 часа30 минНет (без копии — переписывать)
Embedding-кэшиredis/disk-cacheдо сотни ГБможно потерятьМожно
Логи диалоговappend-only хранилищерастёт постояннопо compliance1 часНет

Главное правило: документы и метаданные — must-backup. Модели — можно перекачать, но удобнее иметь локально. Vector store — компромисс: бэкап быстрее, чем пересчёт.

Стратегия 3-2-1 для AI

Классическое правило бэкапов: 3 копии, на 2 разных носителях, 1 off-site. Для AI это значит:

  • Копия 1 (primary): на том же сервере / NAS — быстрый restore.
  • Копия 2 (secondary): на другом физическом сервере или массиве — защита от сбоя железа.
  • Копия 3 (off-site): другой ЦОД, или зашифрованный объектный сторадж (S3-совместимый — Yandex Object Storage, MinIO в другом ЦОДе, VK Cloud Storage). Защита от пожара / затопления / физической атаки.

Для self-hosted в ФЗ-152-режиме — off-site обязательно в РФ.

Vector store: специфика бэкапов

Weaviate

  • Встроенный backup-модуль на S3-совместимый бэкенд.
  • Команда: POST /v1/backups/{backend} — снимает консистентный snapshot.
  • Restore — обратная команда, индексы загружаются автоматически.
  • На больших коллекциях (10M+) backup занимает 10-30 минут.

Qdrant

  • Snapshots API — снимает копию коллекции в файл.
  • Можно копировать файл куда угодно (локальный диск, S3, NAS).
  • Restore — через API recover from snapshot.
  • Лёгкий формат, быстро.

Milvus

  • Backup-tool отдельно — milvus-backup CLI.
  • Сохраняет в S3 / локальный диск.
  • На distributed-кластерах требует координации между нодами.

pgvector

  • Стандартный pg_dump — но на больших объёмах медленно (часы).
  • Логическая репликация на standby — лучше для DR, чем dump.
  • Physical backup через pg_basebackup или WAL archiving.

Грабля: во всех случаях бэкапить нужно вместе с метаданными — конфиги индексов (HNSW параметры), embedder-id (какая модель сделала векторы), маппинг chunk → исходный документ. Без этого восстановленный vector store бесполезен.

Модели: бэкапить или нет

Стандартные публичные модели (Llama, Qwen, DeepSeek) — на бэкап не, на свой Hugging Face mirror — да.

Причины:

  • Hugging Face может задержать скачивание (rate limit), быть недоступен для российских IP, или модель удалена/заменена.
  • Локальный mirror (Nexus / простой HTTP-сервер с файлами) — даёт независимость.
  • Если у вас 5+ моделей и 10+ серверов — каждый раз перекачивать = дни.

Файнтюненные модели — бэкапить обязательно. Тренировка стоит сотни долларов GPU-времени и часы данных. Потеря чекпойнта = повторение всего.

Стандартный путь:

  • Чекпойнты после тренировки — в S3-совместимый storage с шифрованием.
  • Хранить минимум 2 последние версии — на случай что новая хуже.
  • Записывать tag/version + конфиг тренировки рядом.

Документы: оригиналы в первую очередь

Часто забываемый компонент. RAG-индекс — производный артефакт, можно пересчитать. Оригиналы документов — нельзя. Если их нет где-то ещё (CRM, файловая шара) и индекс был единственным местом — потеря фатальна.

Бэкап документов:

  • Если они лежат в SharePoint / Bitrix / другом источнике — этот источник и есть бэкап. Просто убедись что у источника есть свой backup.
  • Если AGmind / RAG-система — единственное хранилище — обязательный отдельный backup сырых файлов на S3.
  • Версионирование: если документы меняются (например, регламенты v2, v3) — хранить историю.

Метаданные: маленькие, но критичные

Конфиги, пользователи, диалоги, теги документов, роли, разрешения — обычно живут в Postgres / SQLite внутри Dify / Open WebUI / своего бэкенда.

  • Маленькие по объёму — pg_dump каждые 15 минут не проблема.
  • WAL-архивирование — RPO в минуты.
  • Хранить retention минимум на 30 дней — для разбора инцидентов.

Шифрование бэкапов

Бэкап на off-site без шифрования = слив всех корпоративных данных при компрометации канала.

  • AES-256 для files at rest.
  • Ключ — в KMS (HashiCorp Vault, YC KMS, отдельный hardware key).
  • Ключ не хранится рядом с бэкапом. Иначе шифрование бессмысленно.
  • Тестируй decrypt + restore регулярно. Иначе обнаружишь сломанный ключ в момент аварии.

Тестирование восстановления

Бэкап без теста восстановления — не бэкап.

Это правило цитируется во всех DR-гайдах потому, что регулярно нарушается. Сценарии типичных провалов:

  • Бэкап snapshot есть, а restore-инструкция — нет.
  • Бэкап на S3 есть, а ключ для расшифровки потерян.
  • Бэкап делается, но в нём только половина данных (забыли один сервис).
  • Restore работает, но новая инфра не та же версия — несовместимый формат.

Минимальная программа тестов:

  • Раз в квартал — полный restore vector store на тестовый стенд.
  • Раз в полгода — DR-учения: «представь что dc-1 упал». Поднять стек на dc-2 за RTO.
  • После каждого major-апдейта — smoke-test restore.

Типовые катастрофы и сценарии

Катастрофа 1: «случайно удалили коллекцию»

Самый частый сценарий. Админ через UI или API случайно дропнул коллекцию документов или удалил пользователя.

RTO: 30 минут.

Действия:

  1. Не делать ничего ещё (не перезаписать бэкап).
  2. Найти последний snapshot.
  3. Восстановить в новую коллекцию.
  4. Если был partial loss — merge только удалённого.
  5. Аудит логов: кто, когда, как удалил.

Профилактика: soft delete + retention 30 дней + 2FA на действия удаления.

Катастрофа 2: «vector store повреждён»

Сбой диска, kill -9 в неподходящий момент, баг в БД.

RTO: 1 час. RPO: 24 часа (потеря последних добавленных документов с прошлого snapshot’а).

Действия:

  1. Stop writes на vector store.
  2. Restore последнего snapshot.
  3. Re-index документов, добавленных после snapshot (если есть журнал).
  4. Smoke-test поиска.
  5. Восстановить writes.

Профилактика: journaling, регулярные snapshots, replication где это разумно.

Катастрофа 3: «упал ЦОД»

Электричество, охлаждение, физическая авария.

RTO: 4-24 часа в зависимости от того, есть ли горячий стенд. RPO: 1 час (если репликация в другой ЦОД), 24 часа (если только бэкапы).

Действия:

  1. Развернуть стек в резервном ЦОДе (в идеале — заранее подготовленный, IaC).
  2. Restore данных из off-site бэкапа.
  3. Переключить DNS / load-balancer.
  4. Смоук-тесты.
  5. После восстановления primary — обратная репликация.

Профилактика: IaC (Terraform/Ansible), регулярные DR-учения, off-site бэкап в другом ЦОДе.

Катастрофа 4: «зашифровал ransomware»

Worst case, и не такой редкий как кажется.

RTO: 1-2 дня. RPO: 1-24 часа (если бэкап не успели зашифровать).

Действия:

  1. Изолировать заражённый сегмент.
  2. Развернуть стек заново на чистом железе.
  3. Restore из off-site бэкапа (который не имел сетевого доступа из заражённой зоны — иначе тоже зашифрован).
  4. Полный security-аудит до возврата в production.

Профилактика:

  • Off-site бэкап immutable (S3 Object Lock, ZFS snapshots с retention) — не может быть стёрт даже от имени root.
  • Минимум привилегий: учётка с access на backup-storage не имеет прав в production.
  • Regular vulnerability scanning.

Катастрофа 5: «модель сошла с ума после апдейта»

Не катастрофа в классическом смысле, но требует rollback.

RTO: 15 минут.

Действия:

  1. Rollback версии модели (предыдущий тэг в реестре моделей).
  2. Если файнтюн — rollback на предыдущий чекпойнт.
  3. Анализ почему новая хуже.

Профилактика: semantic versioning моделей, eval-сет перед промоутом в production, blue-green deployment.

Стандартный план DR для AGmind-стека

КомпонентБэкапКудаЧастотаRetention
Postgres (метаданные)WAL + base backupS3 (Yandex Object Storage)base 1×/день, WAL непрерывно30 дней
Vector store (Weaviate)snapshotS31×/день14 дней
Документы (оригиналы)syncS3 + другой ЦОДпри каждом uploadбессрочно
Файнтюн-чекпойнтыкопия после тренировкиS3 + локальный mirrorразовобессрочно (последние 3 версии)
Промпт-конфиги (Dify)export YAMLgit-репозиторийпри измененииgit history
Логи диалоговappend-onlyS3 + tape (для compliance)непрерывнопо compliance
Конфиги Ansible/Terraformgitgit-репозиторийпри измененииgit history

Шифрование AES-256, ключ в Vault, off-site копии в другом ЦОДе РФ.

Что часто упускают

1. Бэкап конфигов и инфры. Без terraform/ и ansible/ восстановление — это часы или дни ручного труда. Хранить в git.

2. Версионирование embedder’а. Если бэкап сделан с эмбеддером bge-m3 v1.5, а восстановили на v2.0 — векторы несовместимы. Нужно записывать версию embedder’а вместе со snapshot’ом.

3. Время реальной перекачки моделей. «100 ГБ Llama» по медленной сети из Hugging Face — это 4-6 часов. Локальный mirror решает.

4. Зависимости от внешних сервисов. Если ассистент дёргает GigaChat или YandexGPT API — что делать когда они упали? План B нужен, или явное «зависим от поставщика».

5. Документация. План DR, который никто не читал и не тренировал — план в стиле «открой в момент аварии и попытайся понять». Учения раз в полгода — must.

Чек-лист

  • Все 8 категорий выше идентифицированы у вас в стеке.
  • Для каждой определены RPO и RTO.
  • Бэкап автоматизирован (cron / systemd timer / k8s CronJob).
  • Бэкапы шифруются.
  • Off-site копия в другом ЦОДе РФ.
  • Immutable storage против ransomware.
  • Restore тестируется минимум раз в квартал.
  • DR-учения раз в полгода.
  • Документация плана восстановления есть и актуальна.
  • Мониторинг успешности бэкапов (алерт если не было N часов).

Итог

Self-hosted AI без backup-плана — мина. Vector store, файнтюн-чекпойнты, оригиналы документов, промпт-конфиги — всё это специфические сущности, которые легко забыть в плане. Стандартное правило 3-2-1 + immutable off-site + регулярные тесты восстановления = реальная защита.

В AGmind backup-конфигурация — часть пакета развёртывания: автоматизированные snapshots, шифрование, off-site в другом ЦОДе РФ, ежеквартальные restore-тесты. Это часть «деплой → интеграция → поддержка», не отдельный счёт.

Связанные тексты: архитектура в закрытом контуре, vector DB сравнение, сколько стоит сервер для AI, внедрение под ключ.