UPM for Enterprise 고가용성 아키텍처
저희 플랫폼은 다층적인 접근 방식으로 고가용성을 구현합니다:
- 구성 가능한 상태 점검과 복구 절차를 갖춘 자동 페일오버 오케스트레이션
- 지리적 이중화를 위한 영역 간 및 리전 간 배포 전략
- Unit Operator를 통한 지능형 워크로드 분산과 최적의 리소스 활용
- 실시간 모니터링과 사전 예방적 장애 방지
- 특정 시점 복구(PITR)를 지원하는 자동 백업 관리
플랫폼의 Unit Operator는 Kubernetes 고유의 메커니즘과 함께 동작하여, 계획된 유지보수와 예기치 않은 장애 상황 모두에서 데이터 무결성을 지키면서 서비스 가동 시간을 유지합니다. 이 아키텍처를 통해 엔터프라이즈 고객은 운영 오버헤드를 크게 줄이면서 가용성 SLA를 달성할 수 있습니다.
미션 크리티컬 배포의 경우, UPM은 기본적인 Pod 재스케줄링을 넘어 프라이머리-세컨더리 복제, 멀티 노드 클러스터, 여러 가용 영역에 걸친 분산 시스템 등 복잡한 데이터 서비스 토폴로지를 정교하게 오케스트레이션합니다.
UPM for Enterprise는 혁신적인 Compose Operator를 통해 고급 고가용성 기능을 제공합니다. Compose Operator는 Kubernetes와 OpenShift 환경에서 실행되는 엔터프라이즈 데이터 서비스의 정교한 복제 토폴로지와 페일오버 메커니즘을 오케스트레이션합니다.
아래 섹션에서는 세 가지 핵심 구성 요소인 UPM Platform, UPM Engine, 그리고 그 위에서 실행되는 데이터 서비스를 통해 UPM for Enterprise 관리 플레인의 고가용성 설계와 아키텍처를 자세히 설명합니다.
UPM Platform 고가용성 아키텍처
UPM for Enterprise는 Spring Cloud 프레임워크를 기반으로 개발되었으며, 모듈 설계는 다음 표와 같습니다:
| 번호 | 이름 | 설명 |
|---|---|---|
| 1 | upm-control-gateway | Gateway API 모듈은 외부 요청을 받아 해당 마이크로서비스 모듈로 라우팅합니다 |
| 2 | upm-control-auth | Auth 모듈은 사용자 인증과 권한 관리를 담당합니다 |
| 3 | upm-control-resource | Resource 모듈은 프로젝트, Kubernetes 클러스터, 노드, 스토리지 클래스, 소프트웨어 등 시스템 리소스를 관리합니다 |
| 4 | upm-control-user | User 모듈은 사용자 정보의 관리와 운영을 담당합니다. |
| 5 | upm-control-operatorlog | OperatorLog 모듈은 시스템 작업 로그를 기록하여 시스템 작업을 추적할 수 있도록 합니다. |
| 6 | upm-control-mysql-ms | MySQL 서비스 모듈은 MySQL 데이터베이스를 위한 완전한 운영·유지보수 워크플로 제어 및 관리 기능을 제공합니다. |
| 7 | upm-control-postgresql-ms | PostgreSQL 서비스 모듈은 PostgreSQL 데이터베이스를 위한 완전한 운영·유지보수 워크플로 제어 및 관리 기능을 제공합니다. |
| 8 | upm-control-redis-ms | Redis 서비스 모듈은 Redis 캐시를 위한 완전한 운영·유지보수 워크플로 제어 및 관리 기능을 제공합니다. |
| 9 | upm-control-redis-cluster-ms | Redis-Cluster 서비스 모듈은 Redis 클러스터 캐시를 위한 완전한 운영·유지보수 워크플로 제어 및 관리 기능을 제공합니다. |
| 10 | upm-control-kafka-ms | Kafka 서비스 모듈은 Kafka 이벤트 스트림을 위한 완전한 운영·유지보수 워크플로 제어 및 관리 기능을 제공합니다. |
| 11 | upm-control-zookeeper-ms | Zookeeper 서비스 모듈은 Zookeeper 서비스 디스커버리를 위한 완전한 운영·유지보수 워크플로 제어 및 관리 기능을 제공합니다. |
| 12 | upm-control-elasticsearch-ms | Elasticsearch 서비스 모듈은 Elasticsearch 검색 엔진을 위한 완전한 운영 워크플로 제어 및 관리 기능을 제공합니다. |
UPM Engine 고가용성 아키텍처
UPM Engine은 Operator 패턴으로 개발되었으며, 리더 선출(Leader Election) 메커니즘을 통해 컨트롤러의 고가용성을 보장합니다. 고가용성 설계의 세부 내용은 다음과 같습니다:
- 단일 노드 장애로부터 신속하게 복구하여 Operator의 지속적인 가용성 보장
- 리더 선출을 통해 언제나 하나의 레플리카만 리소스 이벤트를 처리하도록 보장하여 경쟁 조건과 충돌 방지
- 신속한 페일오버 기능으로 안정적인 Operator 운영 유지
Operator는 엔터프라이즈 프로덕션 환경에서 최대의 안정성을 발휘하도록 설계되었습니다. 이중화가 내장된 분산 배포 모델을 채택하여 Kubernetes 클러스터 전반에서 여러 레플리카로 실행됩니다. 권장 구성인 3개 이상의 레플리카는 유지보수 시간이나 예기치 않은 노드 장애 중에도 지속적인 운영을 보장합니다. 고급 Pod 안티 어피니티 규칙을 통해 지능적인 워크로드 배치를 구현하여 Operator 인스턴스를 서로 다른 노드와 가용 영역에 자동으로 분산합니다. 이 아키텍처는 단일 장애 지점을 방지하고 운영 복원력을 유지합니다.
리더 선출과 페일오버 Operator는 Kubernetes Lease 객체를 사용해 리더 선출을 구현하여 분산 환경에서 여러 레플리카를 조율합니다. 이를 통해 자동 페일오버 기능을 유지하면서 정확히 하나의 인스턴스만 리소스를 능동적으로 관리하도록 보장합니다.
리더십 조율 시스템은 상태 관리 프로토콜을 사용하여 레플리카의 동작과 리더십 전환을 제어합니다. 프라이머리와 스탠바이 레플리카가 상태 점검과 상태 동기화를 유지하여, 중단을 최소화한 매끄러운 페일오버를 가능하게 합니다.
고가용성 구성
주요 매개변수를 구성하여 고가용성 동작을 최적화할 수 있습니다:
- 리더십 임대 기간: 리더가 갱신 없이 제어권을 유지할 수 있는 최대 시간을 제어
- 상태 점검 간격: 장애를 얼마나 빨리 감지할지 결정
- 리더십 갱신 기한: 임대 갱신 작업의 한계를 설정
페일오버 프로세스
페일오버 시스템은 정해진 순서에 따라 동작합니다:
- 상태 모니터링 Kubernetes Lease 객체를 통해 리더의 상태를 모니터링하며, 모니터링 간격은 환경의 요구 사항에 맞게 구성할 수 있습니다.
- 리더십 전환 리더를 사용할 수 없음을 감지하면 리더십 전환 프로세스를 시작합니다. 스탠바이 레플리카는 Kubernetes 고유의 동시성 제어를 통해 조율하여 리더십 획득이 정확히 한 번만 이루어지도록 보장합니다.
- 상태 조정(리컨실) 새 리더는 리더십을 넘겨받으면 다음 단계를 수행합니다:
- 관리 중인 모든 리소스를 점검합니다
- 현재 상태를 원하는 구성과 대조합니다
- 필요한 조정 작업을 실행합니다
- 전환 과정 내내 일관성을 유지합니다
페일오버는 일반적으로 수 초 이내에 완료되며, 그동안 관리 리소스의 엄격한 일관성이 유지됩니다.
고급 스케줄링과 고가용성 설계
UPM은 Kubernetes에서 로컬 스토리지를 사용할 때의 고가용성을 위해 정교한 스케줄링 전략을 구현합니다. 프라이머리 노드와 세컨더리 노드가 서로 다른 물리 노드에 분산되도록 하여 내결함성을 극대화합니다.
스케줄링 아키텍처
스케줄링 시스템은 Kubernetes 고유의 메커니즘을 활용하여 Pod 배치를 제어합니다:
- 노드 어피니티 규칙이 운영 요구 사항에 따라 Pod를 특정 노드에 배치하도록 유도
- Pod 안티 어피니티 정책이 동일한 토폴로지 도메인에 여러 Pod가 스케줄링되는 것을 방지
호스트 그룹 관리
시스템은 노드 레이블(예: hostgroup=alpha, hostgroup=beta)을 사용해 호스트 그룹과 토폴로지를 정의합니다. 이 레이블 체계를 통해 스케줄러는 서로 다른 인프라 계층 전반에 걸친 Pod 분산에 대해 정보에 기반한 결정을 내릴 수 있습니다.
고가용성 전략
- 노드 수준 고가용성
- kubernetes.io/hostname을 이용한 Pod 안티 어피니티로 프라이머리와 세컨더리 노드를 서로 다른 호스트에 분산
- 단일 노드 장애로부터 보호
- 기본적인 고가용성 요구 사항에 가장 적합
- 호스트 그룹 고가용성
- hostgroup 레이블을 이용한 Pod 안티 어피니티로 서로 다른 호스트 그룹 간 분산 보장
- 랙 또는 영역 수준의 장애에 대해 강화된 보호 제공
- 호스트 그룹 전반에 충분한 리소스 필요
장애 감지와 복구
시스템은 다음을 통해 서비스 가용성을 유지합니다:
- 상태 모니터링: liveness 및 readiness 프로브를 통한 지속적인 상태 점검
- 자동 재스케줄링: 노드를 사용할 수 없게 되면 Kubernetes가 Pod를 재배치
- 페일오버 관리: 프라이머리 노드 장애 시 세컨더리 노드를 자동 승격
이 스케줄링 설계는 가용성과 일관성을 모두 우선시하여, 인프라 이벤트가 발생해도 필요한 토폴로지 분산을 유지하면서 서비스가 계속 운영되도록 합니다.
데이터 서비스 고가용성 아키텍처
MySQL 고가용성 관리
저희의 Compose Operator는 Pod 수명 주기를 직접 제어하지 않고 복제 관계를 관리함으로써 기존 Kubernetes Operator의 한계를 넘어섭니다. 이 고유한 아키텍처는 다음을 가능하게 합니다:
- 클러스터 내부와 외부 데이터베이스 인스턴스의 매끄러운 통합
- MySQL 프라이머리-세컨더리 복제 토폴로지의 자동 관리
- 지능형 Pod 레이블링을 통한 동적 읽기/쓰기 분리
- 페일오버 상황에서의 자동 프라이머리 노드 선출
- 복제 상태의 실시간 모니터링과 유지
PostgreSQL 고가용성 관리
PostgreSQL 배포를 위한 견고한 고가용성 솔루션을 제공합니다:
- 스트리밍 복제 구성과 유지보수 자동화
- 동기 및 비동기 복제 모드의 지능형 관리
- 고급 WAL(Write-Ahead Log) 아카이빙과 복구 오케스트레이션
- 페일오버 발생 시 스탠바이 인스턴스 자동 승격
- 복제 지연과 상태 메트릭의 포괄적인 모니터링
Redis 고가용성 솔루션
다음을 통해 Redis 배포에 포괄적인 고가용성을 제공합니다:
- Redis 프라이머리-세컨더리 복제 자동 관리
- Redis Sentinel 아키텍처와의 네이티브 통합
- 자동 슬롯 할당을 통한 지능형 Redis Cluster 오케스트레이션
- 클러스터 부하 패턴에 기반한 동적 샤드 재분배
- 서비스 중단을 최소화하는 자동 페일오버
고급 로드 밸런싱과 페일오버
UPM의 ProxySQL 통합은 정교한 트래픽 관리 기능을 제공합니다:
- MySQL 및 PostgreSQL 복제 토폴로지와의 실시간 동기화
- ProxySQL 서버 그룹 자동 유지보수
- 현재 데이터베이스 상태에 기반한 지능형 라우팅 규칙
- 세밀한 필터링을 통한 사용자 자동 동기화
- 데이터베이스 계층 전반의 매끄러운 페일오버 조율
- MySQL의 경우: 우선적으로 MySQL Router
- PostgreSQL의 경우: PostgreSQL 네이티브 커넥션 풀링 또는 PostgreSQL 커뮤니티가 제시하는 옵션
이 권장 사항은 엔터프라이즈 모범 사례에 부합하며, 데이터베이스 인프라의 최적 성능, 안정성, 지원 가능성을 보장하는 데 도움이 됩니다.
엔터프라이즈급 아키텍처
확장 가능한 Operator 프레임워크는 엔터프라이즈 요구 사항에 맞게 설계되었습니다:
- 토폴로지 관리 자동화를 통한 최소한의 운영 오버헤드
- 분산 데이터베이스 인스턴스 전반에 걸친 일관된 데이터 안정성
- 특정 비즈니스 요구에 맞춘 유연한 사용자 정의
- 포괄적인 모니터링 및 알림 통합
- 비즈니스 연속성을 위한 무개입(zero-touch) 페일오버 오케스트레이션