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

엔코아 플레이데이터(Encore Playdata) Backend 2기 백엔드 개발 부트캠프 (playdata.io)
백엔드 개발 부트캠프
백엔드 기초부터 배포까지! 매력있는 백엔드 개발자 포트폴리오를 완성하여 취업하세요.
playdata.io
1. AWS Instance 생성
# instance 생성
1. t2-medium
2. 10GB 공간
3. 7개의 instance

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

# 나의 instance 만 검색
name : 내 instance

# 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


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

# 생성 된 key 확인
cd ~/.ssh
# public key 확인
cat id_rsa.pub

instance 간 접속을 편하게 하기 위해 각 instance 내에서 서로의 공개키를 등록, 서버 정보를 추가하였다.
# 다른 instance 로 접속하기 위해 모든 instance의 authrized_keys에 공개키 등록
cd ~/.ssh
vim authorized_keys
# 작성했던 서버 정보 추가
sudo vim /etc/hosts


2. Ansible , Zookeeper, Kafka 설치
1. Ansible 서버 설치
# ansible 설치
sudo yum install ansible

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

2. Zookeeper, Kafka 구성을 편하게 하기 위해 Github Open Source에서 Clone
# script 파일 clone 해오기
git clone https://github.com/onlybooks/kafka2

# 설치 파일이 있는 경로로 이동
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 서버 내 jdk 설치
sudo dnf install java-1.8.0-amazon-corretto-devel

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

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

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

# kafka 클러스터 접속
ssh peter-kafka01.foo.bar
ssh peter-kafka02.foo.bar
ssh peter-kafka03.foo.bar
셋 중 하나에 접속해 kafka 서버 실행이 가능한지 테스트한다.
# kafka 서버 실행
sudo systemctl status kafka-server

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 console consumer 실행
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server peter-kafka01.foo.bar:9092 \
--topic peter-overview01

# 다른 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 에서 메세지를 보낼 시 comsumer 가 받는 것 확인
hi 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 |