0%

apache Zookeeper 시작하기 (tutorial / windows 10)

zookeeper(주키퍼) 란?

분산시스템 환경에서 사용하기 적합한 key/value 저장 시스템입니다.

혹은 다른 더 적합한 대목을 달 수 있습니다. 사용하기 나름입니다.

주키퍼 아키텍처

znode

znode 라는 데이터 저장 객체를 제공합니다. (key/value 와 흡사한)
이 객체에 데이터를 넣고 빼는 기능을 제공합니다.

그림과 같이 디렉토리 형식을 사용하며, 데이터를 계층화한 구조로 저장합니다.
어떤식으로 데이터를 다루는지(생성,수정,삭제)에 대해서는 이후에 다루겠습니다.

server (cluster)

주키퍼는 단독 또는 클러스터로 구성을 합니다.

분산 처리 시스템에서 사용하기때문에 자연스레 클러스터로 구성하며 고가용성이 요구되나 봅니다.

Leader - Follower

주키퍼는 하나의 리더와 다수의 팔로워가 클러스터를 이룹니다.

Ensemble(앙상블)

이런 클러스터를 앙상블이라고 합니다.
추후 클라이언트는 앙상블에 연결하여 서비스의 존재를 알리거나 데이터를 핸들링하게 됩니다.

설치

의존성

zookeeper 는 독립적으로 사용이 불가능하며 자바에 의존성이 있습니다.
따라서 자바를 설치해야 합니다.

java

oracle 자바를 설치했습니다.

환경변수 등록

1
2
JAVA_HOME = C:\Program Files\Java\jdk-13.0.1
%JAVA_HOME%\bin

확인

1
2
3
4
$ java --version
java 13.0.1 2019-10-15
Java(TM) SE Runtime Environment (build 13.0.1+9)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
1
2
$ echo $JAVA_HOME
C:\Program Files\Java\jdk-13.0.1

zookeeper

https://archive.apache.org/dist/zookeeper/stable/ 에서 다운로드 합니다.

:warning: apache-zookeeper-3.5.6-bin.tar.gz 를 다운로드 해주셔야 합니다.

zoo.cfg 설정

1
2
3
4
5
6
tickTime=2000
initLimit=10
syncLimit=5
# 데이터 저장 경로
dataDir=data
clientPort=2181

dir 구조

server (standalone / git bash)

단독으로 서버를 실행시켜 봅니다.

:warning: 꼭 git bash 로 해야합니다. 안그러면 삽질을 하게될것입니다.

start

1
2
3
4
$ bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: D:\zookeeper\apache-zookeeper-3.5.6-bin\apache-zookeeper-3.5.6-bin\conf\zoo.cfg
Starting zookeeper ... STARTED

log 확인

로그를 통해 서버가 올바르게 실행되었는지 확인할 수 있습니다.
오류 발생시 에러가 출력됩니다.

1
2
3
# logs/zookeeper--server-username.out
..
..

stop

1
2
3
4
5
$ bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: D:\zookeeper\apache-zookeeper-3.5.6-bin\apache-zookeeper-3.5.6-bin\conf\zoo.cfg
Stopping zookeeper ... kill: 2904: No such process
STOPPED

client (cmd)

client 로 서버에 접근하여 데이터를 다뤄봅니다.

:warning: 이번엔 windowscmd 로 접근하셔야 합니다.
git bash 도 가능하긴 하나, 명령어에 대한 응답이 오지 않습니다.
혹시 성공하시면 공유좀 부탁드립니다.

연결

1
2
3
4
5
6
7
8
9
$ bin/zkCli.cmd
Connecting to localhost:2181
..
Welcome to ZooKeeper!
..
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]

연결 된 이후부터는 zookeeper cli 가 제공하는 명령어를 통해 znode 를 핸들링할 수 있습니다.

CLI

ls

znode 내에 있는 경로를 탐색합니다.

1
2
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]

create

새로운 경로와 값을 구성합니다.

1
2
3
4
[zk: localhost:2181(CONNECTED) 1] create /name wook
Created /name
[zk: localhost:2181(CONNECTED) 3] ls /
[name, zookeeper]

get

경로의 값을 반환합니다.

1
2
[zk: localhost:2181(CONNECTED) 5] get /name
wook

set

경로에 값을 수정합니다.

1
2
3
[zk: localhost:2181(CONNECTED) 14] set /name kim
[zk: localhost:2181(CONNECTED) 15] get /name
kim

delete

경로를 제거합니다.

1
2
3
4
5
[zk: localhost:2181(CONNECTED) 16] delete /name
[zk: localhost:2181(CONNECTED) 17] get /name
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /name
[zk: localhost:2181(CONNECTED) 19] ls /
[zookeeper]

Replication 설정

1
2
3
4
5
6
7
8
tickTime=2000
dataDir=data
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
  • tickTime: tick 단위 시간을 설정합니다.
  • lnitLimit: follwer 가 leader 와 연결 시도시 갖는 tick 제한 횟수 입니다. tick 제한 횟수(5회, 1회당 2초, 총 10초)가 넘으면 timeout 이 발생합니다.
  • syncLimit: follower 가 leader 와 연결된 후 계속하여 앙상블 안에서 leader 와 동기화되기 위한 tick 제한 횟수.
  • server.1 ~ server.3: 주키퍼가 앙상블을 이루기 위한 서버정보를 기재합니다.
    • 2888 port 는 동기화를 위한 포트
    • 3888 port 는 클러스터 구성시 leader 를 선출하기 위한 포트 입니다.

zookeeper docker 참조

실제 구성은 docker 를 활용하면 좀더 쉬울것 같습니다.
https://hub.docker.com/_/zookeeper/