욱'S 노트

ZooKeeper - 시작하기 본문

Programming/ZooKeeper

ZooKeeper - 시작하기

devsun 2015. 3. 12. 16:28

이제 ZooKeeper에 대해서 알아보자. 아무것도 모르고 ZooKeeper를 도입해야 하는 상황이 생겼다. 빨리 Getting Started를 마스터 해야한다.


다운로드


아래의 주키퍼 공식 사이트로 접근을 해서 최신 릴리이즈를 다운로드 하자. 설치를 진행할 버젼은 3.4.6이다.


http://zookeeper.apache.org/ 


Apache 미러 사이트에서 다운로드를 받을 수 있었고, 파일명이 zookeeper-3.4.6.tar.gz 이며, 용량은 16.9mb이다.


StandAlone 


역시 시작은 stand alone으로 해야겠지? 주키퍼 서버는 하나의 JAR 파일을 포함한다.. 그래서 설치는 설정을 포함한다. 일단 압축을 적당한 위치에 풀자. 


toddsonui-MacBook-Pro:zookeeper-3.4.6 devsun$ ls -al

total 3040

drwxr-xr-x  22 devsun  staff      748  2 20  2014 .

drwxr-xr-x  16 devsun  staff      544  3 12 16:36 ..

-rw-r--r--   1 devsun  staff    80776  2 20  2014 CHANGES.txt

-rw-r--r--   1 devsun  staff    11358  2 20  2014 LICENSE.txt

-rw-r--r--   1 devsun  staff      170  2 20  2014 NOTICE.txt

-rw-r--r--   1 devsun  staff     1585  2 20  2014 README.txt

-rw-r--r--   1 devsun  staff     1770  2 20  2014 README_packaging.txt

drwxr-xr-x  10 devsun  staff      340  2 20  2014 bin

-rw-r--r--   1 devsun  staff    82446  2 20  2014 build.xml

drwxr-xr-x   5 devsun  staff      170  2 20  2014 conf

drwxr-xr-x  10 devsun  staff      340  2 20  2014 contrib

drwxr-xr-x  22 devsun  staff      748  2 20  2014 dist-maven

drwxr-xr-x  49 devsun  staff     1666  2 20  2014 docs

-rw-r--r--   1 devsun  staff     3375  2 20  2014 ivy.xml

-rw-r--r--   1 devsun  staff     1953  2 20  2014 ivysettings.xml

drwxr-xr-x  11 devsun  staff      374  2 20  2014 lib

drwxr-xr-x   5 devsun  staff      170  2 20  2014 recipes

drwxr-xr-x  11 devsun  staff      374  2 20  2014 src

-rw-r--r--   1 devsun  staff  1340305  2 20  2014 zookeeper-3.4.6.jar

-rw-r--r--   1 devsun  staff      836  2 20  2014 zookeeper-3.4.6.jar.asc

-rw-r--r--   1 devsun  staff       33  2 20  2014 zookeeper-3.4.6.jar.md5

-rw-r--r--   1 devsun  staff       41  2 20  2014 zookeeper-3.4.6.jar.sha1


압축을 푼 모습이다. 하나의 jar를 포함한다는 말은 머지? 좀 헷갈린다. 오역인가?


주키퍼를 시작하기 위해서는 설정 파일이 필요하다고 한다. conf/zoo.cfg를 만드는데 일단 아래의 내용으로 만들어보자.


tickTime=2000

dataDir=/tmp/zookeeper

clientPort=2181


이 파일은 머라고 불려도 상관없다. 하지만 그냥 conf/zoo.cfg라고 부르자. dataDir은 존재하는 디렉토리로 명시하자.


tickTime - 주키퍼에서 사용하는 기본 시간 단위 밀리세컨드. heartbeat를 위해 사용되면 최소 세션 타임아웃은 tickTime의 두배이다.

dataDir - in-memory 데이터베이스의 스냅샷을 저장할 위치. 데이터베이스의 갱신 로그이다.

clientPort - 클라이언트 연결을 위한 사용되는 listen 포트


설정 파일을 생성하였으면 주키퍼를 시작할 수 있다.


toddsonui-MacBook-Pro:bin devsun$ ./zkServer.sh start

JMX enabled by default

Using config: /Users/devsun/dev/zookeeper-3.4.6/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED


로그가 완전 심플하다. 주키퍼는 내부적으로 로깅을 위해 log4j를 사용한다. standalone모드에서는 replication이 없다. 더 좋은 개발 환경을 위해서는 repicated mode로 실행해야 하는데 그건 나중에 알아보자. 운영에서는 ZooKeeper 스토리지는 외부에서 관리되어야만 한다. 이에 대한 자세한 내용도 다음에 살펴보기로 한다.


이제 주키퍼로 연결을 수행해보자.


toddsonui-MacBook-Pro:bin devsun$ ./zkCli.sh -server 127.0.0.1:2181

Connecting to 127.0.0.1:2181

2015-03-12 17:05:39,565 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT

2015-03-12 17:05:39,569 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=172.27.70.136

2015-03-12 17:05:39,570 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_25

2015-03-12 17:05:39,571 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/Users/devsun/dev/zookeeper-3.4.6/bin/../build/classes:/Users/devsun/dev/zookeeper-3.4.6/bin/../build/lib/*.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/Users/devsun/dev/zookeeper-3.4.6/bin/../conf:

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/Users/devsun/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/var/folders/9r/9zffgr317j1cv6d8j_gr52n80000gn/T/

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Mac OS X

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=x86_64

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=10.10.2

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=devsun

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/Users/devsun

2015-03-12 17:05:39,572 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/Users/devsun/dev/zookeeper-3.4.6/bin

2015-03-12 17:05:39,573 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@69663380

Welcome to ZooKeeper!

2015-03-12 17:05:39,596 [myid:] - INFO  [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)

JLine support is enabled

[zk: 127.0.0.1:2181(CONNECTING) 0] 2015-03-12 17:05:39,649 [myid:] - INFO  [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@852] - Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session

2015-03-12 17:05:39,702 [myid:] - INFO  [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x14c0cfb83340000, negotiated timeout = 30000


WATCHER::


접속을 잘되었는지 확인하기 위해 help 명령을 수행해보자. 먼가 나온다.


[zk: 127.0.0.1:2181(CONNECTED) 0] help

ZooKeeper -server host:port cmd args

stat path [watch]

set path data [version]

ls path [watch]

delquota [-n|-b] path

ls2 path [watch]

setAcl path acl

setquota -n|-b val path

history

redo cmdno

printwatches on|off

delete path [version]

sync path

listquota path

rmr path

get path [watch]

create [-s] [-e] path data acl

addauth scheme auth

quit

getAcl path

close

connect host:port


CLI 상에서 ls 명령을 수행해보자.


[zk: 127.0.0.1:2181(CONNECTED) 1] ls /

[zookeeper]


다음은 znode를 생성해보자. 새로운 znode를 생성하고 string "my_data"와 해당 노드를 연관짓는 것이다.


[zk: 127.0.0.1:2181(CONNECTED) 4] create /zk_test my_data

Created /zk_test

[zk: 127.0.0.1:2181(CONNECTED) 5] ls /

[zookeeper, zk_test]


다음은 get 명령을 통해 znode와 연관된 데이터를 확인해보자.


[zk: 127.0.0.1:2181(CONNECTED) 6] get /zk_test

my_data

cZxid = 0x2

ctime = Thu Mar 12 17:13:32 KST 2015

mZxid = 0x2

mtime = Thu Mar 12 17:13:32 KST 2015

pZxid = 0x2

cversion = 0

dataVersion = 0

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 7

numChildren = 0


set 명령을 통해 zk_test 노드에 연관된 데이터를 변경할 수 있다. 

[zk: 127.0.0.1:2181(CONNECTED) 8] set /zk_test junk

cZxid = 0x2

ctime = Thu Mar 12 17:13:32 KST 2015

mZxid = 0x5

mtime = Thu Mar 12 17:18:41 KST 2015

pZxid = 0x2

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 4

numChildren = 0

[zk: 127.0.0.1:2181(CONNECTED) 9] get /zk_test junk

junk

cZxid = 0x2

ctime = Thu Mar 12 17:13:32 KST 2015

mZxid = 0x5

mtime = Thu Mar 12 17:18:41 KST 2015

pZxid = 0x2

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 4

numChildren = 0


마지막으로 delete 명령으로 노드를 삭제해보자.

[zk: 127.0.0.1:2181(CONNECTED) 10] delete /zk_test


WATCHER::


WatchedEvent state:SyncConnected type:NodeDeleted path:/zk_test


'Programming > ZooKeeper' 카테고리의 다른 글

ZooKeeper - 개요  (0) 2015.03.12
Comments