본 문서에서는 ZooKeeper 서버의 Silgle-node 설치 및 Multi-node 설치에 대해 설명합니다.
주키퍼를 단독으로 구성할 수도 있지만, 주키퍼를 클러스터로 구성하여 고가용성을 확보한 것을 주키퍼 앙상블(Zookeeper Ensemble)이라고 합니다.
[설치환경] : Window10 WSL2(Ubuntu 20.04)
주키퍼 다운로드 및 설치하기
윈도우 WSL2 에 접속하여 아래 명령어를 수행하여 다운로드 합니다. 아래 다운로드 사이트에서 직접 다운로드해도 됩니다.
다운로드 : https://zookeeper.apache.org/releases.html#download
$ wget http://apache.mirror.cdnetworks.com/zookeeper/stable/apache-zookeeper-3.6.3-bin.tar.gz
$ tar xzvf apache-zookeeper-3.6.3-bin.tar.gz
$ ln -s apache-zookeeper-3.6.3-bin zookeeper
바이너리 버전(apache-zookeeper-3.6.3-bin.tar.gz)과 소스 버전(apache-zookeeper-3.6.3.tar.gz)이 있는데 바이너리 버전으로 다운로드합니다.
주키퍼 환경설정 - 싱글노드
데이터 디렉토리 생성
지노드의 복사본인 스냅샷과 트랜잭션 로그를 저장할 데이터 디렉토리 또는 파일시스템을 생성합니다.
디렉토리명 또는 파일시스템명은 사용자가 원하는 이름으로 생성합니다.
본 문서에서는 data 디렉토리로 사용할 디렉토리를 /zkdata 로 생성했습니다.
## For ZooKeeper server in standalone mode
$ mkdir -p /zkdata
config 파일 설정
주키퍼 환경설정 sample 파일은 zookeeper/conf 아래에 있습니다. sample 파일을 복사해서 사용합니다. 아래의 {ZOOKEEPER_HOME}은 다운로드 후 압축을 푼 디렉토리입니다. 각자의 위치가 다를 수 있습니다.
$ cd {ZOOKEEPER_HOME}/zookeeper/conf/
$ cp zoo_sample.cfg zoo.cfg
zoo.cfg 파일을 열어 아래와 같이 환경설정을 해줍니다.
## zoo.cfg 파일
## datdaDir 은 각각의 서버에 맞게 설정하는데
dataDir=/zkdata
# the port at which the clients will connect
clientPort=2181
- dataDir : 주키퍼의 트랜잭션 로그와 스냅샷이 저장되는 경로(위에서 생성한 경로 지정)
- clientPort : Client 접속 포트(Default로 설정되어 있습니다.)
주키퍼 실행
{ZOOKEEPER_HOME}/zookeeper 디렉토리에서 실행합니다.
{ZOOKEEPER_HOME} 는 다운로드 후 압축을 푼 경로입니다. 각자 경로가 다를 수 있습니다.
기본적으로 localhost(127.0.0.1) 주소로 서버를 기동하게 되어 있으니, 다른 IP 주소를 설정하고 싶은 경우에는 zkServer.sh 파일을 열어 localhost 부분을 원하는 IP Address로 변경하면 됩니다.
$ bin/zkServer.sh start
아래와 같은 실행결과가 화면에 표시되면 정상입니다.
ZooKeeper JMX enabled by default
Using config: /apach/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
주키퍼는 default로 admin server를 기동하는데 8080 port를 사용합니다.
만일, 주키퍼 기동 시 port 오류가 발생할 경우 충돌한 port를 확인한 후 8080 por 이면
admin.enableServer=false 로 설정하던지, admin.serverPort를 충돌이 되지않는 다른 port를 사용합니다.
zoo.cfg 파일 설정 내용
admin.enableServer=false 또는
admin.serverPort=8888
zookeeper 접속
아래 명령어로 로컬 ZooKeeper 서버에 접속합니다.
bin/zkCli.sh -server 127.0.0.1:2181
아래와 같이 CONNECTED 프롬프트가 나오면 정상입니다.
Connecting to 127.0.0.1:2181
...
...
[zk: 127.0.0.1:2181(CONNECTED) 0]
혹시,
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
메시지 상태에 멈추어 있으면 엔터키를 칩니다.
위 프롬프트에서 help 명령어를 입력하고 엔터를 칩니다. 그럼 아래와 같이 표시됩니다.
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
... ...
close
connect host:port
zookeeper 접속 종료
quit 명령어로 로컬 ZooKeeper 서버에 접속을 종료합니다.
[zk: 127.0.0.1:2181(CONNECTED) 0] quit
zookeeper 서비스 종료
아래 명령어로 ZooKeeper 서비스를 종료합니다.
bin/zkServer.sh stop
주키퍼 환경설정 - 멀티노드
주키퍼 다운로드 및 설치는 위에서 설명한 주키퍼 환경설정 - 싱글노드 과 동일합니다.
주키퍼 환경설정 sample 파일은 zookeeper/conf 아래에 있습니다. sample 파일을 복사해서 사용합니다.
$ cd {ZOOKEEPER_HOME}/zookeeper/conf/
$ cp zoo_sample.cfg zoo1.cfg
$ cp zoo_sample.cfg zoo2.cfg
$ cp zoo_sample.cfg zoo3.cfg
3개 노드로 구성할 경우 아래와 같이 환경설정을 해준다.
(zoo1.cfg 예, 다른 2개의 cfg 파일도 동일하게 작성합니다. 단, dataDir과 clientPor는 각 다르게 작성합니다.)
환경파일 설정
zoo1.cfg 파일 내용
## zoo1.cfg 파일
## datdaDir 은 각각의 서버에 맞게 설정하는데
## 하나의 서버에 3개의 node를 구성할 경우 각 디렉토리를 다르게 설정
dataDir=/zkdata1
# the port at which the clients will connect
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
zoo2.cfg 파일 내용
## zoo2.cfg 파일
## datdaDir 은 각각의 서버에 맞게 설정하는데
## 하나의 서버에 3개의 node를 구성할 경우 각 디렉토리를 다르게 설정
dataDir=/zkdata2
# the port at which the clients will connect
clientPort=2182
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
zoo3.cfg 파일 내용
## zoo3.cfg 파일
## datdaDir 은 각각의 서버에 맞게 설정하는데
## 하나의 서버에 3개의 node를 구성할 경우 각 디렉토리를 다르게 설정
dataDir=/zkdata3
# the port at which the clients will connect
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
주키퍼 실행
아래 명령어로 3개의 주키퍼 서버를 기동합니다.
$ bin/zkServer.sh start conf/zoo1.cfg
$ bin/zkServer.sh start conf/zoo2.cfg
$ bin/zkServer.sh start conf/zoo3.cfg
가각의 서버 기동 시 아래와 같은 실행결과가 화면에 표시되면 정상입니다.
ZooKeeper JMX enabled by default
Using config: /apach/zookeeper/bin/../conf/zoo1.cfg
Starting zookeeper ... STARTED
zookeeper 접속
주키퍼 서버가 정상 기동인지 확인하기 위해 아래 명령어로 가각의 ZooKeeper 서버에 접속합니다.
서버별 접속 port를 달리하면서 접속확인하면 됩니다.
bin/zkCli.sh -server 127.0.0.1:2181
bin/zkCli.sh -server 127.0.0.1:2182
bin/zkCli.sh -server 127.0.0.1:2183
아래와 같이 CONNECTED 프롬프트가 나오면 정상입니다.
Connecting to 127.0.0.1:2181
...
...
[zk: 127.0.0.1:2181(CONNECTED) 0]
혹시,
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
메시지 상태에 멈추어 있으면 엔터키를 칩니다.
위 프롬프트에서 help 명령어를 입력하고 엔터를 칩니다. 그럼 아래와 같이 표시됩니다.
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
... ...
close
connect host:port
zookeeper 명령창에서 ls 명령어 znode를 조회합니다.
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]
* 참고로, 아파치 broker 서버가 기동되면 zookeeper에서 생성한 zookeeper znode를 제외한 많은 수의 znode들이 생성된다.
다음은 아파치 브로커 3개의 node를 기동시키고 znode를 조회한 결과입니다.
추가로 /brokers/ids znode 를 조회해보면 3개의 broker가 등록된 것을 확인할 수 있습니다.
[zk: 127.0.0.1:2182(CONNECTED) 21] ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, feature,
isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
[zk: 127.0.0.1:2182(CONNECTED) 19] ls /brokers/ids
[1, 2, 3]
zookeeper 서비스 종료
아래 명령어로 3개의 ZooKeeper 서비스를 종료합니다.
bin/zkServer.sh stop conf/zoo1.cfg
bin/zkServer.sh stop conf/zoo2.cfg
bin/zkServer.sh stop conf/zoo3.cfg
'Apache Kafka' 카테고리의 다른 글
AWS MSK (0) | 2022.01.11 |
---|---|
주키퍼 CLI (0) | 2022.01.09 |
주키퍼 Cluster 구성 (0) | 2022.01.08 |
아파치 주키퍼란 (0) | 2022.01.08 |
Confluent란 (0) | 2022.01.07 |