고가용성 환경을 위한 Git Sync
고가용성 환경을 위한 Git Sync
이 문서에서는 고가용성(HA) 환경에서 Git Sync를 구성하는 두 가지 시나리오를 안내합니다. 기본-복제(primary–replica) 시나리오와 로드 밸런서 시나리오를 통해 장애 조치와 부하 분산을 구현하는 방법을 설명해요.
출처: 문서
본문
기본-복제(primary–replica) 시나리오
장애 조치를 가능하게 하려면 기본 Grafana 인스턴스와 같은 Git 위치에서 동기화되는 하나 이상의 복제본을 함께 사용하세요.
이런 경우에 사용하세요
- 자동 장애 조치: 기본 인스턴스가 실패할 때 서비스 연속성이 필요해요.
- 고가용성: 조직이 보장된 대시보드 가용성을 요구해요.
- 간단한 HA 설정: 액티브-액티브(active–active)의 복잡성 없이 고가용성을 원해요.
- 유지보수 창: 다른 인스턴스가 트래픽을 처리하는 동안 업데이트를 수행해요.
- 비즈니스 연속성: 대시보드 접근이 다운타임을 견딜 수 없어요.
아키텍처
┌─────────────────────────────────────────────────────┐
│ 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
Grafana 대시보드 보기(두 인스턴스 모두):
Dashboards
└── 📁 grafana-manifests/
├── Metrics Dashboard
├── Alerts Dashboard
└── Logs Dashboard
- 기본(master) 인스턴스와 복제본 인스턴스가 동일한 폴더 구조를 보여줘요.
- 둘 다 같은
shared/경로에서 동기화해요. - 리버스 프록시는 트래픽을 기본(활성) 인스턴스로 라우팅해요.
- 기본 인스턴스가 실패하면 프록시가 자동으로 복제본(대기)으로 장애 조치해요.
- 어떤 인스턴스가 트래픽을 서빙하든 사용자는 같은 대시보드를 봐요.
구성 매개변수
기본 인스턴스와 복제 인스턴스 모두 동일한 매개변수를 사용해요:
기본 인스턴스:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
shared/
복제 인스턴스:
- Repository:
your-org/grafana-manifests - Branch:
main - Path:
shared/
동작 방식
- 두 인스턴스 모두 Git을 통해 동기화된 상태를 유지해요.
- 리버스 프록시는 트래픽을 기본 인스턴스로 라우팅해요.
- 사용자는 기본 인스턴스에서 편집해요. Git Sync가 변경 사항을 커밋해요.
- 두 인스턴스 모두 최신 변경 사항을 가져와 복제본을 동기화된 상태로 유지해요.
- 기본 인스턴스가 실패하면 프록시가 복제본으로 장애 조치해요.
장애 조치 고려 사항
- 상태 확인(health checks)과 모니터링.
- 데이터 손실을 최소화하기 위한 지속적인 동기화.
- 폴백(failback)(자동 또는 수동) 계획.
로드 밸런서 시나리오
로드 밸런서 뒤에서 여러 활성 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
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가 변경 사항을 커밋해요.
- 다른 모든 인스턴스는 다음 동기화 주기에서 업데이트된 대시보드를 가져와요. 혹은 웹훅이 구성되어 있으면 즉시 가져와요.
- 인스턴스 하나가 실패하면 로드 밸런서가 그 인스턴스로의 트래픽 라우팅을 중단하고 나머지 인스턴스가 계속 서빙해요.
중요한 고려 사항
- 결과적 일관성(Eventually consistent): 동기화 주기 때문에 인스턴스가 잠시 다른 대시보드 버전을 가질 수 있어요.
- 동시 편집: 서로 다른 인스턴스에서 여러 사용자가 같은 대시보드를 편집하면 충돌이 발생할 수 있어요.
- 데이터베이스 공유: 인스턴스는 사용자 세션, 기본 설정, 주석을 위해 같은 백엔드 데이터베이스를 공유해야 해요.
- 무상태 설계: 로드 밸런싱 효과를 극대화하려면 가능한 한 무상태(stateless) 운영을 위해 설계하세요.