Синхронизация
Содержание
Два слоя хранения — etcd и Git — синхронизируются в обоих направлениях. Git → etcd применяется при развёртывании и восстановлении. etcd → Git обеспечивает непрерывное версионирование оперативных изменений.
Направления синхронизации #
graph LR
Git["Git-репозиторий"]
KV["etcd\n(управляющий кластер)"]
Git -->|"Git → etcd\nразвёртывание, восстановление"| KV
KV -->|"etcd → Git\nпериодическая фиксация"| Git
style Git fill:#374151,color:#fff,stroke:#1f2937
style KV fill:#374151,color:#fff,stroke:#1f2937
Git → etcd: применение желаемого состояния #
Инициируется администратором при развёртывании новой сети или восстановлении после потери управляющего кластера.
Управляющий кластер:
- Считывает конфигурацию из Git-репозитория.
- Применяет её к etcd — приводит оперативное состояние в соответствие с желаемым.
- Запускает сервисы (subscription, bot, backup).
etcd → Git: сохранение оперативных изменений #
Управляющий кластер периодически фиксирует оперативные изменения из etcd в Git:
- Регистрация новых Core-нод.
- Ротация serviceName.
- Изменения статусов участников.
- Обновления ячеек.
Каждое изменение оформляется как коммит с описанием операции.
Консистентность #
| Уровень | Механизм |
|---|---|
| etcd | Строгая консистентность (протокол Raft) |
| Git ↔ etcd | Асинхронная периодическая синхронизация |
| Приоритет при расхождении | Состояние etcd считается актуальным; Git — целевым при восстановлении |
Git может кратковременно отставать от etcd — это нормально. При восстановлении из Git применяется последнее зафиксированное состояние, после чего оперативные изменения вносятся вручную или через повторную регистрацию узлов.
Развитие #
На текущем этапе синхронизация выполняется периодическим скриптом на управляющем кластере.
В перспективе — интеграция с CI/CD: изменения в Git автоматически применяются к etcd через пайплайн, без ручных операций.