📋 План реализации

Docker Swarm кластер с Selectel

Детальная проработка архитектуры и поэтапный план

← Назад в студию

🎯 Обзор плана

Цель: Создать отказоустойчивый Docker Swarm кластер с балансировкой нагрузки на Ollama между 3 GPU нодами и автоматическим восстановлением прерываемых серверов Selectel.

Ключевые метрики

⏱️ Время реализации

20-30 дней

Поэтапная реализация

💰 Экономия

75%

Прерываемые серверы

🔄 Время восстановления

3-8 минут

Автоматическое восстановление

📊 Компонентов

15+

Сервисов и компонентов

🧩 Компоненты системы

Manager Node Services

Nginx

Требуется адаптация

Reverse proxy с балансировкой

Изменения: Swarm service, динамический upstream

RAG Chat API

Требуется адаптация

Flask приложение

Изменения: Подключение к Ollama внутри Swarm

Analytics

Требуется адаптация

Система аналитики

Изменения: Shared volume для SQLite

ChromaDB

Требуется адаптация

Векторная БД

Изменения: Docker контейнер, ограничение на manager

Monitoring

Требуется создание

Prometheus/Grafana

Оценка: 3-4 дня

Swarm Autoscaler

Требуется создание

Selectel API интеграция

Оценка: 5-7 дней

Swarm Monitor

Требуется создание

Мониторинг нод

Оценка: 2-3 дня

GPU Worker Node Services

Ollama

Требуется перенос

LLM сервис

Изменения: Docker контейнер, GPU поддержка, 3 реплики

📅 Поэтапный план реализации

Этап 0: Подготовка и анализ

1-2 дня
  • ✅ Анализ текущей архитектуры
  • ✅ Изучение Selectel API
  • ✅ Проектирование Swarm архитектуры
  • ⏳ Принятие решений по спорным моментам

Этап 1: Подготовка Selectel инфраструктуры

2-3 дня
  • Создание проекта в Selectel Cloud
  • Получение API Token
  • Настройка сети (VPC)
  • Создание SSH ключа
  • Выбор региона
  • Тестирование API

Этап 2: Создание базовой инфраструктуры

3-5 дней
  • Создание Manager Node (обычный сервер)
  • Установка Docker и инициализация Swarm
  • Создание 3 GPU Worker Nodes (прерываемые)
  • Установка Docker и nvidia-docker
  • Присоединение к Swarm
  • Назначение labels
  • Создание overlay network

Этап 3: Разработка базовых сервисов

5-7 дней
  • Ollama Service (2 дня)
  • ChromaDB Service (1 день)
  • RAG Chat API Service (2 дня)
  • Analytics Service (1 день)
  • Nginx Service (1 день)

Этап 4: Разработка мониторинга

3-4 дня
  • Prometheus (1 день)
  • Grafana (1 день)
  • Node Exporter (1 день)
  • Настройка дашбордов и алертов

Этап 5: Разработка Swarm Autoscaler

5-7 дней
  • Selectel API Client (2 дня)
  • Swarm Client (1 день)
  • Node Monitor (1 день)
  • Recovery Manager (2 дня)
  • Main Autoscaler (1 день)

Этап 6: Интеграция и тестирование

3-5 дней
  • Интеграционное тестирование (2 дня)
  • Нагрузочное тестирование (1 день)
  • Тестирование восстановления (1 день)
  • Документация (1 день)

Этап 7: Production деплой

2-3 дня
  • Подготовка Production (1 день)
  • Деплой (1 день)
  • Мониторинг и оптимизация (1 день)

❓ Недостающие компоненты

🔴 Swarm Autoscaler

Критический

Приоритет: Критический

Оценка: 5-7 дней

Автоматическое восстановление прерванных GPU серверов через Selectel API

🟡 Swarm Monitor

Высокий

Приоритет: Высокий

Оценка: 2-3 дня

Мониторинг состояния Swarm нод

🟡 Monitoring Stack

Высокий

Приоритет: Высокий

Оценка: 3-4 дня

Prometheus/Grafana для метрик

🟡 Динамический Nginx Upstream

Высокий

Приоритет: Высокий

Оценка: 1-2 дня

Автоматическое обновление upstream при изменении нод

🟢 Shared Volume для Ollama

Средний

Приоритет: Средний

Оценка: 1-2 дня

Общий том для моделей (опционально)

🟢 Backup система

Средний

Приоритет: Средний

Оценка: 2-3 дня

Автоматическое резервное копирование

⚠️ Критические решения

🔴 Требуются решения немедленно

1. Регион для GPU серверов

Рекомендация: ru-7 (Москва)

Все серверы в одном регионе для минимальной задержки

2. Тип диска для GPU серверов

Рекомендация: Гибридный подход

Сетевой диск для конфигураций, локальный для моделей

3. Стратегия хранения моделей Ollama

Рекомендация: Локальное хранение на каждой ноде

Проще и быстрее, модели загружаются при первом запросе

4. Стратегия восстановления серверов

Рекомендация: Восстановление если < 1 часа, иначе создание нового

Баланс между скоростью и надежностью

5. Максимальный возраст серверов (24 часа)

Рекомендация: Автоматическое пересоздание через 23 часа

Предотвращает принудительное прерывание

📄 Подробный документ с решениями:
CRITICAL_DECISIONS.md

📊 Диаграмма потока данных

┌─────────────────────────────────────────────────────────────┐ │ Client Request │ │ POST /api/chat/stream │ └──────────┬───────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Nginx Load Balancer │ │ (3 replicas, любой узел) │ │ │ │ upstream rag_chat_api { │ │ least_conn; │ │ server rag-chat-api-1:9004; │ │ server rag-chat-api-2:9004; │ │ server rag-chat-api-3:9004; │ │ } │ └──────────┬───────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ RAG Chat API (Flask) │ │ (3 replicas, любой узел) │ │ │ │ 1. Получение запроса │ │ 2. Поиск в ChromaDB │ │ 3. Формирование промпта │ │ 4. Запрос к Ollama (через Nginx) │ │ 5. Streaming ответа │ │ 6. Отправка в Analytics │ └───────┬───────────────────────────┬──────────────────────────┘ │ │ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────────────────────┐ │ ChromaDB │ │ Nginx (Ollama Load Balancer) │ │ (1 replica, │ │ (3 replicas) │ │ manager node) │ │ │ │ │ │ upstream ollama_backend { │ │ Vector Search │ │ least_conn; │ │ Top K=100 │ │ server ollama-1:11434; │ └──────────────────┘ │ server ollama-2:11434; │ │ server ollama-3:11434; │ │ } │ └──────────┬────────────────────────┘ │ ├──────────┬──────────┐ │ │ │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Ollama-1 │ │ Ollama-2 │ │ Ollama-3 │ │ GPU Node 1 │ │ GPU Node 2 │ │ GPU Node 3 │ │ │ │ │ │ │ │ qwen3:30b │ │ qwen3:30b │ │ qwen3:30b │ │ (22GB VRAM) │ │ (22GB VRAM) │ │ (22GB VRAM) │ └──────────────┘ └──────────────┘ └──────────────┘