Apache Zookeeper
Apache ZooKeeper는 대규모 분산 시스템을 위한 중앙 집중식 구성 관리, 동기화 서비스, 이름 서비스를 제공하는 오픈소스 프로젝트이다. 원래는 Hadoop에서 고가용성과 노드 간 협력을 위해 개발되었으며, 현재는 Kafka, HBase, Solr 등 다양한 분산 시스템의 필수 컴포넌트로 활용되고 있다.
ZooKeeper는 “작은 코디네이터 서버”라는 개념으로, 분산 환경에서의 일관성(consistency), 가용성(availability), 장애 복구(failover) 등을 보장하는 데 필수적인 기능들을 제공하고 있다.
주요 특징
- 중앙 집중형 메타데이터 관리: 모든 클러스터 구성 정보와 상태를 중앙에서 관리.
- ZNode 기반 트리 구조: 파일 시스템과 유사한 데이터 구조를 통해 빠르고 구조적인 접근 지원.
- watch 기능: 노드 상태 변경을 감지하여 실시간 이벤트 기반 처리 가능.
- 순서 보장 및 원자성: 분산 환경에서도 순서와 원자성을 유지하는 트랜잭션 제공.
- Leader 선출 메커니즘: 여러 서버 중 하나를 리더로 자동 선출하여 마스터 노드 역할 수행.
- 고가용성: 여러 노드로 구성된 클러스터를 통해 장애 발생 시 자동 복구 및 지속 서비스 가능.
장점
- 일관된 분산 시스템 운영: 노드 간 충돌을 방지하고 상태를 통일적으로 관리 가능.
- 자동 장애 복구: 서버가 다운되면 자동으로 리더를 재선출하여 무중단 운영 가능.
- 높은 성능과 확장성: 수천 개의 노드와의 통신도 빠르게 처리할 수 있는 경량 구조.
- 간단한 API: Java, C 등 다양한 언어로 클라이언트 API를 제공.
- 안정적인 상태 저장: 변경 이력은 WAL(Write-Ahead Log)로 디스크에 안전하게 기록됨.
관련 용어
- ZNode: ZooKeeper에서 데이터를 저장하는 노드 단위. 계층적 트리 구조를 갖는다.
- Watch: ZNode의 상태 변화를 감지하고 알림을 제공하는 비동기 이벤트 처리 방식.
- Leader Election: ZooKeeper 내부에서 하나의 리더 서버를 자동으로 선출하는 기능.
- Session: 클라이언트와 ZooKeeper 간의 연결 단위. 타임아웃 시 자동 종료된다.
- Ensemble: ZooKeeper 클러스터를 구성하는 여러 개의 서버 집합.
주요 솔루션 및 사용 사례
- 주요 솔루션
- Apache Kafka: 메시지 브로커에서 파티션 리더 선출과 클러스터 메타데이터 저장에 ZooKeeper를 사용하였다 (단, 최근 버전은 ZooKeeper 제거 중).
- HBase: 메타데이터 저장과 RegionServer 상태 관리에 활용됨.
- Apache Solr: 분산 색인 클러스터 구성 및 리더 노드 관리에 사용됨.
- Mesos / Hadoop YARN: 클러스터 상태 추적과 리소스 관리의 기반 구성 요소로 동작함.
- Curator: ZooKeeper API의 복잡성을 줄이기 위해 Netflix가 개발한 고급 클라이언트 라이브러리.
- 사용 사례
- 분산 락 관리: 여러 노드에서 동시에 접근하지 못하도록 락(lock)을 설정하여 충돌 방지.
- 리더 선출 자동화: 분산 서버 중 하나를 리더로 지정하고 실패 시 자동 교체.
- 메타데이터 저장소: 클러스터 구성 정보, 상태, 트래픽 조절 파라미터 등을 중앙 저장.
- 서비스 디스커버리: 새로운 노드가 등록되면 자동으로 클라이언트가 이를 탐지 가능.
- 구성 정보의 실시간 변경 적용: 설정 파일 변경 시 서버를 재시작하지 않고 반영 가능.

