Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Zookeeper

Apache Zookeeper는 대규모의 분산시스템 관리를 도와주는 애플리케이션이다. 분산 설정 서비스, 서비스 동기화, 이름 관리(naming registry)등의 기능을 이용해서 분산시스템을 관리한다. Hadoop의 서브 프로젝트로 시작했는데, (2104년 12월)지금은 top-level 프로젝트다.

예전부터 관심은 가지고 있었으나 분산처리 시스템 관리를 할 필요가 없어서, 잊어버리고 있었다. 최근 MQTT Cluster 구성과 관련된 고민을 하면서, 주키퍼를 공부하기로 마음 먹었다.

Distributed Coordination Service for Distributed Application

분산 애플리케이션을 위한 분산 관리(코디네이터)시스템으로 정의 할 수 있다. 주키퍼를 이용해서 응용 프로그램의 동기화, 구성관리, 설정관리와 그룹 과 네이밍을 쉽게 관리할 수 있다.

서비스 구성

주키퍼 서비스의 구성은 아래와 같다.

주키퍼는 대용량의 분산 시스템을 관리하는 것을 목적으로 하고 있다. 시스템을 관리하는 녀석이 뻗어버리면 안되니, 주키퍼 서비스 자체도 클러스터를 구성을 한다. 클러스터는 최소 3개 이상의 서버로 구성을 해야 한다. 주키퍼 클러스터를 구성하는 서버들은 데이터가 정확히 동기화 되야 하는데, 여러 이유로 데이터가 어긋날 수 있다. 이 경우 과반 투표를 해서 데이터를 서로 동기화를 해야 하는데, 결과를 정확히 하기 위해서(동수 투표가 나오지 않도록 하기 위해서) 홀수로 구성한다.

서버 클라이언트 모델을 따른다. 관리하는 노드들에는 주키퍼 클라이언트가 설치되서 주키퍼 서버에 연결을 한다. 클라이언트와 서버는 TCP로 연결되며, 이 통신회선을 통해서 요청과 응답, watch events, heaert beats 정보들을 주고 받으면서 클러스터의 형상을 관리한다. 서버와의 연결이 끊기면, 다른 서버로 연결한다.

데이터 모델

주키퍼는 표준파일 시스템과 같은 네임 공간(name space)를 이용해서 클러스터 정보를 계층화 한다.

주키퍼의 네임스페이스를 구성하는 노드들(파일 시스템에서의 디렉토리나 파일)을 znode라고 부른다. znode에는 상태, 설정, 위치 정보등 코디네이션을 위한 정보들을 가지고 있다. znode에 저장되는 데이터들은 버전관리를 한다.

주키퍼는 watch 개념을 지원한다. 클라이언트는 znode의 watch로 설정할 수 있다. watch는 znode의 정보가 변경되면, 이 정보를 클라이언트에 전송한다. 이번에 써먹을 기능이다.

주요 API

주키퍼는 아주 간단한 프로그래밍 인터페이스를 제공한다.
  • create : 트리에 노드를 추가한다.
  • delete : 노드를 삭제한다.
  • exists : 노드가 있는지 검사한다.
  • get data : 노드 데이터를 읽는다.
  • set data : 노드에 데이터를 쓴다.
  • get children : 노드의 child 노드를 읽는다.
  • sync : waits for data to be propagated

하위 문서

제목 저자 변경일