dist. system

Zookeeper 설치법 정리

식피두 2020. 10. 26. 14:29

회사에서 이미지 검색 시스템을 구축할 때

분산 메시지 플랫폼으로 카프카를 이용하였는데,

카프카 클러스터의 코디네이션 시스템인 zookeeper를 먼저 구축해야했다.

 

잊기 전에 주키퍼 앙상블의 구축 방법을 간략히 정리하고,

주키퍼의 컨셉에 대해서 정리해 놓자.

 

'카프카, 데이터 플랫폼의 최강자' 설치법 부분을 많이 참고하였다.

정말 좋은 책!

 

서버 세팅 (3 대)

OS ; centOS 7.4

MEM ; 8GB

SWAP ; 8GB

Partition ;

- SAS 1TB * 2 (raid 1)

- / ; sda1 (100G, OS)

- /data ; sda3 (나머지 몰아 줌, log 용)

- /SAS 2TB * 2 ( /data1, /data2)

 

주키퍼 설치법

cd /usr/local
wget http://apache.mirror.cdnetworks.com/zookeeper/stable/zookeeper-3.4.13.tar.gz 

# (or 다른데 받고 /usr/local로 옮기기)
sudo tar zxf zookeeper-3.4.13.tar.gz

# 유지관리를 위해 심볼릭 링크 생성

sudo ln -s zookeeper-3.4.13 zookeeper
ls -la zookeeper 로 링크 생성 확인

/data 파티션을 미리 생성해 놓는다.

myid 파일 생성 및 환경 설정 파일을 생성 및 수정해준다.

참고로 2888, 2888은 기본 포트이고, 앙상블 내 노드끼리 연결하는 데 사용하거나, 리더 선출에 사용한다.

# /data/myid 에 각 서버 별로 1, 2, 3 을 적어준다.
echo '1' > /data/myid

# 주키퍼 환경설정 파일 생성 /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000 # 주키퍼가 사용하는 시간에 대한 기본 측정 단위(밀리초)
initLimit=10 # 팔로워가 리더와 초기에 연결하는 시간에 대한 타임 아웃 tick의 수
syncLimit=5 # 팔로워와 리더가 동기화 하는 시간에 대한 타임 아웃 tick의 수 (주키퍼에 저장된 데이터가 크면 수를 늘린다)
dataDir=/data # 주키퍼의 트랜잭션 로그와 스냅샷이 저장되는 데이터 저장경로
clientPort=2181 # 주키퍼 사용 TCP 포트
server.1=kafka01.rnd:2888:3888 # 주키퍼 앙상블 구성을 위한 설정 server.myid
server.2=kafka02.rnd:2888:3888
server.3=kafka03.rnd:2888:3888

- 주키퍼는 애플리케이션에서 별도의 데이터 디렉터리를 사용하며,

- 이 디렉터리에 znode의 복사본인 스냅샷과, 트랜잭션 로그들이 저장 된다.

- znode에 변경사항이 발생하면 트랜잭션 로그에 추가된다.

- 로그가 어느 정도 커지면, 모든 znode의 상태에 대한 스냅샷이 파일 시스템에 저장된다.

 

주키퍼 실행

 sudo /usr/local/zookeeper/bin/zkServer.sh start
 sudo /usr/local/zookeeper/bin/zkServer.sh stop

 

리눅스 서버 및 애플리케이션 서버 운영시 프로세스 관리가 중요하기 때문에

systemd에 등록하는 것을 추천한다.

# sudo vim /etc/systemd/system/zookeeper-server.service

[Unit]
Description=zookeeper-server
After=network.target

[Service]
Type=forking
User=root
Group=root
SyslogIdentifier=zookeeper-server
WorkingDirectory=/usr/local/zookeeper
Restart=always
RestartSec=0s
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop

[Unit]에는 일반적인 옵션을 적는다.

가장 많이 쓰는 것은 After, Before (실행 순서 조정)

Description은 유닛에 대한 설명이며, systemctl status 명령어에 표시 된다.

After ; 유닛이 시작되는 순서를 조정할 수 있으며, After에 지정된 유닛이 실행된 이후에 시작된다.

Before ; 지정된 유닛 이전에 실행된다.

 

[Service]에는 서비스 실행과 관련된 옵션을 기재한다.

Type ; ExecStart에 영향을 주는 유닛 프로세스가 시작되며, simple, forking, oneshot, idle 등이 있다.

SyslogIdentifier ; syslog에서 구분하기 위한 이름

WorkingDirectory ; 실행된 프로세스의 작업 디렉토리 설정, 만약 설정하지 않을 시 root의 디렉토리이거나 user로 실행되면 user의 홈 디렉터리가 설정됨

Restart ; always일 경우 systemctl 명령어로 인한 중지를 제외하고 프로세스가 종료될 경우 재시작

RestartSec ; 몇 초에 실행할 지

ExecStart ; 서비스가 시작될 때 실행할 명령어 또는 스크립트

ExceStop

 

다 작성하였다면, 아래 명령어를 통해 systemd를 재시작한다.

sudo systemctl daemon-reload

이 후에 주키퍼를 시작/중지하고자 한다면

sudo systemctl start zookeeper-server.service
sudo systemctl stop zookeeper-server.service

주키퍼 서비스를 서버가 부팅될 때 자동으로 실행되도록 설정

sudo systemctl enable zookeeper-server.service (<->disable)

systemd에 등록된 프로세스는 systemctl을 통해 확인 가능

sudo systemctl status zookeeper-server.service

systemctl에 대한 추가 사용법은 '정광섭 systemctl'을 검색

 

systemd unit 등록 관련 옵션 정리

- RHEL 7 의 OS 적인 가장 큰 변화는 3.x 커널을 사용한다는 점(물론 2.6.x 커널에서 큰 차이가 있는 것은 아니다.) 그리고 정통적인 init 데몬에서 systemd 데몬으로 변경이 되었다는 점이다. systemd 에 대

fmd1225.tistory.com