DB & AWS Knowledge
Zookeeper 설치 방법 - 기본설치 본문
이 페이지에서는 Kafka 를 설치하기 위해 필요한 zookeeper 를 설치하는 방법에 대해서 다룬다.
이 게시글은 아래의 게시글에 이어지는 글이기에 이전 글을 먼저 읽는 것을 권장한다.
[+] 2025.05.24 - [Kafka, MSK, Kinesis/아키텍처 및 내부 구조] - Zookeeper 개요
또한 설치하는 방법에 추가로 덧붙일 내용은 ※ 로 추가한다.
필자는 AWS EC2 Linux 2 기준으로 Zookeeper 를 설치하는 방법을 다룬다.
JDK (또는 OpenJDK )설치
Zookeeper 를 설치하기 위해서는 OS 에 JDK 또는 OpenJDK 가 먼저 설치되어야한다.
JDK 는 yum 또는 tar 파일을 받아서 직접 디렉토리에 구성하는 방법이 있는데 필자는 후자의 방법으로 OpenJDK 를 받는다.
OpenJDK 설치를 위해서는 https://jdk.java.net/archive/ 로 에 접속 후 아래 화면과 같이 자신이 설치 할 버전을 찾아서 링크를 복사한다. 이 글을 작성하는 기준으로 JDK 는 24버전이 최신인데 필자는 17 버전으로 설치한다.
그후 wget 명령어로 다운로드를 받아서 자신의 OS 디렉토리를 확인한다.
※ 필자는 wget 을 사용할 수 있기에 편의상 이를 이용했으나, 사용자 환경, 보안규정에 따라 이러한 파일들을 옮기는 방법이 제한되어 있을 수 있기에 자신의 환경에 맞는 방법을 이용한다.
$ wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
--2025-06-12 17:23:44-- https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
Resolving download.java.net (download.java.net)... 23.54.60.105
Connecting to download.java.net (download.java.net)|23.54.60.105|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 187033144 (178M) [application/x-gzip]
Saving to: ‘openjdk-17.0.2_linux-x64_bin.tar.gz’
100%[========================================================================================>] 187,033,144 74.8MB/s in 2.4s
$ ls -alrt
total 459936
(...)
-rw-rw-r-- 1 ec2-user ec2-user 187033144 Dec 27 2021 openjdk-17.0.2_linux-x64_bin.tar.gz
(...)
그 후, tar 명령어를 통해 압축을 푼다.
$ tar -zxf openjdk-17.0.2_linux-x64_bin.tar.gz
$ls -alrt
(...)
-rw-rw-r-- 1 ec2-user ec2-user 187033144 Dec 27 2021 openjdk-17.0.2_linux-x64_bin.tar.gz
(...)
drwxrwxr-x 8 ec2-user ec2-user 96 Jun 12 17:24 jdk-17.0.2
이제 이 jdk 디렉토리를 JDK 를 구성하길 원하는 디렉토리로 옮긴 후, HOME 디렉토리를 설정하면 OpenJDK 를 이용 할 수 있다.
(yum 으로 설치하면 임의의 디렉토리로 알아서 구성 해 준다.)
이를 위해서는 먼저 JDK 디렉토리를 bash 에 기입해준다.
여기서 필자는 편의상 /etc/bashrc 에 모든 설정값을 넣는다.
※ 이는 사용자의 환경에 따라 어느 범위에 까지 bash 를 반영 할 수 있는지 다를 수 있다. 이는 각 환경에 맞게 적용한다.
# 자신이 사용하는 세션에만 bash 설정 값을 넣을시.
$ vi .bashrc
# OS 를 사용하는 모든 세션에 bash 설정 값을 넣을시. (global 단위)
# 여기서 bashrc 는 각 OS 환경에 따라 /etc/bash.bashrc 일수도 있다.
# EC2 환경에서는 etc 파일 변경 시, 특별한 설정이 없으면 sudo 를 이용해야 한다.
$ sudo vi /etc/bashrc
위에서 global bash 를 통해 파일을 연 후, 맨아래에 아래의 설정값을 넣는다.
export JAVA_HOME=/usr/java/jdk-17.0.2/
export PATH=$PATH:$JAVA_HOME/bin
alias java="/usr/java/jdk-17.0.2/bin/java"
alias javac="/usr/java/jdk-17.0.2/bin/javac"
이를 보면 추측하겠지만, 필자는 /usr/java/ 에 위의 java 디렉토리를 넣는다.
java 디렉토리를 옮긴 후 source 를 통해 bash 설정값을 다시 반영한다.
그 후, echo 결과 및 java version 을 확인하여 OpenJDK 구성 유무를 확인한다.
$ source /etc/bashrc
$ $ echo $JAVA_HOME
/usr/java/jdk-17.0.2/
$ java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
Zookeeper 설치
OpenJDK 를 구성후에는 아래의 순서대로 Zookeeper 를 설치 할 수 있다.
에 들어간 후, 아래의 항목을 선택하여 설치할 zookeeper 버전을 고른다.
이 때, 버전은 자신이 원하는 버전으로 선택하며, 이때 단순 버전 항목과, 버전 Source Release 가 있는데 위의 버전만 기재된 항목을 선택한다. 그리고 아래의 HTTP 항목에서 링크를 복사후 위의 OpenJDK 와 같이 wget 으로 다운받는다.
wget 으로 다운받은 후, tar file 이 구성되었는지 확인한다.
이 때, 자신이 받은 tar file 이 bin 명칭이 있는 zookeeper 파일인지 확인한다. 이는 bin 이 구성된 파일에 프로그램 실행 시 필요한 jar 파일이 구성되어 있기 때문이며, bin 이 없는 파일은 소스코드만 있는 파일이기에 프로세스로 실행을 할 수 없다.
$ wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
--2025-06-12 17:46:39-- https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
Resolving dlcdn.apache.org (dlcdn.apache.org)... 151.101.2.132, 2a04:4e42::644
Connecting to dlcdn.apache.org (dlcdn.apache.org)|151.101.2.132|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14609453 (14M) [application/x-gzip]
Saving to: ‘apache-zookeeper-3.8.4-bin.tar.gz’
100%[========================================================================================>] 14,609,453 --.-K/s in 0.05s
2025-06-12 17:46:40 (275 MB/s) - ‘apache-zookeeper-3.8.4-bin.tar.gz’ saved [14609453/14609453]
$ ls -alrt
total 474200
(...)
-rw-rw-r-- 1 ec2-user ec2-user 14609453 Feb 12 2024 apache-zookeeper-3.8.4-bin.tar.gz
(...)
위와 같이 똑같이 tar 로 압축을 푼 후, 디렉토리를 확인 해 본다.
$ tar -xzf apache-zookeeper-3.8.4-bin.tar.gz
$ ls -alrt
(...)
drwxrwxr-x 6 ec2-user ec2-user 133 Jun 12 17:46 apache-zookeeper-3.8.4-bin
(...)
이에 대한 디렉토리를 열어보면 아래의 디렉토리를 확인 할 수 있다. 우리가 확인할 디렉토리는 bin, log, conf 가 있다.
$ ls -alrt
-rw-r--r-- 1 ec2-user ec2-user 3570 Feb 12 2024 README_packaging.md
-rw-r--r-- 1 ec2-user ec2-user 2335 Feb 12 2024 README.md
-rw-r--r-- 1 ec2-user ec2-user 2084 Feb 12 2024 NOTICE.txt
-rw-r--r-- 1 ec2-user ec2-user 11358 Feb 12 2024 LICENSE.txt
drwxr-xr-x 2 ec2-user ec2-user 4096 Feb 12 2024 bin
drwxr-xr-x 5 ec2-user ec2-user 4096 Feb 12 2024 docs
drwxrwxr-x 6 ec2-user ec2-user 133 Jun 12 17:46 .
drwxrwxr-x 2 ec2-user ec2-user 4096 Jun 12 17:46 lib
drwxr-xr-x 2 ec2-user ec2-user 87 Jun 12 17:47 conf
drwx------ 8 ec2-user ec2-user 4096 Jun 12 17:47 ..
먼저, conf 디렉토리에 들어가서 zoo.cfg 를 아래의 설정을 작성한다.
$ cat zoo.cfg
tickTime=2000
dataDir=/home/ec2-user/data/zookeeper
clientPort=2181
위의 옵션은 각각 아래의 설정을 뜻한다.
- tickTime
ZooKeeper에서 사용하는 기본 시간 단위(밀리초). 세션 타임아웃, 하트비트 등 내부 시간 계산의 기준. 예: 2000이면 2초
- dataDir
ZooKeeper의 데이터(스냅샷, 트랜잭션 로그 등)를 저장할 디렉토리 경로
- clientPort
클라이언트가 ZooKeeper 서버에 연결할 때 사용하는 포트 번호. 기본값은 2181
그 후, 상위 디렉토리에 있는 bin 디렉토리로 간 후 아래와 같이 start 명령어를 수행한다.
[bin]$ ls -alrt
total 76
-rwxr-xr-x 1 ec2-user ec2-user 1385 Feb 12 2024 zkTxnLogToolkit.sh
-rwxr-xr-x 1 ec2-user ec2-user 996 Feb 12 2024 zkTxnLogToolkit.cmd
-rwxr-xr-x 1 ec2-user ec2-user 1377 Feb 12 2024 zkSnapShotToolkit.sh
-rwxr-xr-x 1 ec2-user ec2-user 988 Feb 12 2024 zkSnapShotToolkit.cmd
-rwxr-xr-x 1 ec2-user ec2-user 1374 Feb 12 2024 zkSnapshotComparer.sh
-rwxr-xr-x 1 ec2-user ec2-user 987 Feb 12 2024 zkSnapshotComparer.cmd
-rwxr-xr-x 1 ec2-user ec2-user 11616 Feb 12 2024 zkServer.sh
-rwxr-xr-x 1 ec2-user ec2-user 4559 Feb 12 2024 zkServer-initialize.sh
-rwxr-xr-x 1 ec2-user ec2-user 1243 Feb 12 2024 zkServer.cmd
-rwxr-xr-x 1 ec2-user ec2-user 3613 Feb 12 2024 zkEnv.sh
-rwxr-xr-x 1 ec2-user ec2-user 1810 Feb 12 2024 zkEnv.cmd
-rwxr-xr-x 1 ec2-user ec2-user 1576 Feb 12 2024 zkCli.sh
-rwxr-xr-x 1 ec2-user ec2-user 1115 Feb 12 2024 zkCli.cmd
-rwxr-xr-x 1 ec2-user ec2-user 1978 Feb 12 2024 zkCleanup.sh
-rwxr-xr-x 1 ec2-user ec2-user 232 Feb 12 2024 README.txt
drwxr-xr-x 2 ec2-user ec2-user 4096 Feb 12 2024 .
drwxrwxr-x 6 ec2-user ec2-user 133 Jun 12 17:46 ..
$ sh zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
만일 failed 가 발생하면, 상위 디렉토리에 있는 log 디렉토리에 기록된 log 를 통해 문제를 해결하면 된다.
그 후, 성공적으로 zookeeper 가 구성되면 아래의 추가 명령어들을 통해 zookeeper 의 작동유무를 확인 할 수 있다.
$ ps -ef | grep zookeeper
ec2-user 21533 1 22 17:48 pts/1 00:00:01 /usr/java/jdk-17.0.2//bin/java -Dzookeeper.log.dir=/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../logs -Dzookeeper.log.file=zookeeper-ec2-user-server-ip-10-0-2-129.ap-northeast-2.compute.internal.log -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -cp /home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../zookeeper-server/target/classes:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../build/classes:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../zookeeper-server/target/lib/*.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../build/lib/*.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/zookeeper-prometheus-metrics-3.8.4.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/zookeeper-jute-3.8.4.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/zookeeper-3.8.4.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/snappy-java-1.1.10.5.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/slf4j-api-1.7.30.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/simpleclient_servlet-0.9.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/simpleclient_hotspot-0.9.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/simpleclient_common-0.9.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/simpleclient-0.9.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-transport-native-unix-common-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-transport-native-epoll-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-transport-classes-epoll-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-transport-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-resolver-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-handler-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-common-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-codec-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/netty-buffer-4.1.105.Final.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/metrics-core-4.1.12.1.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/logback-core-1.2.13.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/logback-classic-1.2.13.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jline-2.14.6.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-util-ajax-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-util-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-servlet-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-server-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-security-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-io-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jetty-http-9.4.53.v20231009.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/javax.servlet-api-3.1.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jackson-databind-2.15.2.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jackson-core-2.15.2.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/jackson-annotations-2.15.2.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/commons-io-2.11.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/commons-cli-1.5.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../lib/audience-annotations-0.12.0.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../zookeeper-*.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../zookeeper-server/src/main/resources/lib/*.jar:/home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../conf: -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/ec2-user/apache-zookeeper-3.8.4-bin/bin/../conf/zoo.cfg
ec2-user 21577 20949 0 17:48 pts/1 00:00:00 grep --color=auto zookeeper
$ telnet localhost 2181
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
srvr
Zookeeper version: 3.8.4-9316c2a7a97e1666d8f4593f34dd6fc36ecc436c, built on 2024-02-12 22:16 UTC
Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 5
Connection closed by foreign host.
'Kafka, MSK, Kinesis > 아키텍처 및 내부 구조' 카테고리의 다른 글
Kafka Broker 설치 방법 (0) | 2025.06.16 |
---|---|
Zookeeper 설치 방법 - 앙상블 (ensemble) 구성 (0) | 2025.06.15 |
Zookeeper 개요 (0) | 2025.05.24 |
Kafka 기본 요소들에 대한 추가 이해 - 2 (0) | 2025.05.21 |
Kafka 기본 요소들에 대한 추가 이해 - 1 (0) | 2025.05.21 |