[Kafka]주키퍼 설치 셋팅하기


이 글은 카프카, 데이터 플랫폼의 최강자 고승범/공용준 님의 책을 공부하며
정리하는 글입니다.

[Kafka]주키퍼 설치 셋팅하기

GCP의 무료 크레딧($300)을 사용해서 테스트하자

GCP VM인스턴스 생성하기(주키퍼)

  • vCPU : 1개
  • memory : 6.5G
  • OS : Ubuntu 16.04 LTS
  • boot & local Disk : SSD 10G
  • 방화벽: HTTP, HTTPS 트래픽 허용
  • Cloud API 액세스 범위 : 모든 Cloud API에 대한 전체 액세스 허용
  • 대수 : 3대


주키퍼(zookeeper) 셋팅하기

java 설치하기(주키퍼는 자바 애플리케이션)

  • $ sudo apt-get update
  • $ sudo apt-get install openjdk-8-jdk
  • $ y

주키퍼 다운 페이지(http://apache.tt.co.kr/zookeeper/) 버전은 현재 3.5 beta, 실습 환경은 3.4.10 입니다.

  • /home/호스트명 $ wget http://apache.tt.co.kr/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

  • /home/호스트명 $ tar zxf zookeeper-3.4.10.tar.gz

심볼릭 링크 생성 및 확인

  • /home/호스트명 $ sudo ln -s zookeeper-3.4.10 zookeeper
  • /home/호스트명 $ ls -al zookeeper
  • 출력: lrwxrwxrwx 1 shalee729 shalee729 16 Aug 7 02:25 zookeeper -> zookeeper-3.4.10


    데이터 디렉토리 설정하기

주키퍼는 애플리 케이션에서 별도의 디렉토리를 사용한다
밑에 설정하는 디렉토리는 지노드(znode)의 복사본인 스냅샷과 트랜잭션 로그들이 저장된다.
지노드에 변경사항이 발생 -> 변경사항은 트랜잭션 로그에 추가
로그가 커지면, 현재 모든 지노드의 스냅샷이 파일시스템에 저장
중요한 디렉토리이기 때문에 설치 경로와 다른 경로로 설정하는 것이 바람직함.

  • ~$ mkdir -p /data


주키퍼용 스냅샷 만들고 복제하기

  • 스냅샷을 만들고 복제 하여 총 3대의 인스턴스를 만듭니다.
  • 아래부터는 3대를 기준으로 설명


앙상블 내 주키퍼 노드를 구분하기 위한 ID를 만들자

주키퍼에서 myid로 부르며 정수 형태로 만들어주어야 한다 위 /data 하단에 myid라는 파일을 만들고 내용은 1이라고 입력한다

  • 호스트명@zookeeper-01:~$ echo 1 | tee data/myid
  • 호스트명@zookeeper-02:~$ echo 2 | tee data/myid
  • 호스트명@zookeeper-03:~$ echo 3 | tee data/myid
  • 각각 출력 내용은 1, 2, 3 입니다.


3대의 인스턴스 외부ip 고정하기


/etc/hosts 설정하기(root 권한)

  • 예시는 zookeeper-01 설정이 예시입니다.
  • 초기 root 권한 변경
  • root 상태에서 진행합니다. 아래는 01예시이며, 02에서는 0.0.0.0(tab)zookeeper-02 겠죠?
  • $ vi /etc/hosts
  • 0.0.0.0(tab)zookeeper-01
  • 외부고정ip(tab)zookeeper-02
  • 외부고정ip(tab)zookeeper-03


주키퍼 환경설정 파일 알아보기

tickTime : 주키퍼가 사용하는 시간에 대한 기본 측정 단위(밀리초)

initLimit : 팔로워가 리더와 초기에 연결하는 시간에 대한 타임 아웃 tick의 수

  • Tick 이란 주기적으로 발생하는 특별한 인터럽트로 시스템 운용의 기준시간이며 심장

syncLimit : 팔로워가 리더와 동기화 하는 시간에 대한 타임 아웃 tick의 수(주키퍼에 저장된 데이터가 크면 수를 늘려야 한다)

dataDir : 주키퍼의 트랜잭션 로그와 스냅샷이 저장되는 데이터 자장 경로.(저는 /data 입니다)

clientPort : 주키퍼 사용 TCP 포트 default 2181 입니다

server.x : 주키퍼 앙상블 구성을 위한 서버 설정이며, server.myid 형식으로 사용

참고 : zoo.cfg 파일(주키퍼 동시 연결 제한, 세선 타임아웃 관리, 보관 스냅샷 수 등 상세 설정은 건드리지 않았습니다. 설정을 원하면 주키퍼 공식문서를 보자(doc/current/zookeeperAdmin.html#sc_configuration)


주키퍼 설정 파일 생성(3대에 전부 설정)

  • 아래 zoo.cfg 파일을 생성하기 전에 zoo_sample.cfg를 보는 것이 좋습니다.
  • $ vi /home/호스트명/zookeeper/conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/호스트명/data
clientPort=2181
server.1=zookeeper-01:2888:3888
server.2=zookeeper-02:2888:3888
server.3=zookeeper-03:2888:3888
이렇게 작성 후 저장


주키퍼 실행 / 정지

  • 주키퍼 실행
    • $ /home/shalee729/zookeeper/bin/zkServer.sh start
  • 주키퍼 정지
    • $ /home/shalee729/zookeeper/bin/zkServer.sh stop



용어정리
트랜잭션 : IT 환경에서 완전한 하나의 단위로 성공하거나 실패하는 개별 작업을 의미. 즉, 흔히 디비에서 접한 이 단어는 데이터 베이스의 상태를 변경을 위해 수행하는 작업의 단위.