ZAB(Zookeeper Atomic Boradcast) Protocol
Zookeeper 에서 데이터 일관성을 보장하기 위해 사용하는 합의 프로토콜
즉, 여러 Zookeeper 서버가 동일한 데이터를 가지도록 만드는 방법이 ZAB
요약
- 하나의 리더가 모든 쓰기를 처리하고, 나머지 서버들과 동기화하면서 과반수 동의가 있을 때만 커밋하는 방식
작동 방식
- 쓰기 요청이 들어오면?
- 클라이언트가 리더에게 요청함
- 리더는 "이거 반영해도 될까?" 하고 팔로워들에게 제안
- 팔로워가 응답하면?
- 팔로워들이 "OK" 하면 응답을 보냄 (ack)
- 과반수(ex. 3대 중 2대 이상) 응답하면 리더는 커밋 결정
- 커밋!
- 리더가 "됐어! 확정이야!" 라고 커밋
- 팔로워에게도 "이걸 반영해" 신호를 줌
특징
단일 리더 구조
항상 하나의 리더만 쓰기 처리
순서 보장
모든 서버가 같은 순서로 데이터를 처리
과반수 합의 필요
안정성 보장 (장애 상황에서도 안전하게도 동작)
복구 기능 있음
장애 후 교체 시 데이터 동기화 과정 수행
장애 상황에서는?
- 리더가 죽으면 -> 새 리더 선출
- 새 리더는 팔로워와 상태 맞춰서 정확한 위치부터 다시 복구 시작