Перейти к содержанию

Синхронизация

·1 минута·
Два слоя хранения — 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: применение желаемого состояния #

Инициируется администратором при развёртывании новой сети или восстановлении после потери управляющего кластера.

Управляющий кластер:

  1. Считывает конфигурацию из Git-репозитория.
  2. Применяет её к etcd — приводит оперативное состояние в соответствие с желаемым.
  3. Запускает сервисы (subscription, bot, backup).

etcd → Git: сохранение оперативных изменений #

Управляющий кластер периодически фиксирует оперативные изменения из etcd в Git:

  • Регистрация новых Core-нод.
  • Ротация serviceName.
  • Изменения статусов участников.
  • Обновления ячеек.

Каждое изменение оформляется как коммит с описанием операции.

Консистентность #

УровеньМеханизм
etcdСтрогая консистентность (протокол Raft)
Git ↔ etcdАсинхронная периодическая синхронизация
Приоритет при расхожденииСостояние etcd считается актуальным; Git — целевым при восстановлении

Git может кратковременно отставать от etcd — это нормально. При восстановлении из Git применяется последнее зафиксированное состояние, после чего оперативные изменения вносятся вручную или через повторную регистрацию узлов.

Развитие #

На текущем этапе синхронизация выполняется периодическим скриптом на управляющем кластере.

В перспективе — интеграция с CI/CD: изменения в Git автоматически применяются к etcd через пайплайн, без ручных операций.