분산 코디네이션 서비스를 제공하는 오픈소스.
Leader-Follower로 구성되는 Master-slave 아키텍처를 기반으로 구성됨.
글로벌락, 클러스터 정보, Leader 선출 등을 구현해야하는 곳에 활용
주키퍼는 클러스터에서 구성 서버들끼리 공유되는 데이터를 유지하거나 어떤 연산을 조율하기 위해 사용됨
설정 관리 (Configuration management) : 클러스터의 설정 정보를 최신으로 유지하기 위한 조율 시스템
클러스터 관리 (Cluster management) : 클러스터의 서버가 추가되거나 제외될 때의 정보를 클러스터 내 서버들이 공유할 수 있게 함
리더 채택 (Leader selection) : 다중 어플리케이션 중에서 어떤 노드를 리더로 선출할지 정하는 로직을 만드는데 사용.
락, 동기화 서비스 (Locking and Synchronization service) : 클러스터에 쓰기 연산이 빈번할 경우 경쟁 상태에 들어갈 가능성이 커짐 -> 데이터 불일치 발생 ==> 클러스터 전체를 대상으로 동기화 하여 (락을 검) 경쟁 상태에 들어갈 경우를 방지.
!zookeeper_arch.png!
클라이언트는 주키퍼 앙상블에 접근하여 znode의 데이터를 읽거나 업데이트 함.
앙상블 내 주키퍼 서버들은 조율된 상태이며 항상 동일한 데이터를 가지고 있음. => 어느 서버에서 데이터를 읽어도 똑같음
주키퍼 서버에 쓰기 동작을 한다면:
주키퍼는 znode를 통해 글로벌락, 동기화, 리더 채택 등의 기능을 구현할 수 있음.
클라이언트 관점에서 서버에 접속할 시 보게 되는 것은 znode임. znode는 리눅스 파일 시스템과 유사한 구조.
/
/app1 , /app2
/app1/p_1 , /app1/p_2 , /app1/p_3
Version number : znode의 데이터가 업데이트 될 때마다 버전 넘버가 계속 업데이트됨. 다수의 client가 특정 연산을 같은 znode에 수행할때 필요.
ACL : znode에 접근하기 위한 권한 제어, znode의 읽기 쓰기 연산을 통제.
Timestamp : znode가 생성된 후 경과된 시간, 업데이트된 시간 제공. ms 단위.
Data length : 주키퍼의 데이터 크기, 1MB까지 저장 가능.
영속 znode (Persistence znode) : 영속 znode를 만든 클라이언트의 접속이 끊어져도 계속 살아있음. znode가 만들어질 때 default로 영속 znode가 만들어짐. 클러스터 관리 로직 구현에 역할을 함.
임시 znode (Ephemeral znode) : 임시 znode를 만든 클라이언트의 접속이 끊어지면 사라짐. 자식 znode를 가질 수 없음. 리더 선출 구현에 사용됨.
연속형 znode (Sequential znode) : 영속적일수도 임시적일수도 있음. 연속형 znode가 만들어질 때 10자리 연속된 숫자를 가진 이름을 가지게 됨. 락 또는 글로벌 큐 구현에 사용됨.
예) '/app' 이라는 연속형 znode 생성 명령 => '/app0000000001', '/app0000000002', ...가 생성됨.