반응형
SMALL

Zookeeper란 한 마디로 정의하면 “분산 처리 환경에서 사용 가능한 데이터 저장소”다. 기능은 매우 단순하지만 분산 서버 환경에서는 활용 분야가 넓다. 많은 서버를 관리할때도 유용하게 생기는 툴이다.

설명을 하기에 앞서 Zookeeper를 직접 사용해야 이해가 빠르다.

1. Zookeeper의 설치

이 명령을 사용해서 zookeeper을 설치해준다.

  • brew install -g zookeeper

아래 명령은 config 파일과 zkServer.shzkCli.sh이 어디에 있는지 알아보는 방법이다.

  • cd /usr/local/etc/zookeeper
  • ls zoo.cfg

아래 명령은 config 파일 유무를 체크하는 방법이다.

  • cd /usr/local/Cellar/zookeeper/3.4.6_1(현 문서 작성 시점)/libexec/bin
  • ls zkServer.sh zkCli.sh

아래 명령어는 zookeeper server를 실행하는 명령어이다.

  • zkServer start

참고로 server를 중지하는 명령어는 “zkServer stop”이다.

2. Zookeeper의 실행

아래 명령어를 통해 zookeeper server에 접속해준다.

* zkCli

이렇게 접속이 되면 정상적으로 실행된 화면이다.

다음 명령어들을 직접 수행해 보면

스크린샷 2015-09-10 오전 2.06.09
[그림2 ls /]

스크린샷 2015-09-10 오전 2.06.18
[그림3 create /test ‘’]

이런식으로 나온다. 실제로 실행해본다면 저 위와 같은 화면이 잘 나오면 실행이 잘 된 것이다.

/test 노드를 생성했는데 zookeeper에 저장되는 노드들은 ‘znode’라고 부릅니다. 우리는 Default로 Persistent Node를 생성한 상태다.

  • Persistent Node: 노드에 데이터를 저장하면 일부러 삭제하지 않는 이상 삭제되지 않고 영구히 저장된다.

이번엔 Ephemeral Node를 생성해보면

  • Ephemeral Node: 노드를 생성한 클라이언트의 세션이 연결되어 있을 경우만 유효하다. 즉 클라이언트 연결이 끊어지는 순간 삭제 된다. 이를 통해서 클라이언트가 연결이 되어있는지 아닌지를 판단하는데 사용할 수 있다.

스크린샷 2015-09-10 오전 2.06.25
[그림4 create -e /eph ‘’]

Persistent Node와 Ephemeral Node는 차이가 굉장히 명확함을 알 수 있다. 고의적인 삭제만 아니면 영구히 저장되는 Persistent Node와 클라이언트 연결이 끊어지면 바로 삭제가 되어버리는 Ephemeral Node, 모두 그때그때 잘 활용할 수 있는 방법들이다.

현 클라이언트에서 “quit” 명령어를 통해 connection을 close 한 뒤 다시 zkServer에 접속해보면 Ephemeral Node가 삭제된 것을 확인이 가능하다.

스크린샷 2015-09-10 오전 2.06.35
[그림5 connection이 끊기면 사라지는 Ephemeral Node]

다음으로 Sequence Node를 살펴보면

  • Sequence Node: 노드를 생성할 때 자동으로 sequence 번호가 붙는 노드이다. 주로 분산락을 구현하는데 이용된다.

스크린샷 2015-09-10 오전 2.06.45
[그림6 create -s /sequ ‘’]

아래와 같이 ‘rmr’ 명령어로 해당 znode를 삭제할 수 있다. 실제로 삭제해보면 rmr /삭제하고싶은 node를 써주면 바로 삭제가 가능하다.

스크린샷 2015-09-10 오전 2.06.54
[그림7 rmr /sequ0000000046]

znode는 데이터를 바이트 배열 형태로 가질 수 있다.

스크린샷 2015-09-10 오전 2.07.01
[그림8 “data” 바이트 배열을 데이터로 가지는 /data znode]

나같은 경우는 모두 실행을 해보았고 정상적으로 되었다. 기본적으로 Zookeeper사용에 대해서 저 위에 포스팅해놓은 것들을 해본다면 나중에 조금 더 심화된 내용으로 들어가서 공부하게 될때 큰 무리 없이 잘할 수 있을 것이다.

Zookeeper 데이터 모델은 아래 그림과 같다.

 스크린샷 2015-09-10 오전 2.07.13

[그림9 Zookeeper 데이터 모델]

‘그림9’를 보면 알 수 있듯이 주키퍼는 Tree 형태로 데이터를 저장합니다. 따라서 각 znode는 부모노드가 될 수 있다. 하지만 Ephemeral Node는 부모노드가 될 수 없다. connection이 끊겨 해당 Ephemeral Node가 삭제됐을 때 자식노드까지 함께 영향을 받게되기 때문이다. 아래의 그림을 보면 조금 더 쉽게 어떤말을 하고 있는지 이해가 가능하다.

스크린샷 2015-09-10 오전 2.07.20

[그림10 Ephemeral Node가 부모노드가 된다면 발생하는 문제]

<출저: https://unagi44.wordpress.com/Developer Lee>

그런데 어떻게 다양한 분야에 활용이 가능한건지 이유에 대해 말한다면  바로 Watch 기능이라는게 있기 때문이다. 이 기능에 대해서는 조금 더 뒤에 자세히 포스팅 해보도록 하겠다.





반응형
LIST

'mongoDB > zookeeper' 카테고리의 다른 글

zookeeper의 watcher 기능 실습 2  (0) 2016.09.16
zookeeper의 watcher 기능 실습 1  (0) 2016.09.11
zookeeper의 watch 기능  (0) 2016.09.09
zookeeper의 필요성  (4) 2016.09.06
블로그 이미지

만년필석사

,