Kafka

주키퍼 설치하기

ppthejake 2023. 12. 11. 16:12

카프카는 클러스터의 메타데이터와 컨슈머 클라이언트에 대한 정보를 저장하기 위해 아파치 주키퍼를 사용한다. 

주키퍼는 설정정보관리, 이름 부여, 분산 동기화, 그룹 서비스를 제공하는 중앙화된 서비스이다.

https://zookeeper.apache.org/releases.html 에서 필요한 버전을 받거나  도커 이미지를 사용하면 된다.

1. 독립 실행 서버

주키퍼는 기본적인 예제 설정파일(/usr/local/zookeeper/config/zoo_sample.cfg)과 함께 배포된다.

다음의 단계로 설치를 진행한다.

  1. 배포판 다운로드 및 압축해제
  2. /usr/local/zookeeper 로 이동
  3. 데이터 디렉토리 생성(/var/lib/zookeeper)
  4. zoo.cfg 파일 생성
$ tar -zxf apache-zookeeper-3.8.3-bin.tar.gz
$ mv apache-zookeeper-3.8.3-bin /usr/local/zookeeper
$ mkdir -p /var/lib/zookeeper
$ cp > /usr/local/zookeeper/conf/zoo.cfg << EOF
> tickTime=2000
> dataDir=/var/lib/zookeeper
> clientPort=2181
> EOF

$ export JAVA_HOME=/usr/java/jdk-17.0.9
$ /usr/local/zookeeper/bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
$

2. 주키퍼 앙상블

주키퍼는 고가용성을 보장하기 위해 앙상블(ensemble) 이라 불리는 클러스터 단위로 동작하도록 설계되었다. 주키퍼가 사용하는 부하 분산 알고리즘 때문에 앙상블은 홀수 개의 서버 ( ex. 3개, 5개, 7개 ...) 를 가지는것을 권장한다. 주키퍼가 요청에 응답하려면 앙상블 멤버의 과반 이상이 작동하고 있어야 하기 때문이다. 다시말해, 3개의 노드로 이루어진 앙상블에서 1개의 노드가 정지하더라도 문제없이 동작한다는 이야기이다. 5개의 노드의 경우 2개 노드가 정지하더라도 문제가 발생하지 않는다.

주키퍼 앙상블 크기 결정하기
앙상블을 구성할 때 5개 노드 크기를 고려하자. 앙상블 설정을 변경하려면, 한 번에 한 대의 노드를 정지시켰다가 설정을 변경한 뒤 다시 시작해야 한다. 만약 앙상블이 2대 이상의 노드 정지를 처리할 수 없다면, 변경 작업을 수행하는 데 위험이 따를 수 밖에 없다. 그렇다고 9대 이상의 노드를 사용하는 것도 권장하지 않는데, 합의 프로토콜 특성상 성능이 내려가기 시작할 수 있기 때문이다. 또한, 클라이언트 연결이 너무 많아서 노드가 부하를 감당하기 어렵다면 옵저버 노드를 추가함으로써 읽기 전용 트래픽을 분산시킬 수 있다.

 

주키퍼 앙상블을 구성하려면 두 가지가 필요하다.

  1. 각 서버가 공통된 설정 파일을 사용해야하고 이 설정 파일에 모든 서버의 목록이 포함되어야 한다.
  2. 각 서버는 데이터 디렉토리에 자신의 ID 번호를 지정하는 myid 파일을 가지고 있어야 한다.

< zoo.cfg > 

tickTime=2000

# 팔로워가 리더와의 연결할 수 있는 최대 시간(초기화 제한시간)
# 초기화 제한시간 : initLimit * tickTime = 20 * 2000 밀리초 = 40초
initLimit=20
# 팔로워가 리더와 연결할 수 있는 최대 시간(동기화 제한시간)
syncLimit=5

dataDir=/var/lib/zookeeper

# 클라이언트가 접속할 수 있는 포트
clientPort=2181

# 앙상블 서버구성
# server.{X} = {hostname}:{peerPort}:{leaderPort}
# hostname : 서버의 호스트명 or IP
# peerPort : 앙상블 서버간 통신을 하는 TCP 포트
# leaderPort : 리더를 선출하는 데 사용되는 TCP 포트
server.1=zoo1.example.com:2888:3888
server.2=zoo2.example.com:2888:3888
server.3=zoo3.example.com:2888:3888


# 스냅샷을 24시간마다 생성. 최대 3개를 유지
autopurge.snapRetainCount=3
autopurge.purgeInterval=24

 

클라이언트는 clientPort 에 지정된 포트로 연결할 수만 있으면 된다. 하지만 앙상블 멤버들은 세 포트(2181, 2888, 3888)를 모두 사용해서 서로 통신할 수 있어야 한다.

공통 설정 파일 외에도 각 서버는 dataDir 디렉토리에 myid 라는 이름의 파일(zoo1.cfg, zoo2.cfg, zoo3.cfg) 을 가지고 있어야 한다. 이 파일은 설정 파일에 지정된 것과 일치하는 , 서버 ID 번호를 포함해야 한다. 이 모든 작업들을 완료한 뒤 서버를 시작하면, 앙상블에 포함된 서버들은 서로 통신하게 된다.

'Kafka' 카테고리의 다른 글

브로커 설치하기  (0) 2024.01.12
Kafka 개요  (0) 2023.12.09