ZooKeeper 오픈 소스의 운용 관리·운용 자동화
개요
Apache ZooKeeper(아파치 주키퍼)는 분산 환경 운영 지원 서비스를 제공하는 코디네이션 엔진이다. 각 노드(시스템 전체)를 중앙 집중식 유지 관리하는 기능을 제공한다.
기본 설명
분산 어플리케이션을 구현하는 경우, 각 분산 노드의 설정 등에 대량의 작업이 발생하게 된다. ZooKeeper는 구성 작업과 같은 본질적인 부분을 꺼내 중앙 집중식 코디네이션 서비스로 간단한 인터페이스를 제공한다.
ZooKeeper는 ‘설정 관리’, ‘이름 확인’, ‘동기화’, ‘그룹 서비스’ 등 다양한 빈번한 서비스를 제공한다.
표준 기능으로서 “합의 프로토콜”, “그룹 관리 프로토콜”, “리더 선거 프로토콜”, “프레즌스 프로토콜” 등을 이용할 수 있다. 독자적인 요구에 대응한 서비스의 구축도 가능한다.
Apache 소프트웨어 재단의 오픈 소스 프로젝트로 Hadoop의 하위 프로젝트 중 하나이다. Java 구현되어 JVM에서 동작한다. Java/C 언어용 API가 제공되고 있다.
주요 특징
높은 처리량/낮은 대기 시간
ZooKeeper가 관리하는 다양한 데이터는 스토리지가 아닌 메모리에 보관되므로 높은 처리량과 낮은 지연을 제공한다.
높은 성능을 발휘할 수 있으므로 대규모 분산 시스템에 대응할 수 있다. 클라이언트로부터의 액세스가 읽기 주체인 경우에는 특히 고속으로 동작할 수 있다.
고 가용성 (마스터 중복)
ZooKeeper를 여러 서버에 설치하고 사용할 수 있다. 가용성을 높이고 성능 향상도 기대할 수 있다. ZooKeeper를 여러 개 시작하면 마스터가 자동으로 선택되어 각종 통괄 관리를 실행한다.
ZooKeeper 마스터 노드가 어떤 이유로든 중지되면 각 노드간에 선거가 이루어지고 새로운 마스터 노드가 선택된다.
원자성
ZooKeeper가 관리하는 데이터는 원자적으로 읽고 쓸 수 있다. 클라이언트의 업데이트를 순서대로 하나씩 적용한다. 각 노드마다 액세스 제한을 설정할 수도 있다.
계층적 네임스페이스
ZooKeeper는 데이터를 계층적 네임스페이스에 저장한다. 여러 서버에 분산되어 있는 각 프로세스는 이 네임스페이스를 공유하는 것으로 서로 협조하면서 분산 처리를 진행시킨다.
노드 간 불일치 제거
데이터 갱신은 마스터 노드만이 실시하기 때문에, 노드간에 데이터가 모순된 내용이 되지 않는 구조가 되고 있다.
주요 기능
공유 설정 기능
구성 파일을 ZooKeeper 서버에 저장하고 각 인스턴스가 ZooKeeper에 저장된 구성 파일을 검색하면 각 인스턴스의 구성 파일이 동일한지 확인할 수 있다.
분산 잠금 기능
여러 인스턴스가 동시에 공유 리소스를 다시 쓰지 못하게 하는 잠금 기능이 있다.
멤버 획득 기능
분산 시스템의 각 인스턴스가 ZooKeeper의 임시 노드를 등록하면 분산 시스템 내에서 사용 가능한 인스턴스 목록을 얻을 수 있다. 각 클라이언트는 활성 상태의 서버에 연결할 수 있다.
시계 기능
특정 프로세스가 특정 ZooKeeper 노드를 관찰하는 경우 해당 ZooKeeper 노드에 변경 사항이 있으면 프로세스에 변경 사항을 알린다. 설정 파일의 재로드 트리거 등에 이용할 수 있다.
도입 사례
분산 키 밸류 데이터베이스 “HBase”, 검색 엔진 “SolrCloud”, 분산 실시간 스트리밍 처리 엔진 “Jubatus” 등에 도입되었다.
주요 적용 분야로는 “디렉터리 서비스”, “구성 관리 서비스”, “동기 서비스”, “리더 선출 서비스”, “메시지 큐 서비스”, “「엔터프라이즈 검색 시스템” 등이 있다.
라이센스 정보
Apache ZooKeeper의 라이센스는 “Apache License 2.0"이다. 이 라이선스에 따라 소스 코드를 수정하고 게시할 수 있다.