기록

[MSA] 22. Ansible, Zooker, Kafka 설치 본문

Bootcamp/MSA

[MSA] 22. Ansible, Zooker, Kafka 설치

서기A 2023. 11. 8. 12:50

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)

 

백엔드 개발 부트캠프

백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.

playdata.io


1. AWS Instance 생성

# instance 생성
1. t2-medium
2. 10GB 공간
3. 7개의 instance

7개의 instance 생성

# option
1. 탄력적 IP off
2. IPv6 off
3. 프라이빗 IP 주소 on

option

# 나의 instance 만 검색
name : 내 instance

name :

# private ip 별 용도
1. 172.31.1.91
peter-zk01.foo.bar peter-zk01

2. 172.31.1.58
peter-zk02.foo.bar peter-zk02

3. 172.31.14.199
peter-zk03.foo.bar peter-zk03

4. 172.31.6.70
peter-kafka01.foo.bar peter-kafka01

5. 172.31.13.238
peter-kafka02.foo.bar peter-kafka02

6. 172.31.9.193
peter-kafka03.foo.bar peter-kafka03

7. 172.31.2.65
peter-ansible01.foo.bar peter-ansible01

 

ansible instance로 접속해서 나머지 instance 들은 타고 들어갈 예정이다. 

그리고 kafka를 직접 설치하는게 아니라 Github 에 이미 구성되어있는 자료를 다운받아 사용할 예정인데, 때문에 해당 Github 에서 사용한 구성 정보와 동일하게 이름을 설정하기 위해 peter-... 라는 이름을 사용하였다.

# ansible 로 사용할 instance의 public ip로 접속
1. 54.180.126.15
2. key 등록
3. ec2-user

ansible로 사용할 instance로 접속
ec2-user

# 여러 instance 가 접속할 수 있도록 key 생성
ssh-keygen -t rsa

key 생성

# 생성 된 key 확인
cd ~/.ssh

# public key 확인
cat id_rsa.pub

공개키 확인

 

instance 간 접속을 편하게 하기 위해 각 instance 내에서 서로의 공개키를 등록, 서버 정보를 추가하였다.

# 다른 instance 로 접속하기 위해 모든 instance의 authrized_keys에 공개키 등록
cd ~/.ssh
vim authorized_keys

# 작성했던 서버 정보 추가  
sudo vim /etc/hosts

authorized_key 에 instance 정보 추가
서버 정보들 추가


2. Ansible , Zookeeper, Kafka 설치

1. Ansible 서버 설치

# ansible 설치
sudo yum install ansible

ansible install

# 설치가 잘 됐는지 확인
ansible --version

ansible version

 

2. Zookeeper, Kafka 구성을 편하게 하기 위해 Github Open Source에서 Clone

# script 파일 clone 해오기
git clone https://github.com/onlybooks/kafka2

git clone

 # 설치 파일이 있는 경로로 이동
 cd kafka2/chapter2/ansible_playbook/
 
 해당 디렉토리 내의 yml 파일을 이용해 설치를 진행한다.

디렉토리 이동

 

3. Zookeeper 설치를 위해 zookeeper 클러스터 내에 jdk 설치

# ansible server 접속
ssh peter-zk01.foo.bar
ssh peter-zk02.foo.bar
ssh peter-zk03.foo.bar

ansible 서버 접속

# 각 ansible 서버 내 jdk 설치
sudo dnf install java-1.8.0-amazon-corretto-devel

jdk 설치

# 설치한 jdk 확인
java -version
javac -version​

jdk 확인

 

4. Zookeeper 설치

# amazon-ec2 version 변경으로 인한 설정 변경
name: ['java-1.8.0-amazon-corretto-devel', 'krb5-workstation', 'git']

설정 변경

# zookeeper 설치
ansible-playbook -i hosts zookeeper.yml

설치 완료

# ansible 서버 접속
ssh peter-zk01.foo.bar
ssh peter-zk02.foo.bar
ssh peter-zk03.foo.bar

셋 중 하나에 접속해 zookeeper 접속이 가능한지 테스트한다.

# zookeeper 서버 실행
sudo systemctl status zookeeper-server

zookeeper 접속

 

5. Kafka 설치

# kafka 설치
ansible-playbook -i hosts kafka.yml

kafka 설치

# kafka 클러스터 접속
ssh peter-kafka01.foo.bar
ssh peter-kafka02.foo.bar
ssh peter-kafka03.foo.bar

셋 중 하나에 접속해 kafka 서버 실행이 가능한지 테스트한다. 

# kafka 서버 실행
sudo systemctl status kafka-server

kafka 접속


3. Kafka Producer, Consumer 테스트

# kafka 클러스터 접속
ssh peter-kafka01.foo.bar

# Kafka Topic 생성
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server peter-kafka01.foo.bar:9092 \
--create --topic peter-overview01 --partitions 1 --replication-factor 3

kafka topic 생성

# kafka console consumer 실행
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server peter-kafka01.foo.bar:9092 \
--topic peter-overview01

consumer

# 다른 kafka 클러스터 접속
ssh peter-kafka02.foo.bar

# kafka console producer 실행
/usr/local/kafka/bin/kafka-console-producer.sh --bootstrap-server peter-kafka01.foo.bar:9092 \
--topic peter-overview01

producer

# producer 에서 메세지를 보낼 시 comsumer 가 받는 것 확인
hi consumer

producer에서 consumer 로 메세지 전송


5. 69일차 후기

MSA 로 설계를 함에 있어, 분리 되어있는 DB 끼리 데이터를 동기화하려면 서로의 서비스 API 를 호출해 직접 DB에 INSERT 해, 양쪽의 DB를 일치시켜줬어야했다.

 

서비스의 종류가 너무 많아지며 해당 방법으로 DB 동기화를 진행할 시 서비스 구조가 너무 복잡해 지게 되었고, 처리량을 감당할 수 없게 되었다.

때문에 이를 해결하기 위해 카프카를 사용하게 되었고, 카프카가 지원해주는 높은 처리량, 낮은 지연시간 등을 통해 효율적으로 데이터를 처리할 수 있게 되었다.

'Bootcamp > MSA' 카테고리의 다른 글

[MSA] 23. EC2 접속 편의성, Kafka  (0) 2023.11.09
[MSA] 21. Keycloak  (0) 2023.11.07
[MSA] 20. Custom System 구축, Kafka  (0) 2023.11.06
[MSA] 19. Namespace, ConfigMap, AWS CLI  (0) 2023.11.03
[MSA] 18. Ingress, PV / PVC  (0) 2023.11.02