Menu
Git Sync для сред с высокой доступностью
Сценарий «основной — реплика»
Используйте основной экземпляр Grafana и одну или несколько реплик, синхронизированных с одним и тем же расположением в Git, чтобы обеспечить отработку отказа.
Когда использовать
- Автоматическая отработка отказа: вам нужна непрерывность обслуживания при отказе основного экземпляра.
- Высокая доступность: ваша организация требует гарантированной доступности дашбордов.
- Простая конфигурация высокой доступности: вы хотите высокую доступность без сложности схемы «активный — активный».
- Окна обслуживания: вы выполняете обновления, пока другой экземпляр обслуживает трафик.
- Непрерывность бизнеса: доступ к дашбордам не допускает простоев.
Архитектура
┌─────────────────────────────────────────────────────┐
│ GitHub Repository │
│ Repository: your-org/grafana-manifests │
│ Branch: main │
│ │
│ grafana-manifests/ │
│ └── shared/ │
│ ├── dashboard-metrics.json │
│ ├── dashboard-alerts.json │
│ └── dashboard-logs.json │
└─────────────────────────────────────────────────────┘
↕ ↕
Git Sync (shared/) Git Sync (shared/)
↕ ↕
┌────────────────────┐ ┌────────────────────┐
│ Master Grafana │ │ Replica Grafana │
│ (Active) │ │ (Standby) │
│ │ │ │
│ Repository: │ │ Repository: │
│ - path: shared/ │ │ - path: shared/ │
└────────────────────┘ └────────────────────┘
│ │
└───────────┬───────────────────┘
↓
┌──────────────────────┐
│ Reverse Proxy │
│ (Failover) │
└──────────────────────┘
Структура репозитория
В Git:
your-org/grafana-manifests
└── shared/
├── dashboard-metrics.json
├── dashboard-alerts.json
└── dashboard-logs.json
В представлении Dashboards в Grafana (оба экземпляра):
Dashboards
└── 📁 grafana-manifests/
├── Metrics Dashboard
├── Alerts Dashboard
└── Logs Dashboard
- Основной экземпляр и реплика показывают идентичную структуру папок.
- Оба синхронизируются из одного и того же пути
shared/. - Обратный прокси направляет трафик на основной (активный) экземпляр.
- При отказе основного экземпляра прокси автоматически переключается на реплику (режим ожидания).
- Пользователи видят одни и те же дашборды независимо от того, какой экземпляр обслуживает трафик.
Параметры конфигурации
И основной экземпляр, и реплика используют одинаковые параметры:
Основной экземпляр:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
shared/
Экземпляр-реплика:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
shared/
Как это работает
- Оба экземпляра остаются синхронизированными через Git.
- Обратный прокси направляет трафик на основной экземпляр.
- Пользователи вносят изменения на основном экземпляре. Git Sync фиксирует изменения.
- Оба экземпляра подтягивают последние изменения, чтобы реплика оставалась синхронизированной.
- При отказе основного экземпляра прокси переключается на реплику.
Особенности отработки отказа
- Проверки работоспособности и мониторинг.
- Непрерывная синхронизация для минимизации потери данных.
- Планирование обратного переключения (автоматического или ручного).
Сценарий с балансировщиком нагрузки
Запустите несколько активных экземпляров Grafana за балансировщиком нагрузки. Все экземпляры синхронизируются из одного и того же расположения в Git.
Когда использовать
- Высокий трафик: вашему развёртыванию нужно выдерживать значительную пользовательскую нагрузку.
- Распределение нагрузки: вы хотите распределять пользовательские запросы между экземплярами.
- Максимальная доступность: вам нужна непрерывность обслуживания во время обслуживания или отказов.
- Масштабируемость: вы хотите добавлять экземпляры по мере роста нагрузки.
- Производительность: пользователям нужно быстрое время отклика при высокой нагрузке.
Архитектура
┌─────────────────────────────────────────────────────┐
│ GitHub Repository │
│ Repository: your-org/grafana-manifests │
│ Branch: main │
│ │
│ grafana-manifests/ │
│ └── shared/ │
│ ├── dashboard-metrics.json │
│ ├── dashboard-alerts.json │
│ └── dashboard-logs.json │
└─────────────────────────────────────────────────────┘
↕ ↕
Git Sync (shared/) Git Sync (shared/)
↕ ↕
┌────────────────────┐ ┌────────────────────┐
│ Grafana Instance 1│ │ Grafana Instance 2│
│ (Active) │ │ (Active) │
│ │ │ │
│ Repository: │ │ Repository: │
│ - path: shared/ │ │ - path: shared/ │
└────────────────────┘ └────────────────────┘
│ │
└───────────┬───────────────────┘
↓
┌──────────────────────┐
│ Load Balancer │
│ (Round Robin) │
└──────────────────────┘
Структура репозитория
В Git:
your-org/grafana-manifests
└── shared/
├── dashboard-metrics.json
├── dashboard-alerts.json
└── dashboard-logs.json
В представлении Dashboards в Grafana (все экземпляры):
Dashboards
└── 📁 grafana-manifests/
├── Metrics Dashboard
├── Alerts Dashboard
└── Logs Dashboard
- Все экземпляры показывают идентичную структуру папок.
- Все экземпляры синхронизируются из одного и того же пути
shared/. - Балансировщик нагрузки распределяет запросы между всеми активными экземплярами.
- Любой экземпляр может обслуживать запросы на чтение.
- Любой экземпляр может принимать изменения дашбордов.
- Изменения распространяются на все экземпляры через Git.
Параметры конфигурации
Все экземпляры используют одинаковые параметры:
Экземпляр 1:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
shared/
Экземпляр 2:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
shared/
Как это работает
- Все экземпляры остаются синхронизированными через Git.
- Балансировщик нагрузки распределяет входящий трафик между всеми активными экземплярами.
- Пользователи могут просматривать дашборды с любого экземпляра.
- Когда пользователь изменяет дашборд на любом экземпляре, Git Sync фиксирует изменение.
- Все остальные экземпляры подтягивают обновлённый дашборд во время следующего цикла синхронизации или мгновенно, если настроены вебхуки.
- При отказе одного экземпляра балансировщик нагрузки перестаёт направлять на него трафик, а остальные экземпляры продолжают обслуживание.
Важные особенности
- Согласованность в конечном счёте: из-за интервалов синхронизации экземпляры могут на короткое время иметь разные версии дашбордов.
- Одновременное редактирование: когда несколько пользователей редактируют один и тот же дашборд на разных экземплярах, могут возникать конфликты.
- Общая база данных: экземпляры должны использовать одну и ту же серверную базу данных для пользовательских сессий, настроек и аннотаций.
- Дизайн без сохранения состояния: по возможности проектируйте систему без сохранения состояния, чтобы максимально повысить эффективность балансировки нагрузки.