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) 요청 시의 내부 처리 흐름.
- 라우팅 (Routing): 데이터 ID의 해시(Hash) 연산을 통해 저장될 샤드 위치 결정.
- 동기 복제 (Synchronous Replication):
- Primary Shard(원본) 기록: 라우팅된 노드의 원본 샤드에 데이터 기록.
- Replica Shard(복제본) 전파: 즉시 다른 노드의 복제본 샤드로 데이터 전송 및 기록 요청.
- 응답(Ack): 원본과 복제본 모두 저장 완료 확인 후 클라이언트에 성공 응답 반환.
- 특징: 강력한 데이터 정합성(Consistency) 보장 및 단일 노드 장애 시 데이터 유실 방지.
3. 장애 대응 및 자동 복구 (Failover Scenario)
시나리오: 정상 운영(Green) 중 Node 3 다운 발생 시 클러스터의 대응 메커니즘.
단계 1: 장애 감지 및 승격 (Failover)
Node 3에 위치하던 Primary Shard 소실 발생.
- 승격 (Promotion): 잔존 노드(Node 1 또는 2)에 위치한 Replica Shard를 즉시 Primary Shard로 승격.
- 가용성 유지: 새로운 Primary를 통해 읽기/쓰기 서비스 지속.
- 상태 변경: 클러스터 상태
Green ➜ Yellow 전환 (서비스 정상, 복제본 부족 상태).
단계 2: 재복제 (Re-replication / Self-Healing)
승격 후 replicas=1 정책 미달(Replica 부재) 상태 해소 과정.
- 복제 수행: 잔존 노드 중 데이터가 없는 노드에 새로운 Replica Shard 생성 및 데이터 복사.
- 복구 완료: 원본 1 + 사본 1 구조 재확립.
- 상태 변경: 클러스터 상태
Yellow ➜ Green 복귀.
4. 노드 복구와 동기화 (Node Recovery)
다운되었던 Node 3 재기동 및 클러스터 재합류 시 동작.
Peer Recovery (델타 동기화)
전체 데이터 복사가 아닌 효율적인 복구 수행.
- 비교 (Check): Node 3의 데이터 상태와 현재 Primary Shard의 상태 비교.
- 동기화 (Sync): 다운타임 동안 발생한 변경분(Delta) 트랜잭션만 전송 및 반영.
- 리밸런싱 (Rebalancing): 데이터 균형을 위해 특정 노드에 편중된 샤드를 Node 3로 재배치.
5. 요약: 추상화와 투명성
애플리케이션(Client) 관점에서의 이점.
- 투명성 (Transparency): 샤딩, 복제, 승격 등 내부 복잡성은 DBMS 엔진이 전담. 개발자는 물리적 노드 상태와 무관하게 논리적 엔드포인트 사용.
- 코디네이터 노드 (Coordinator Node): 클라이언트 요청을 수신한 노드가 최신 클러스터 메타데이터를 기반으로 정확한 데이터 위치(Primary Shard)로 쿼리 라우팅 수행.
- 결론: 인프라 장애 발생 시에도 지속적인 서비스 제공(High Availability) 및 데이터 무결성 보장.