[MariaDB] Galera Cluster: Certification 기반 복제와 고가용성 전략
Galera Cluster는 Certification 기반 복제(Certification-Based Replication)를 통해 데이터베이스 동기화를 구현하며, 고가용성과 데이터 일관성이라는 두 가지 목표를 동시에 추구합니다. 이 글에서는 Galera Cluster의 동작 원리, 핵심 메커니즘, 그리고 실무 운영 전략까지 다루어 보겠습니다.
Galera Cluster란?
Galera Cluster는 멀티 마스터(Multi-Master) 구조를 가진 데이터베이스 클러스터입니다. 모든 노드가 읽기와 쓰기 작업을 처리할 수 있으며, Virtually Synchronous Replication 방식을 통해 분산 환경에서도 데이터 일관성을 유지합니다.
Virtually Synchronous Replication
Galera Cluster는 완전 동기 복제가 아니라, 트랜잭션을 로컬에서 낙관적으로 실행한 후 커밋 시점에 Certification을 통해 충돌 여부를 검증하는 방식을 채택합니다. 이 과정을 통해 거의 실시간 동기화를 달성하며, 이를 Virtually Synchronous Replication이라고 부릅니다.
Certification 기반 복제란?
Certification 기반 복제는 트랜잭션을 커밋하기 전에 충돌 검증(certification)을 통해 데이터의 무결성을 확인하는 방식입니다. 이 방식은 Galera Cluster가 Virtually Synchronous Replication을 구현하는 데 필수적인 여러 핵심 기술을 포함합니다. 주요 기술로는 다음이 있습니다:
- 그룹 커뮤니케이션 (Group Communication)
- Write Set
- 트랜잭션 재정렬 (Transaction Reordering)
- 데이터베이스 상태 기계 (Database State Machine)
핵심 구성 요소
그룹 커뮤니케이션 (Group Communication)
- 클러스터 내 노드 추가/제거를 관리합니다.
- 장애 감지를 수행해 비정상 노드를 클러스터에서 제거합니다.
- 서버 간 메시지를 재정렬해 트랜잭션 순서를 통일합니다.
글로벌 트랜잭션 순서 (Global Transaction Ordering)
- 모든 노드는 글로벌 트랜잭션 순서 번호(Global Transaction Order Number)를 사용하여 트랜잭션 순서를 일관되게 유지합니다.
- 이는 GTID(Global Transaction ID)와 유사하지만, Galera Cluster 고유의 메커니즘을 사용해 분산 환경에서도 순서 일관성(Consistency)을 확보할 수 있습니다.
트랜잭션 라이프 사이클
- 클라이언트가 트랜잭션 요청을 보냅니다.
- 서버는 트랜잭션을 낙관적으로(optimistic) 로컬 DB에 적용합니다.
- 트랜잭션을 Write Set으로 묶어 그룹 커뮤니케이션에 전달합니다.
- 그룹 커뮤니케이션은 메시지를 재정렬하고 모든 서버에 동일한 순서로 전파합니다.
- 각 서버는 트랜잭션 버전과 DB 버전을 비교하여 Certification을 수행합니다.
- 충돌이 없으면 커밋하고, 충돌이 있으면 롤백합니다.
Certification 동작 예시
단일 트랜잭션 처리
- 서버A에 클라이언트가
UPDATE
요청. - 서버A는 로컬에 적용 후 Write Set 생성.
- Group Communication이 Write Set을 전파.
- 각 서버는 트랜잭션 버전과 DB 버전을 비교:
- 버전 일치 시 커밋.
- 버전 불일치 시 롤백.
버전 번호는 트랜잭션 커밋 시마다 +1 증가합니다.
다중 트랜잭션 처리
- 서버A와 서버B 각각 다른 클라이언트 요청 수신.
- 서버A:
balance = 1000
으로 업데이트 (트랜잭션 T1) - 서버B:
balance = 2000
으로 업데이트 (트랜잭션 T2) - 두 Write Set이 Group Communication으로 전송되어 클러스터 내에서 순서가 결정됩니다. (예: T1이 T2보다 먼저 처리)
T1
은 Certification에 성공하고 커밋되어 balance 값이 1000으로 업데이트됩니다.- 이후
T2
가 Certification을 수행할 때,T2
가 수정하려는 데이터(balance)가 이미T1
에 의해 변경되었음을 감지하고 충돌이 발생해 롤백됩니다.
GCache와 상태 전송 (State Transfer)
노드 추가나 장애 복구 시 Galera Cluster는 데이터 일관성을 유지하기 위해 **상태 전송(State Transfer)**을 수행합니다.
- GCache: 트랜잭션 변경 내역을 메모리 또는 디스크에 저장하는 공간.
- IST (Incremental State Transfer): GCache에 남아 있는 변경 내역만 복제해 빠른 동기화 제공.
- SST (State Snapshot Transfer): 전체 데이터를 스냅샷 형태로 복제.
IST가 가능하면 빠른 복제가 가능하지만, GCache 범위를 초과한 경우 SST가 필요하며, 이때는 전체 데이터를 복사하므로 시간이 오래 걸릴 수 있습니다.
운영 전략: 단일 노드 쓰기 집중
모든 노드가 쓰기가 가능하지만, 트랜잭션 충돌을 최소화하기 위해 실무에서는 다음과 같은 방법으로 단일 노드에 쓰기 트래픽을 집중시키는 전략이 사용됩니다:
- 로드 밸런서 설정: 쓰기 트래픽을 특정 노드로만 라우팅.
- 애플리케이션 레벨 제어: 쓰기 노드를 애플리케이션에서 지정.
이 전략을 통해 충돌 가능성을 줄이고, 성능을 최적화할 수 있습니다.
Certification과 충돌 검증
Galera Cluster의 Certification은 트랜잭션 충돌(Conflict)을 검증하는 과정입니다.
이는 전통적인 락 기반 시스템의 데드락(Deadlock)과는 근본적으로 다릅니다. 충돌이 발견되면 해당 트랜잭션은 즉시 롤백(Rollback)됩니다.
마치며
Galera Cluster는 멀티 마스터 환경에서도 데이터 일관성과 고가용성을 동시에 제공하기 위해 독특한 메커니즘을 채택했습니다.
- Write-Set 기반 복제
- Global Transaction Ordering
- Certification 기반 충돌 검증
- GCache를 활용한 빠른 상태 전송
이러한 구조 덕분에 Galera Cluster는 높은 신뢰성과 확장성을 동시에 만족할 수 있습니다. 그러나 워크로드 특성과 네트워크 환경을 고려해 적절한 운영 전략과 최적화가 필수적입니다.
댓글
댓글 쓰기