Update README.md
This commit is contained in:
253
README.md
253
README.md
@@ -1340,9 +1340,260 @@ P_reject = 0.70 × 0.886 × 0.181 = 0.112 = 11.2%
|
|||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
||||||
|
|
||||||
|
|
||||||
## Геораспределённая миграция
|
## Геораспределенная миграция
|
||||||
|
|
||||||
|
**Механизм кросс-датацентровой миграции**
|
||||||
|
|
||||||
|
Кросс-датацентровая миграция данных позволяет переносить данные между географически распределенными кластерами futriix без остановки работы системы. Миграция основана на асинхронной репликации с использованием CDC (Change Data Capture) и устойчивой очереди изменений.
|
||||||
|
|
||||||
|
Миграция данных между датацентрами реализована на основе асинхронной репликации с **CDC (Change Data Capture)** и включает следующие ключевые компоненты:
|
||||||
|
|
||||||
|
1. Change Queue — устойчивая очередь изменений (до 100 000 записей), сохраняемая на диск. Каждое изменение получает уникальный LSN (Log Sequence Number) для отслеживания прогресса.
|
||||||
|
|
||||||
|
2. Checkpoint System — система чекпоинтов, позволяющая возобновить миграцию с места остановки. Чекпоинты сохраняются каждые 30 секунд и содержат информацию о последнем LSN и обработанных документах.
|
||||||
|
|
||||||
|
3. Delta Sync — после основной миграции система продолжает синхронизировать изменения, произошедшие во время миграции, обеспечивая консистентность данных.
|
||||||
|
|
||||||
|
4. Валидация — после завершения миграции выполняется выборочная проверка данных (по умолчанию 10% документов) с использованием SHA-256 контрольных сумм.
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
**Жизненный цикл миграции:**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
Idle → Preparing → Migrating → Delta Sync → Validating → Completed
|
||||||
|
```
|
||||||
|
**Режимы работы:**
|
||||||
|
|
||||||
|
1. manual — полностью ручное управление
|
||||||
|
2. semi_auto — основная миграция вручную, дельта-синхронизация автоматическая
|
||||||
|
3. auto — полностью автоматическая непрерывная миграция
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
**Команды управления:**
|
||||||
|
|
||||||
|
* migration start <source_dc> <target_dc> [db] [collection] — запуск миграции
|
||||||
|
* migration status [task_id] — статус миграции
|
||||||
|
* migration list — список всех задач
|
||||||
|
* migration pause/resume/cancel <task_id> — управление задачей
|
||||||
|
* migration stats — статистика
|
||||||
|
* migration config — конфигурация
|
||||||
|
* migration queue — состояние очереди изменений
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
**Компоненты системы**
|
||||||
|
|
||||||
|
| Компонент | Описание | Настройки |
|
||||||
|
|-----------|----------|-----------|
|
||||||
|
| **Source DC** | Исходный датацентр с данными для миграции | `migration.source.*` |
|
||||||
|
| **Target DC** | Целевой датацентр для приема данных | `migration.target.*` |
|
||||||
|
| **Change Queue** | Устойчивая очередь изменений (CDC) | `100k записей, LSN` |
|
||||||
|
| **Data Transfer** | Параллельная передача данных с сжатием | `workers, compression` |
|
||||||
|
| **Checkpoint & Resume** | Чекпоинты для возобновления миграции | `checkpoint_interval_sec` |
|
||||||
|
| **Delta Sync** | Синхронизация изменений после основной миграции | `interval_sec, max_lag_sec` |
|
||||||
|
| **Validation** | Проверка целостности данных | `sample_percent, max_errors` |
|
||||||
|
|
||||||
|
**Графическое изображение жизненного цикла миграции**
|
||||||
|
|
||||||
|
### Жизненный цикл миграции
|
||||||
|
|
||||||
|
| Этап | Описание | Переход к следующему этапу | Действия пользователя |
|
||||||
|
|------|----------|---------------------------|----------------------|
|
||||||
|
| **IDLE** | Начальное состояние, миграция не запущена | `migration start` | Запуск новой миграции |
|
||||||
|
| **PREPARING** | Сбор метаданных, анализ структуры данных, подсчёт документов | Автоматически после завершения подготовки | Мониторинг прогресса |
|
||||||
|
| **MIGRATING** | Основная передача данных из источника в приёмник | Автоматически после завершения передачи | `migration pause`, `migration status` |
|
||||||
|
| **DELTA_SYNC** | Синхронизация изменений, произошедших во время миграции | Автоматически после синхронизации | `migration pause`, `migration status` |
|
||||||
|
| **VALIDATING** | Проверка целостности данных (контрольные суммы) | Автоматически после валидации | `migration status` |
|
||||||
|
| **COMPLETED** | Миграция успешно завершена | — | `migration validate`, `migration list` |
|
||||||
|
|
||||||
|
### Обработка исключительных состояний
|
||||||
|
|
||||||
|
| Текущий этап | Исключительное состояние | Переход | Описание |
|
||||||
|
|--------------|--------------------------|---------|----------|
|
||||||
|
| **MIGRATING** | Приостановка пользователем | → **PAUSED** | Пользователь выполнил `migration pause` |
|
||||||
|
| **DELTA_SYNC** | Приостановка пользователем | → **PAUSED** | Пользователь выполнил `migration pause` |
|
||||||
|
| **PAUSED** | Возобновление пользователем | → **MIGRATING** | Пользователь выполнил `migration resume` |
|
||||||
|
| **PAUSED** | Отмена пользователем | → **FAILED** | Пользователь выполнил `migration cancel` |
|
||||||
|
| **MIGRATING** | Критическая ошибка | → **FAILED** | Сетевой сбой, отказ узла, таймаут |
|
||||||
|
| **DELTA_SYNC** | Критическая ошибка | → **FAILED** | Сетевой сбой, отказ узла, таймаут |
|
||||||
|
| **PREPARING** | Критическая ошибка | → **FAILED** | Недоступность источника или цели |
|
||||||
|
| **VALIDATING** | Ошибка валидации | → **COMPLETED** | Ошибки логируются, миграция завершается |
|
||||||
|
|
||||||
|
### Таблица переходов состояний
|
||||||
|
|
||||||
|
| Из состояния | Событие | В состояние |
|
||||||
|
|--------------|---------|-------------|
|
||||||
|
| IDLE | `migration start` | PREPARING |
|
||||||
|
| PREPARING | Подготовка завершена | MIGRATING |
|
||||||
|
| PREPARING | Ошибка | FAILED |
|
||||||
|
| MIGRATING | Передача завершена | DELTA_SYNC |
|
||||||
|
| MIGRATING | `migration pause` | PAUSED |
|
||||||
|
| MIGRATING | Ошибка | FAILED |
|
||||||
|
| DELTA_SYNC | Синхронизация завершена | VALIDATING |
|
||||||
|
| DELTA_SYNC | `migration pause` | PAUSED |
|
||||||
|
| DELTA_SYNC | Ошибка | FAILED |
|
||||||
|
| VALIDATING | Валидация завершена | COMPLETED |
|
||||||
|
| VALIDATING | Ошибка валидации | COMPLETED |
|
||||||
|
| PAUSED | `migration resume` | MIGRATING |
|
||||||
|
| PAUSED | `migration cancel` | FAILED |
|
||||||
|
| COMPLETED | — | — |
|
||||||
|
| FAILED | `migration resume` (после исправления) | MIGRATING |
|
||||||
|
| FAILED | `migration cancel` | FAILED |
|
||||||
|
|
||||||
|
### Временные метрики этапов
|
||||||
|
|
||||||
|
| Этап | Типичная длительность | Факторы влияния |
|
||||||
|
|------|----------------------|-----------------|
|
||||||
|
| **PREPARING** | 1-10 секунд | Количество баз данных и коллекций |
|
||||||
|
| **MIGRATING** | Зависит от объёма данных | Размер документов, пропускная способность сети, `batch_size`, `workers` |
|
||||||
|
| **DELTA_SYNC** | Зависит от количества изменений | Интенсивность записи во время миграции, `interval_sec` |
|
||||||
|
| **VALIDATING** | 5-30% от времени миграции | `sample_percent`, размер документов |
|
||||||
|
| **PAUSED** | Неограниченно | Время до возобновления пользователем |
|
||||||
|
|
||||||
|
|
||||||
|
### Поток данных
|
||||||
|
|
||||||
|
| Этап | Действие | Данные |
|
||||||
|
|------|----------|--------|
|
||||||
|
| 1 | Сбор метаданных | Список БД, коллекций, индексов |
|
||||||
|
| 2 | Подготовка данных | Сериализация документов |
|
||||||
|
| 3 | Сжатие | Snappy/LZ4/Zstd |
|
||||||
|
| 4 | Передача | HTTP с повторными попытками |
|
||||||
|
| 5 | Применение | Вставка/обновление в target DC |
|
||||||
|
| 6 | Дельта-синхронизация | CDC изменения |
|
||||||
|
| 7 | Валидация | SHA-256 контрольные суммы |
|
||||||
|
| 8 | Завершение | Обновление статуса |
|
||||||
|
|
||||||
|
**Режимы работы**
|
||||||
|
|
||||||
|
| Режим | Описание | Автоматизация |
|
||||||
|
|-------|----------|---------------|
|
||||||
|
| **manual** | Полностью ручное управление | Нет |
|
||||||
|
| **semi_auto** | Основная миграция вручную, дельта автоматическая | Частичная |
|
||||||
|
| **auto** | Полностью автоматическая непрерывная миграция | Полная |
|
||||||
|
|
||||||
|
**Пример конфигурации**
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[migration]
|
||||||
|
enabled = true
|
||||||
|
mode = "semi_auto" # manual, semi_auto, auto
|
||||||
|
|
||||||
|
[migration.source]
|
||||||
|
name = "dc-primary"
|
||||||
|
endpoint = "https://dc1.futriix.local:8080"
|
||||||
|
timeout_sec = 30
|
||||||
|
|
||||||
|
[migration.target]
|
||||||
|
name = "dc-secondary"
|
||||||
|
endpoint = "https://dc2.futriix.local:8080"
|
||||||
|
timeout_sec = 30
|
||||||
|
|
||||||
|
[migration.settings]
|
||||||
|
batch_size = 1000
|
||||||
|
workers = 4
|
||||||
|
compression = "snappy" # snappy, lz4, zstd
|
||||||
|
resume_enabled = true
|
||||||
|
checkpoint_interval_sec = 30
|
||||||
|
max_retries = 3
|
||||||
|
retry_backoff_sec = 5
|
||||||
|
collections = []
|
||||||
|
exclude_collections = ["temp", "logs"]
|
||||||
|
|
||||||
|
[migration.delta]
|
||||||
|
enabled = true
|
||||||
|
interval_sec = 60
|
||||||
|
max_lag_sec = 300
|
||||||
|
|
||||||
|
[migration.validation]
|
||||||
|
enabled = true
|
||||||
|
sample_percent = 10
|
||||||
|
max_errors = 100
|
||||||
|
```
|
||||||
|
</br>
|
||||||
|
|
||||||
|
### Команды управления миграцией
|
||||||
|
|
||||||
|
| Команда | Описание | Пример использования |
|
||||||
|
|---------|----------|---------------------|
|
||||||
|
| `migration start` | Запуск новой миграции из исходного датацентра в целевой | `migration start dc-primary dc-secondary` |
|
||||||
|
| `migration start <db>` | Запуск миграции только для указанной базы данных | `migration start dc-primary dc-secondary mydb` |
|
||||||
|
| `migration start <db> <collection>` | Запуск миграции для конкретной коллекции | `migration start dc-primary dc-secondary mydb users` |
|
||||||
|
| `migration status` | Отображение статуса текущей активной миграции | `migration status` |
|
||||||
|
| `migration status <task_id>` | Отображение статуса конкретной задачи по ID | `migration status mig_1734567890_dc-primary` |
|
||||||
|
| `migration list` | Вывод списка всех задач миграции (включая завершённые) | `migration list` |
|
||||||
|
| `migration pause <task_id>` | Приостановка выполняющейся миграции | `migration pause mig_1734567890_dc-primary` |
|
||||||
|
| `migration resume <task_id>` | Возобновление ранее приостановленной миграции | `migration resume mig_1734567890_dc-primary` |
|
||||||
|
| `migration cancel <task_id>` | Отмена миграции с переходом в статус "failed" | `migration cancel mig_1734567890_dc-primary` |
|
||||||
|
| `migration stats` | Отображение агрегированной статистики миграций | `migration stats` |
|
||||||
|
| `migration config` | Вывод текущей конфигурации мигратора из config.toml | `migration config` |
|
||||||
|
| `migration queue` | Отображение состояния очереди изменений (размер, LSN) | `migration queue` |
|
||||||
|
| `migration validate <task_id>` | Запуск валидации данных для завершённой миграции | `migration validate mig_1734567890_dc-primary` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Статусы миграции
|
||||||
|
|
||||||
|
| Статус | Описание | Индикатор | Возможные действия |
|
||||||
|
|--------|----------|-----------|-------------------|
|
||||||
|
| `idle` | Нет активной миграции, система ожидает команды | ⚪ Белый | `migration start` |
|
||||||
|
| `preparing` | Сбор метаданных: подсчёт документов, проверка коллекций | 🔵 Синий | Ожидание автоматического перехода |
|
||||||
|
| `migrating` | Основная фаза передачи данных из источника в приёмник | 🟡 Жёлтый | `migration pause`, `migration status` |
|
||||||
|
| `delta_sync` | Синхронизация изменений, произошедших во время миграции | 🟡 Жёлтый | `migration pause`, `migration status` |
|
||||||
|
| `validating` | Проверка целостности данных (контрольные суммы) | 🔵 Синий | `migration status` |
|
||||||
|
| `completed` | Миграция успешно завершена, все данные перенесены | 🟢 Зелёный | `migration validate`, `migration list` |
|
||||||
|
| `failed` | Миграция завершилась с ошибкой, требуется вмешательство | 🔴 Красный | `migration status` (просмотр ошибки), `migration resume` (после исправления), `migration cancel` |
|
||||||
|
| `paused` | Миграция приостановлена пользователем | 🟠 Оранжевый | `migration resume`, `migration cancel` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Метрики мониторинга
|
||||||
|
|
||||||
|
| Метрика | Описание | Единица измерения | Способ получения |
|
||||||
|
|---------|----------|-------------------|------------------|
|
||||||
|
| `total_changes` | Общее количество изменений, зарегистрированных в очереди | количество | `migration stats` |
|
||||||
|
| `applied_changes` | Количество изменений, успешно применённых в целевом датацентре | количество | `migration stats` |
|
||||||
|
| `failed_changes` | Количество изменений, которые не удалось применить | количество | `migration stats` |
|
||||||
|
| `skipped_changes` | Количество изменений, пропущенных по различным причинам | количество | `migration stats` |
|
||||||
|
| `latency_avg` | Среднее время передачи одного документа | миллисекунды | `migration stats` |
|
||||||
|
| `latency_max` | Максимальное время передачи одного документа | миллисекунды | `migration stats` |
|
||||||
|
| `throughput` | Пропускная способность миграции | документов в секунду | `migration stats` |
|
||||||
|
| `queue_size` | Текущий размер очереди изменений | количество | `migration queue` |
|
||||||
|
| `last_lsn` | Последний обработанный LSN (Log Sequence Number) | номер | `migration queue` |
|
||||||
|
| `progress_percent` | Процент выполнения текущей миграции | проценты (0-100) | `migration status` |
|
||||||
|
| `total_documents` | Общее количество документов для миграции | количество | `migration status` |
|
||||||
|
| `migrated_docs` | Количество успешно мигрированных документов | количество | `migration status` |
|
||||||
|
| `failed_docs` | Количество документов с ошибкой миграции | количество | `migration status` |
|
||||||
|
| `elapsed_time` | Время, прошедшее с начала миграции | секунды | `migration status` |
|
||||||
|
| `validation_errors` | Количество ошибок валидации | количество | `migration status` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Обработка ошибок
|
||||||
|
|
||||||
|
| Тип ошибки | Описание | Механизм восстановления | Действие администратора |
|
||||||
|
|------------|----------|-------------------------|------------------------|
|
||||||
|
| **Сетевой сбой** | Потеря соединения между датацентрами | Автоматический повтор до `max_retries` раз с задержкой `retry_backoff_sec` | Проверить сетевые соединения, межсетевые экраны |
|
||||||
|
| **Таймаут** | Превышение времени ожидания ответа | Увеличение таймаута (`timeout_sec`), повтор запроса | Настроить `timeout_sec` в конфигурации, проверить загрузку целевого датацентра |
|
||||||
|
| **Невалидные данные** | Документ не соответствует схеме или ограничениям коллекции | Логирование ошибки, пропуск документа | Проверить схему документа, исправить источник данных |
|
||||||
|
| **Краш узла** | Аварийное завершение работы узла futriix | Восстановление из последнего чекпоинта при перезапуске | Перезапустить узел, убедиться в наличии чекпоинта |
|
||||||
|
| **Конфликт версий** | Документ был изменён во время миграции | Повторная попытка с новой версией документа | Проверить конкурентные изменения, при необходимости остановить запись на время миграции |
|
||||||
|
| **Отказ целевого датацентра** | Целевой датацентр недоступен | Отложить до восстановления, автоматический повтор | Проверить состояние целевого датацентра, перезапустить при необходимости |
|
||||||
|
| **Недостаточно места** | Закончилось место на диске в целевом датацентре | Приостановка миграции до освобождения места | Освободить место на диске или расширить хранилище |
|
||||||
|
| **Ошибка валидации** | Контрольная сумма документа не совпадает | Логирование ошибки, продолжение миграции | Проверить целостность данных, при необходимости перезапустить миграцию |
|
||||||
|
| **Прерывание пользователем** | Пользователь выполнил `migration cancel` | Немедленная остановка, переход в статус `failed` | — |
|
||||||
|
| **Таймаут дельта-синхронизации** | Задержка превысила `max_lag_sec` | Увеличение интервала или ручная синхронизация | Настроить `interval_sec` и `max_lag_sec`, проверить пропускную способность канала |
|
||||||
|
|
||||||
|
|
||||||
|
**Гарантии целостности**
|
||||||
|
|
||||||
|
* Идемпотентность: Каждая операция может быть повторена без побочных эффектов
|
||||||
|
* Контрольные суммы: SHA-256 для каждого документа
|
||||||
|
* Валидация: Выборочная проверка после миграции
|
||||||
|
* Чекпоинты: Возможность возобновления с места остановки
|
||||||
|
* Транзакционность: Атомарное применение изменений
|
||||||
|
|
||||||
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
<p align="right">(<a href="#readme-top">К началу</a>)</p>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user