[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)을 확보할 수 있습니다.

트랜잭션 라이프 사이클

  1. 클라이언트가 트랜잭션 요청을 보냅니다.
  2. 서버는 트랜잭션을 낙관적으로(optimistic) 로컬 DB에 적용합니다.
  3. 트랜잭션을 Write Set으로 묶어 그룹 커뮤니케이션에 전달합니다.
  4. 그룹 커뮤니케이션은 메시지를 재정렬하고 모든 서버에 동일한 순서로 전파합니다.
  5. 각 서버는 트랜잭션 버전DB 버전을 비교하여 Certification을 수행합니다.
  6. 충돌이 없으면 커밋하고, 충돌이 있으면 롤백합니다.

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는 높은 신뢰성과 확장성을 동시에 만족할 수 있습니다. 그러나 워크로드 특성과 네트워크 환경을 고려해 적절한 운영 전략과 최적화가 필수적입니다.

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용