Zookeeper 설치
Zookeeper 소개
분산 시스템을 설계 하다보면, 가장 문제점 중의 하나가 분산된 시스템 간의 정보를 어떻게 공유할 것이고, 클러스터에 있는 서버들의 상태를 체크할 필요가 있으며 또한, 분산된 서버들간에 동기화를 위한 락(lock)을 처리하는 것들이 문제로 부딪힌다.
이러한 문제를 해결하는 시스템을 코디네이션 서비스 시스템 (coordination service)라고 하는데, Apache Zookeeper가 대표적이다. 이 코디네이션 서비스는 분산 시스템 내에서 중요한 상태 정보나 설정 정보등을 유지하기 때문에, 코디네이션 서비스의 장애는 전체 시스템의 장애를 유발하기 때문에, 이중화등을 통하여 고가용성을 제공해야 한다. ZooKeeper는 이러한 특성을 잘 제공하고 있는데, 그런 이유로 이미 유명한 분산 솔루션에 많이 사용되고 있다. NoSQL의 한종류인 Apache HBase, 대용량 분산 큐 시스템인 Kafka등이 그 대표적인 사례이다.
분산 시스템을 코디네이션 하는 용도로 디자인이 되었기 때문에, 데이타 억세스가 빨라야 하며, 자체적으로 장애에 대한 대응성을 가져야 한다. 그래서 Zookeeper는 자체적으로 클러스터링을 제공하며, 장애에도 데이타 유실 없이 fail over/fail back이 가능하다.
Apache Zookeeper의 기능은 사실상 별로 없다. 디렉토리 구조기반으로 znode라는 데이타 저장 객체를 제공하고, (key-value식). 이 객체에 데이타를 넣고 빼는 기능만을 제공한다. 일단 디렉토리 형식을 사용하기 때문에 데이타를 계층화된 구조로 저장하기 용이하다.
출처: 조대협의 블로그
참고 자료
https://zookeeper.apache.org/doc/current/zookeeperStarted.html
설치
사전 준비
jdk
java 1.8 버전 이상 준비한다.
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$PATH
java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
hosts
아래와 같이 vi /etc/hosts
파일에 zookeeper 앙상블을 구성할 멤버 호스트 정보를 기입한다.
192.168.179.80 node1.zk
192.168.179.81 node2.zk
192.168.179.82 node3.zk
시스템 경로 설정
다음 경로에 대한 zookeeper 시스템 계정의 소유권 필요
- 프로그램 설치 경로
- /app/zookeeper
- 데이터파일 경로
- /data/zookeeper
다운로드
http://zookeeper.apache.org/releases.html 페이지에서 버전을 선택해 다운로드 한다. 여기에서는 3.4.13 버전으로 진행
wget http://mirror.navercorp.com/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
다음과 같이 다운로드 한 압축파일을 /app/zookeeper
경로에 압축해제하고 경로명을 정리해준 뒤 symbolic link 까지 생성한다.
tar -xvzf zookeeper-3.4.13.tar.gz -C /app/zookeeper/.
mv /app/zookeeper/zookeeper-3.4.13 /app/zookeeper/3.4.13
ls -l /app/zookeeper/3.4.13 | grep ^d | awk '{print "/app/zookeeper/3.4.13/"$9}' | xargs -I {} ln -s {} /app/zookeeper/.
설정
zookeeper 데이터 경로의 myid
파일에 zookeeper 앙상블 멤버 노드가 자신의 노드를 식별할 수 있도록 유니크한 값을 지정해야 하며, 아래는 hostname의 숫자 값만을 추출해서 myid로 지정한 것이다. 그리고 설정 샘픒파일 (zoo_sample.cfg
)을 이용해서 설정을 마무리하기 위해 같은 경로에 zoo.cfg
파일을 생성해준다.
echo $HOSTNAME | sed 's/[^0-9]*//g' > /data/zookeeper/myid
cp /app/zookeeper/conf/zoo_sample.cfg /app/zookeeper/conf/zoo.cfg
vi /app/zookeeper/conf/zoo.cfg
파일을 열어 다음과 같이 앙상블을 구성할 멤버 노드 정보를 입력하고, 데이터 경로를 수정한다.
dataDir=/data/zookeeper
server.1=node1.zk:2888:3888
server.2=node2.zk:2888:3888
server.3=node3.zk:2888:3888
실행
export PATH=/app/zookeeper/bin:$PATH
zkServer.sh start
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
상태 확인
zkServer.sh status
명령으로 명령이 수행된 노드의 상태를 확인할 수 있다.
node1
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
node2
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
node3
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: leader