CLOUD/OpenSource

[Kafka] Zookeeper & Kafka Clustering

alsruds 2023. 3. 22. 02:57

》 Zookeeper 가 Kafka 관리

Kafka 를 통해 메세지 전송

Zookeeper&Kafka 서버 다운 방지 : Clustering

 

◎ 준비 : 가상머신 6대

→ Zookeeper 3대 : 200.200.200.155 & 200.200.200.156 & 200.200.200.157

Kafka 3대 : 200.200.200.150 & 200.200.200.151 & 200.200.200.145

 

 

[ Zookeeper 설정 ]

》 기본포트 : 2181

클러스터링 구성 시 : 2888, 3888 할당

          > 하나가 active (leader) & 나머지 standby (follower)

 

● 설치

# jdk 설치
yum -y install java-1.8.0-openjdk-devel.x86_64

# zookeeper 설치
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz

# 압축 해제
tar zxvf apache-zookeeper-3.7.1-bin.tar.gz

# 파일 이동
mv apache-zookeeper-3.7.1-bin /opt/zookeeper

 

파일 설정

# 새폴더 생성 : kafka에 대한 정보를 특정 폴더에 저장
mkdir -p /data/zookeeper

# 파일 복사
cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

# 파일 수정 
vi /opt/zookeeper/conf/zoo.cfg
    # dataDir=/tmp/zookeeper >>> dataDir=/data/zookeeper
    
    # 마지막 줄에 내용 추가
    # server.1=[zookeeper ip 1]:2888:3888	# server.[id]
    # server.2=[zookeeper ip 2]:2888:3888
    # server.3=[zookeeper ip 3]:2888:3888

# 파일 수정
vi /data/zookeeper/myid
	# id 입력 (ex. 1/2/3)

 

방화벽 해제

# 방화벽 해제
systemctl stop firewalld

# 실행할 때마다 꺼지게 설정
systemctl disable firewalld

 

 실행

# 실행
/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg

# 재시작
/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg

# 중지
/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg

 

확인

/opt/zookeeper/bin/zkServer.sh status

출력 결과 : Mode: leader / Mode: follower

 

 

[ Kafka 설정 ]

 설치

# jdk 설치
yum -y install java-1.8.0-openjdk-devel.x86_64

# kafka 설치
wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz

# 압축 해제
tar -xzvf kafka_2.13-3.4.0.tgz

# 파일 이동
mv kafka_2.13-3.4.0 /opt/kafka

 

/opt/kafka/config/server.properties  파일 설정

# 주석 해제 / 수정
broker.id = [id]
zookeeper.connect=[zookeeper ip 1]:2181,[zookeeper ip 2]:2181,[zookeeper ip 3]:2181
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://[broker ip(자기자신)]:9092

 

방화벽 해제

systemctl stop firewalld
systemctl disable firewalld

 

 실행

/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties

 

 확인

zookeeper 서버에서 확인

# 실행
/opt/zookeeper/bin/zkCli.sh 

# 실행 중인 kafka id 확인
ls /brokers/ids
    # id=1/2/3 으로 설정했기 때문에 [1,2,3]으로 출력
    # ls / : 설치된 목록 출력

확인~

 

 

[ 장애 상황 테스트 ]

① Zookeeper 장애

Leader 노드 서버가 다운되면 Follwer 노드 중에서 자동적으로 Leader 선출

현재 Leader : id=2

id=2 서버 다운 시 변경된 Leader : id=3

 

② Kafka 장애

서버 다운 시 zookeeper 서버 /opt/zookeeper/bin/zkCli.sh 프로그램 실행 후 ls /brokers/ids 목록에 출력 안됨

id=1 인 kafka 서버 다운 시

 

③ 장애 상황일 때 메세지 확인

# topic 목록 확인
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server [kafka ip 1]:9092,[kafka ip 2]:9092,[kafka ip 3]:9092

# topic 생성
/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server [kafka ip 1]:9092,[kafka ip 2]:9092,[kafka ip 3]:9092 --replication-factor [factor 개수] --partitions [partition 개수] --topic [생성할 topic 이름]

# topic 상세 확인
/opt/kafka/bin/kafka-topics.sh --bootstrap-server [kafka ip 1]:9092,[kafka ip 2]:9092,[kafka ip 3]:9092 --topic [확인할 topic 이름] --describe

 

확인~