[CentOS] Apache Zookeeper 설치 및 사용 방법

아파치 주키퍼(Apache ZooKeeper)는 아파치 소프트웨어 재단 프로젝트 중의 한 소프트웨어 프로젝트로서 공개 분산형 구성 서비스, 동기 서비스 및 대용량 분산 시스템을 위한 네이밍 레지스트리를 제공한다. 주키퍼는 하둡의 한 하위 프로젝트이었으나 지금은 독립적인 상위 프로젝트이다.
출처 : 위키백과

위의 설명처럼 메시키 큐를 관리하고 동기 서비스 및 대용량 분산 시스템을 구축하기 위해 Apache ZooKeeper 를 사용할 경우가 있습니다. Apache ZooKeeper 설치 및 사용 방법에 대해 알아보겠습니다.

운영환경

  • CentOS 7.6

Java jdk 설치

먼저 java jdk를 필수로 설치를 합니다.

1
[root@localhost ~]$ yum install java-1.8.0-openjdk.x86_64

profile 정보를 변경합니다.

1
2
3
4
[root@localhost ~]$ vim /etc/profile

# profile 파일 안에 아래의 내용을 추가
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk

source 명령어를 이용해서 변경된 내용 적용합니다.

1
[root@localhost ~]$ source /etc/profile

Zookeeper 설치

Zookeeper 서버 패키지를 다운로드하고 환경 설정을 합니다.

1. 계정 생성

먼저 계정을 생성합니다. 계정을 생성하는 이유는 Zookeeper를 별도로 관리하기 위함입니다.

1
2
[root@localhost ~]$ useradd zookeeper
[root@localhost ~]$ passwd zookeeper

생성된 계정으로 변경합니다.

1
[root@localhost ~]$ su - zookeeper

2. 다운로드 및 설치

다음의 명령어 순서대로 실행해서 다운로드 한 후 압축을 해제합니다.

1
2
3
4
[zookeeper@localhost ~]$ cd /home/test
[zookeeper@localhost zookeeper]$ wget http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
[zookeeper@localhost zookeeper]$ tar xvfzp zookeeper-3.4.14.tar.gz
[zookeeper@localhost zookeeper]$ ln -s zookeeper-3.4.14 zookeeper

3. 설정 파일 변경

데이터 디렉터리 경로와 서버 설정을 합니다.

1
2
3
4
5
6
7
8
[zookeeper@localhost test]$ cd zookeeper/conf
[zookeeper@localhost conf]$ cp zoo_sample.cfg zoo.cfg
[zookeeper@localhost conf]$ vim zoo.cfg

dataDir=/home/test/zookeeper/data #zookeeper 데이터 위치, 원하는 경로에 저장입력
server.1=zoo-1:2888:3888 #멀티 서버 설정 (주키퍼 서버가 한곳이 아닐때)
# server.2=server_host_1:2888:3888
# server.3=server_host_2:2888:3888

4. myid 생성

반드시 myid 파일을 dataDir 속성에 넣었던 경로에 만들어야 합니다. 호스트마다 아이디를 부여해야 합니다. 위의 설정에서 server.1에만 설정하였기 때문에 {dataDir}/myid 내부에 1이라는 값이 있어야 합니다. 그리고 이 값은 유일해야 하고 1~255 사이로 설정해야 합니다.

1
2
3
[zookeeper@localhost ~]$ cd /home/test/zookeeper/data
[zookeeper@localhost data]$ touch myid
[zookeeper@localhost data]$ echo 1 > myid

5. Zookeeper 서버 실행

다음 명령어를 실행하면 이상없이 서버가 실행됩니다.

1
2
[zookeeper@localhost ~]$ cd /home/test/zookeeper/bin
[zookeeper@localhost bin]$ ./zkServer.sh start

실행 확인

1
2
[zookeeper@localhost bin]$ ./zkCli.sh -server zoo-1:2181
[zookeeper@localhost bin]$ ls /

Zookeeper 서버 중지

1
[zookeeper@localhost bin]$ ./zkServer.sh stop

추가 설정

추가적으로 프로세스 저장 경로와 로그 저장 경로 변경 및 환경변수 등록을 위한 절차입니다. 변경하지 않아도 됩니다.

폴더 권한 변경

Zookeeper 프로세스 아이디 저장 폴더와 로그 저장 폴더를 생성하고 권한을 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
# root 계정으로 전환
[zookeeper@localhost ~]$ su -
[root@localhost ~]$ cd /var/run
[root@localhost run]$ mkdir zookeeper
[root@localhost run]$ chown zookeeper:zookeeper /var/run/zookeeper
[root@localhost run]$ cd ../log
[root@localhost log]$ mkdir zookeeper
[root@localhost log]$ chown zookeeper:zookeeper /var/log/zookeeper

# zookeeper 계정으로 다시 돌아가기
[root@localhost log]$ exit

추가로 위 두개의 폴더에 링크를 생성합니다.

1
2
3
[zookeeper@localhost log]$ cd /home/test/zookeeper
[zookeeper@localhost zookeeper]$ ln -s /var/run/zookeeper/ pids
[zookeeper@localhost zookeeper]$ ln -s /var/log/zookeeper/ logs

환경변수 변경

1
2
3
4
5
6
7
8
9
10
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
export ZOOKEEPER_HOME=/home/test/zookeeper
export ZOOKEEPER_CONF_DIR=$ZOOKEEPER_HOME/conf
export ZOOKEEPER_LOG_DIR=/var/log/zookeeper
export ZOO_LOG_DIR=$ZOOKEEPER_LOG_DIR
export ZOOKEEPER_PID_DIR=/var/run/zookeeper
export ZOOPIDFILE=$ZOOKEEPER_PID_DIR/zookeeper_server.pid
export SERVER_JVMFLAGS=-Xmx1024m
export JAVA=$JAVA_HOME/bin/java
export CLASSPATH=$ZOOKEEPER_CONF_DIR:/usr/share/java/jline.jar:/usr/share/java/log4j-1.2.jar:/usr/share/java/xercesImpl.jar:/usr/share/java/xmlParserAPIs.jar:/usr/share/java/netty.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/slf4j-log4j12.jar:/usr/share/java/zookeeper.jar

서버 재시작

1
2
[zookeeper@localhost bin]$ ./zkServer.sh stop
[zookeeper@localhost bin]$ ./zkServer.sh start

방화벽 설정

1
2
3
4
5
6
[root@localhost ~]$ firewall-cmd --permanent --zone=public --add-port=2181/tcp
[root@localhost ~]$ firewall-cmd --permanent --zone=public --add-port=2888/tcp
[root@localhost ~]$ firewall-cmd --permanent --zone=public --add-port=3888/tcp

## 방화벽 재시작
[root@localhost ~]$ firewall-cmd --reload
Share