zookeeper(주키퍼) 란?
분산시스템 환경에서 사용하기 적합한 key/value 저장 시스템입니다.
혹은 다른 더 적합한 대목을 달 수 있습니다. 사용하기 나름입니다.
주키퍼 아키텍처
znode
znode 라는 데이터 저장 객체를 제공합니다. (key/value 와 흡사한)
이 객체에 데이터를 넣고 빼는 기능을 제공합니다.
그림과 같이 디렉토리 형식을 사용하며, 데이터를 계층화한 구조로 저장합니다.
어떤식으로 데이터를 다루는지(생성,수정,삭제)에 대해서는 이후에 다루겠습니다.
server (cluster)
주키퍼는 단독 또는 클러스터로 구성을 합니다.
분산 처리 시스템에서 사용하기때문에 자연스레 클러스터로 구성하며 고가용성이 요구되나 봅니다.
Leader - Follower
주키퍼는 하나의 리더와 다수의 팔로워가 클러스터를 이룹니다.
Ensemble(앙상블)
이런 클러스터를 앙상블이라고 합니다.
추후 클라이언트는 앙상블에 연결하여 서비스의 존재를 알리거나 데이터를 핸들링하게 됩니다.
설치
의존성
zookeeper 는 독립적으로 사용이 불가능하며 자바에 의존성이 있습니다.
따라서 자바를 설치해야 합니다.
java
oracle 자바를 설치했습니다.
환경변수 등록
1 | JAVA_HOME = C:\Program Files\Java\jdk-13.0.1 |
확인
1 | $ java --version |
1 | $ echo $JAVA_HOME |
zookeeper
https://archive.apache.org/dist/zookeeper/stable/ 에서 다운로드 합니다.
:warning:
apache-zookeeper-3.5.6-bin.tar.gz
를 다운로드 해주셔야 합니다.
zoo.cfg 설정
1 | tickTime=2000 |
dir 구조
server (standalone / git bash)
단독으로 서버를 실행시켜 봅니다.
:warning: 꼭
git bash
로 해야합니다. 안그러면 삽질을 하게될것입니다.
start
1 | $ bin/zkServer.sh start |
log 확인
로그를 통해 서버가 올바르게 실행되었는지 확인할 수 있습니다.
오류 발생시 에러가 출력됩니다.
1 | # logs/zookeeper--server-username.out |
stop
1 | $ bin/zkServer.sh stop |
client (cmd)
client 로 서버에 접근하여 데이터를 다뤄봅니다.
:warning: 이번엔
windows
의cmd
로 접근하셔야 합니다.
git bash 도 가능하긴 하나, 명령어에 대한 응답이 오지 않습니다.
혹시 성공하시면 공유좀 부탁드립니다.
연결
1 | $ bin/zkCli.cmd |
연결 된 이후부터는 zookeeper cli 가 제공하는 명령어를 통해 znode 를 핸들링할 수 있습니다.
CLI
ls
znode 내에 있는 경로를 탐색합니다.
1 | [zk: localhost:2181(CONNECTED) 0] ls / |
create
새로운 경로와 값을 구성합니다.
1 | [zk: localhost:2181(CONNECTED) 1] create /name wook |
get
경로의 값을 반환합니다.
1 | [zk: localhost:2181(CONNECTED) 5] get /name |
set
경로에 값을 수정합니다.
1 | [zk: localhost:2181(CONNECTED) 14] set /name kim |
delete
경로를 제거합니다.
1 | [zk: localhost:2181(CONNECTED) 16] delete /name |
Replication 설정
1 | tickTime=2000 |
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/