주키퍼는 카프카와 같은 분산 애플리케이션을 사용하게 되면 분산 애플리케이션 관리를 위한 코디네이션 애플리케이션이 추가로 필요한데, 코디네이션 애플리케이션 중 안정적인 코디네이션 서비스로 검증된 "주키퍼" 를 많이 사용하고 있습니다.

쿼럼 유지를 위해 홀수로 구성해야 하고 이를 위해 여러 대의 서버로 구성하는 것을 앙상블(클러스터)라고 합니다. znode(상태정보 저장)는 Key-Value 형태로 저장되며 저장된 것을 서로 주고받으며 데이터 유지를 합니다.

주키퍼 동작을 위해서는 java 설치가 되어 있어야 하기 때문에 미리 설치가 필요합니다.

$ sudo yum -y install java-1.8.0-openjdk.x86_64

주키퍼 설정합니다. 앙상블(클러스터) 구성 시에 znode(상태정보) 스냅샷과 트랜잭션 로그들을 저장하기 위한 디렉터리를 별도로 생성해 주는 것이 좋지만 싱글 노드 구성이므로 로컬 파일시스템에 생성합니다.

$ mkdir -p /home/ec2-user/zookeeper/data

그리고 주키퍼 환경설정 파일인 zoo.cfg 파일을 만들어야 합니다

configuration 항목에 대해서는 아래의 링크에서 확인 가능합니다. https://zookeeper.apache.org/doc/r3.8.0/zookeeperAdmin.html#sc_configuration

$ vi zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/ec2-user/zookeeper/data
clientPort=2181
server.1=ip-<xxx-xx-xx-xx>.ap-northeast-2.compute.internal:2888:3888

EC2 Security Group에서 Inbound Rules에 2181 port를 추가해 줘야 합니다. 참고로 2888, 3888 port는 앙상블(클러스터) 연결 및 리더 선출에 해당되는 Port이기 때문에 Standalone 환경에서는 선택 사항입니다.

이제 주키퍼 실행할 수 있습니다.

$ /home/ec2-user/zookeeper/apache-zookeeper-3.8.0-bin/bin/zkServer.sh start

/bin/java
ZooKeeper JMX enabled by default
Using config: /home/ec2-user/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

$ /home/ec2-user/zookeeper/apache-zookeeper-3.8.0-bin/bin/zkServer.sh stop

/bin/java
ZooKeeper JMX enabled by default
Using config: /home/ec2-user/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

$ /home/ec2-user/zookeeper/apache-zookeeper-3.8.0-bin/bin/zkServer.sh status

/bin/java
ZooKeeper JMX enabled by default
Using config: /home/ec2-user/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone

ZooKeeper Administrator’s Guide

https://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html