Zookeeper?
- 분산 처리 어플리케이션을 위한 코디네이터 시스템
- HA 구성 시 서비스간 데이터 공유, 서버 Health Check등을 해주는 역할
역할
-
설정 관리 (Configuration Management)
- Cluster의 설정 정보를 최신화 유지를 위한 조율 시스템
-
클러스터 관리 (Cluster Management)
- Cluster 추가 / 삭제 시 정보를 서버간 공유
-
리더 채택 (Leader Selection)
- Multi App중 Leader Node를 선정할 로직 생성
- 주로 복제된 여러 노드 중 연산이 이루어지는 1개의 노드를 택하는데 사용
-
락/동기화 서비스 ( Lock and Synchronization Service)
- Cluster 전체를 대상으로 동기화(Lock)하여 경쟁 상태를 방지하기 위해 사용
- 연산이 빈번한 경우 경쟁 상태가 될 수 있다
- 경쟁 상태
여러 프로세스가 동일 자원 접근 시도 데이터 불일치 야기
구성
Server
1개의 Leader, N개의 Follwer, N개의 Observer로 구성된다.
기본적으로 Ensemble 을 구성하기 위해 3개 이상의 홀수 Node가 존재해야한다.
- Leader
- Client가 제출한 모든 요청을 및 데이터 변경을 관리하는 역할
- 다른 서버들에게 상태 정보 분산
- 새로운 요청 처리
- 데이터 동기화
- Follwer
- Client가 제출한 요청을 Leader에게 전달 및 처리
- Leader Node의 상태를 동기화함
- Leader에게 문제가 발생하면 Voting을 통해 Leader로 선출됨
- Follwer가 많아지면 Throuput은 늘어나지만, Failover시 Voting에 시간 소모가 많음
- Observer
- Follwer Node의 일종
- 차이점 : Voting 권한이 없다.
- Leader가 될 수 없는 Node이다
- 차이점 : Voting 권한이 없다.
- Data Center의 Bridge, Message Bus의 Link 등의 역할로 활용
- Follwer Node의 일종
Request Processor
Client가 제출한 요청을 Chain으로 연결시켜 Sequential하게 처리하는 프로세스
일반적으로 Single-Thread
로 처리함
- Leader
- Follower / Client에게 받은 Transaction을 처리해줌
- Follower / Obserber
- Client에게 받은 Transaction을 Leader에게 전달
Atomic Broadcast
Zookeeper Server의 데이터 일관성을 ZAB
을 이용하여 보장
- zab : Zookeeper Atomic Broadcast Prodocol
- 수행 과정
- Client에게 요청받은 Leader은 Follower에게 Propose 요청
- Propose : 수행여부
Propose
받은 Follwer은 해당 Transaction 수행 허용 여부를Act
로 Leader에게 전달Act
를 받은 Leader은 Transaction 처리 명령을 Follwer들에게 Broadcast / Commit
- Client에게 요청받은 Leader은 Follower에게 Propose 요청
In-Memory DB
Znode를 적재하는 DB
- Local FS에 In-Memory DB정보를 Replication할 수 있다.
- Transaction Log가 일정량 이상 되면 Snapshot 후 In-Memory 데이터는 삭제한다.
- 장애 발생 시 Snapshot을 이용하여 복구
ZNode
Data / 계층을 생성하는 단위
Tree 구조로 구성되어 있다.
보유 데이터
- ACL( Access Control List )
- 접근 권한
- ACL Permissions
- 행위 권한 ( CRUD 등 )
- schemas
- 접근 위치 권한 (IP 등)
- stat
- Node의 정보( 생성 시간, Transaction ID…)
Node 종류
- Persistent Node
- 영구 노드 ( Non-Falsh)
- Ephemeral Node
- 휘발성 노드 (Flash )
- Sequence Node
- 순서가 있는 노드
Watcher
Znode의 변경 사항을 Client / Server에게 알려주는 역할
- Znode에 Watcher를 등록하여 사용
- 모니터링 / 알람 역할
Client
zookeeper의 In-Memory DB를 사용하는 Application
- Client는 Server에게 Heart beat를 전송한다
- timeout 발생
- client -> server
- server/Network Issue,
다른 서버에 연결
시도
- server/Network Issue,
- server -> client
- client/Network Issue, 해당
Session종료
- client/Network Issue, 해당
- client -> server
- timeout 발생
개인적으로 공부한 내용 포스팅 중
잘못된 정보는 지적해주시면 좋겠습니다!