본문 바로가기

Etc/Zookeeper

Zookeeper 설치 및 환경설정

1. jdk 설치

구글링해서 설치해봅시다.

2. zookeeper 설치

2-1. zookeeper 다운로드

여기에서 stable 버전 다운, 나는 3.6.2버전 다운 받았다.

zookeeper.apache.org/releases.html

wget https://downloads.apache.org/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

 

2-2. 압축 풀기

tar xzf apache-zookeeper-3.6.2-bin.tar.gz

 

2-3. 설정파일 생성

설정 파일(zoo.cgf), zoo_sample.cfg가 있긴한데 zoo.cfg 만들자

vi zoo.cfg

 

tickTime

- zooKeeper에서 사용하는 기본 시간 단위 (밀리세컨드)

- heartbeat에 사용, minumum session timeout 은 tickTime의 두배

 

dataDir

- in-memory database snapshot 들이 저장되는 공간

- 따로 설정하지 않는한 데이터베이스 업데이트 트랜잭션 로그 저장

 

clientPort

- client connection을 listen하는 port number

 

3. Standalone 모드로 zookeeper 실행해보기

이제 주키퍼를 standalone모드로 시작할 수 있다. (서버 1대에서 실행하는 모드)

bin/zkServer.sh start

 

zookeeper cli를 통해 zookeeper에 접속해보자.

bin/zkClie.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]

 

help 명령어로 cli에서 사용가능한 명령어 확인해볼수도 있다.

[zkshell: 0] help
ZooKeeper -server host:port cmd args
addauth scheme auth
close
config [-c] [-w] [-s]
connect host:port
create [-s] [-e] [-c] [-t ttl] path [data] [acl]
delete [-v version] path
deleteall path
delquota [-n|-b] path
get [-s] [-w] path
getAcl [-s] path
getAllChildrenNumber path
getEphemerals path
history
listquota path
ls [-s] [-w] [-R] path
ls2 path [watch]
printwatches on|off
quit
reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
redo cmdno
removewatches path [-c|-d|-a] [-l]
rmr path
set [-s] [-v version] path data
setAcl [-s] [-v version] [-R] path acl
setquota -n|-b val path
stat [-w] path
sync path

 

ls / 명령어로 현재 znode 상태를 확인

[zkshell: 8] ls /
[zookeeper]

 

create 명령어로 znode 생성

[zkshell: 9] create /zk_test my_data
Created /zk_test

[zkshell: 11] ls /
[zookeeper, zk_test]

 

get 명령어로 znode data get

[zkshell: 12] get /zk_test
my_data

 

set 명령어로 znode에 data set

[zkshell: 14] set /zk_test junk
[zkshell: 15] get /zk_test
junk

 

delete 명령어로 znode 삭제

[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]

 

더 많은 명령어는 여기에서!

zookeeper.apache.org/doc/current/zookeeperCLI.html

 

 

4. 여러 호스트로 zookeeper구성하기 (Running Replicated ZooKeeper)

모든 서버는 같은 설정파일 (zoo.cfg)를 갖고 있어야함 

zoo.cfg파일에 몇가지 옵션이 추가되어야 한다.

 

zoo.cgf

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

 

initLimit

  • 팔로어가 리더에 접속할 수 있는 시간
  • tickTime 기준으로 설정된다.
  • 데이터 쓰기를 하는 서버를 리더, 나머지 대기 서버를 팔로어
  • initLimit = initLimit * tickTime 

syncLimit

  • 리더가 될 수 있는 팔로어의 최대 개수

앙상블의 모든 서버 내역이 추가로 들어가야 함

: server.X=hostname:peerPort:leaderPort

 

X

  • 각 서버의 ID번호
  • 정수, 0부터 시작 안해도 되고, 순차적으로 부여 안해도 됨
  • When the server starts up, it knows which server it is by looking for the file myid in the data directory. That file has the contains the server number, in ASCII.
  • 각 서버는 dataDir에 지정된 디렉터리에 myid라는 파일을 갖고 있으여 한다.
  • 이 파일은 구성 파일에 지정된 것과 일치하는 각 서버의 ID번호를 포함해야 한다.

hostname

  • 각 서버 호스트 이름이나 IP 주소

peerPort

  • 앙상블 서버들이 상호 통신하는데 사용하는 TCP 포트 번호
  • 주키퍼에 접속하는 클라이언트는 clientPort에 지정된 포트 번호로 앙상블과 연결된다.
  • 앙상블의 서버들은 세가지 포트 모두를 사용해서 상호 통신한다.

leaderPort

  • 리더를 선출하는데 사용하는  TCP 포트 번호

 

 

'Etc > Zookeeper' 카테고리의 다른 글

Zookeeper Golang Client  (0) 2021.01.03
Zookeeper 활용 시나리오 (Recipes And Solutions)  (0) 2020.12.24
zookeeper Replication (3 host clustering) 설정하기  (0) 2020.12.22
Apache zookeeper란?  (0) 2020.12.19