이 글의 코드 및 정보들은 책을 바탕으로 작성하였습니다.
주키퍼(Zookeeper)
- 주키퍼는 분산 애플리케이션을 위한 코디네이션 시스템이다.
-
분산 애플리케이션이
안정적인 서비스를 할 수 있도록
분산되어 있는 각 애플리케이션의 정보를
중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.
-
주키퍼는 위 그림처럼
서버 여러 대를 앙상블(클러스터)로 구성한다.
-
분산 어플리케이션들이 각각 클라이언트가 되어
주키퍼 서버들과 커넥션을 맺은 후 상태 정보 등을 주고받는다.
지노드(Znode)
-
상태 정보들은 주키퍼의 지노드(Znode)라 불리는 곳에
Key-Value 형태로 저장된다.
-
지노드에 Key-Value 저장된 값을 이용하여
분산 애플리케이션들은 서로 데이터를 주고 받게 된다.
-
주키퍼에서 사용되는 지노드는
데이터를 저장하기 위한 공간 이름을 말한다.
파일이나 폴더 개념이라 생각하면 된다.
-
일반적으로 지노드에 저장되는 데이터 크기는
바이트(Byte) 에서 킬로바이트(Kilobyte) 정도로 매우 작다.
-
지노드는 일반적인 디렉토리와 비슷한 형태의 계층형 구조이다.
-
주키퍼의 각 지노드는
데이터 변경 등에 대한 유효성 검사등을 위해
버전 번호를 관리하게 되며
지노드의 데이터가 변경될 때마다 지노드의 버전 번호가 증가한다.
서비스 이용 조건
-
주키퍼는 신뢰성 있는 서비스를 위해
앙상블(클러스터)이라는 호스트 세트로 구성이 가능하다.
-
앙상블로 구성되어 있는 주키퍼는
과반수 방식에 따라 살아 있는 노드 수가 과반수 이상 유지된다면 지속적인 서비스가 가능하다.
Case 1.
-
앙상블을 3대로 구성
-
1대의 노드가 다운되더라도
과반수 이상(2) 살아 있기 때문에 지속적인 서비스 이용이 가능하다.
Case 2.
-
살아 있는 노드의 수가
과반수가 안되기 때문에 서비스 장애 상태에 빠진다.
Case 3.
-
2대 노드까지 다운되더라도
과반수 이상 살아있기 때문에 서비스 이용이 가능하다.