CrateDB 클러스터링 아키텍처와 고가용성(HA) 메커니즘 관련 정리

choi·2025년 12월 29일

Docker Compose 기반 3-Node CrateDB 클러스터 구축 시 필수적인 핵심 개념(Node, Shard, Replica)과 장애 발생 시 자동 복구(Failover) 프로세스 정리.


1. 핵심 아키텍처 정의

🔹 노드 (Node)

  • 정의: 클러스터를 구성하는 하나의 서버 인스턴스(컨테이너).
  • 역할: 데이터 저장, 클라이언트 요청 처리 및 노드 간 통신을 통한 클러스터 형성.
  • 구성: 현재 3개의 컨테이너(node1, node2, node3)가 하나의 논리적 클러스터(crate-cluster)로 결합.

🔹 샤드 (Shard)

  • 정의: 대용량 데이터의 분산 저장을 위해 테이블을 논리적으로 분할한 단위.
  • 목적: 데이터 수평적 확장(Scale-out) 및 병렬 처리 지원.
  • 설정: 별도 설정 부재 시 테이블당 기본 4개의 샤드로 분할 및 노드 간 균등 배포.

🔹 레플리카 (Replica)

  • 정의: 데이터 유실 방지를 위한 원본 샤드(Primary Shard)의 복제본.
  • 규칙: 가용성 보장을 위해 반드시 원본 샤드와 서로 다른 노드에 배치.
  • 설정: 3-Node 구성 시 replicas=1 (원본 1 + 사본 1) 자동 적용.

2. 데이터 저장 프로세스 (Normal State)

데이터 쓰기(INSERT) 요청 시의 내부 처리 흐름.

  1. 라우팅 (Routing): 데이터 ID의 해시(Hash) 연산을 통해 저장될 샤드 위치 결정.
  2. 동기 복제 (Synchronous Replication):
    • Primary Shard(원본) 기록: 라우팅된 노드의 원본 샤드에 데이터 기록.
    • Replica Shard(복제본) 전파: 즉시 다른 노드의 복제본 샤드로 데이터 전송 및 기록 요청.
    • 응답(Ack): 원본과 복제본 모두 저장 완료 확인 후 클라이언트에 성공 응답 반환.
  3. 특징: 강력한 데이터 정합성(Consistency) 보장 및 단일 노드 장애 시 데이터 유실 방지.

3. 장애 대응 및 자동 복구 (Failover Scenario)

시나리오: 정상 운영(Green) 중 Node 3 다운 발생 시 클러스터의 대응 메커니즘.

단계 1: 장애 감지 및 승격 (Failover)

Node 3에 위치하던 Primary Shard 소실 발생.

  • 승격 (Promotion): 잔존 노드(Node 1 또는 2)에 위치한 Replica Shard를 즉시 Primary Shard로 승격.
  • 가용성 유지: 새로운 Primary를 통해 읽기/쓰기 서비스 지속.
  • 상태 변경: 클러스터 상태 GreenYellow 전환 (서비스 정상, 복제본 부족 상태).

단계 2: 재복제 (Re-replication / Self-Healing)

승격 후 replicas=1 정책 미달(Replica 부재) 상태 해소 과정.

  • 복제 수행: 잔존 노드 중 데이터가 없는 노드에 새로운 Replica Shard 생성 및 데이터 복사.
  • 복구 완료: 원본 1 + 사본 1 구조 재확립.
  • 상태 변경: 클러스터 상태 YellowGreen 복귀.

4. 노드 복구와 동기화 (Node Recovery)

다운되었던 Node 3 재기동 및 클러스터 재합류 시 동작.

Peer Recovery (델타 동기화)

전체 데이터 복사가 아닌 효율적인 복구 수행.

  1. 비교 (Check): Node 3의 데이터 상태와 현재 Primary Shard의 상태 비교.
  2. 동기화 (Sync): 다운타임 동안 발생한 변경분(Delta) 트랜잭션만 전송 및 반영.
  3. 리밸런싱 (Rebalancing): 데이터 균형을 위해 특정 노드에 편중된 샤드를 Node 3로 재배치.

5. 요약: 추상화와 투명성

애플리케이션(Client) 관점에서의 이점.

  • 투명성 (Transparency): 샤딩, 복제, 승격 등 내부 복잡성은 DBMS 엔진이 전담. 개발자는 물리적 노드 상태와 무관하게 논리적 엔드포인트 사용.
  • 코디네이터 노드 (Coordinator Node): 클라이언트 요청을 수신한 노드가 최신 클러스터 메타데이터를 기반으로 정확한 데이터 위치(Primary Shard)로 쿼리 라우팅 수행.
  • 결론: 인프라 장애 발생 시에도 지속적인 서비스 제공(High Availability)데이터 무결성 보장.
profile
늦게나마 정신을 차리려고 하는 개발 뭐시기하는 사람

0개의 댓글