ZooKeeper는 분산 코디네이터 기능, 설정정보, 네이밍, 분산동기화, 그룹관리 기능을 제공한다.
자세한 내용은 다음 글에서 쓰도록 하고, 일단 설치를 하여 보도록 하자.
Zookeeper Download : http://www.apache.org/dyn/closer.cgi/zookeeper/
Zookeeper 문서: http://zookeeper.apache.org/doc/current/
Zookeeper 설치 및 가이드 : http://zookeeper.apache.org/doc/current/zookeeperStarted.html
요구사항: JDK 6이상이 설치
# wget http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
# tar zxvf zookeeper-3.4.5.tar.gz
# cp -Rf zookeeper-3.3.5 /usr/local/zookeeper
# cd /usr/local/zookeeper
* 설정파일 복사하기 : conf/zoo_sample.cfg를 conf/zoo.cfg로 복사
# cp conf/zoo_sample.cfg conf/zoo.cfg
* zoo.cfg 파일 수정 : 특히 dataDir를 자신이 사용할 것으로 수정한다.
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper/data
# the port at which the clients will connect
clientPort=2181
* 단일 서버 설정은 완료
* 서버 구동
# bin/zkServer.sh start
* Zookeeper 접속하기 :# bin/zkCli.sh -server 127.0.0.1:2181
Connecting to localhost:2181 log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper). log4j:WARN Please initialize the log4j system properly. Welcome to ZooKeeper! JLine support is enabled [zkshell: 0]
[zkshell: 0] help ZooKeeper host:port cmd args get path [watch] ls path [watch] set path data [version] delquota [-n|-b] path quit printwatches on|off createpath data acl stat path [watch] listquota path history setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path* 노드를 만들고, 값을 가져오고, 설정하고 삭제하는 예.
[zkshell: 9] create /zk_test my_data Created /zk_test[zk: 127.0.0.1:2181(CONNECTED) 3] ls /
[zookeeper, zk_test]
[zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_test
my_data
[zk: 127.0.0.1:2181(CONNECTED) 5] set /zk_test junk
[zk: 127.0.0.1:2181(CONNECTED) 6] get /zk_test
junk
[zk: 127.0.0.1:2181(CONNECTED) 7] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 8] ls /
[zookeeper]
* 복제된 Zookeeper 서버 실행을 위해선 zoo.cfg 정보 설정tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=5 syncLimit=2 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
* zoo1, zoo2, zoo3는 서버명, 그러므로 192.168.0.1, 192.168.0.2, 192.168.0.3등으로 대체 가능
2888는 각 피어별로 통신을 위한 port, 3888은 leader 선출을 위한 port
zoo1, zoo2, zoo3 각 서버의 dataDir(예를 들자면, /data/zookeeper/data)에서
/data/zookeeper/data/myid 파일에 server.1 server.2 server.3 의 1, 2, 3을 기록한다.
zoo1# cat > /data/zookeper/data/myid
1
zoo2# cat > /data/zookeper/data/myid
2
zoo3# cat > /data/zookeper/data/myid
3
1,2,3이 중요한 것이 아니라 아니라 server.1과 같이 숫자든 문자든 server.X와 myid의 X를 일치 시켜야 한다.