๐ก ๋ชฉํ
์ฐ๋ฆฌ์ ํ๋ก์ ํธ์ ์ฐ์ธ Redis, Kafka, elasticsearch ๋ฅผ EC2 ์ ๋์์ ๋ฉ์ธ ์๋ฒ์ ์ฐ๊ฒฐ์์ผ์ผํ๋ค.
๊ธฐ์กด ๋ฉ์ธ ์๋ฒ์ Docker compose ๋ฅผ ์ค์นํด์ ๋ฉ์ธ ์๋ฒ์ ํจ๊ป Redis, Kafka, elasticsearch ๋ฅผ ์คํ์ํค๊ณ ์ ํ๋ค.
๐ฑ Docker compose ์ค์น
sudo su
๊ด๋ฆฌ์ ๋ชจ๋ ์คํ
apt-get update
์ธ์คํด์ค ํจํค์ง ๋ชฉ๋ก ์ ๋ฐ์ดํธ
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Docker compose ๋ฐ์ด๋๋ฆฌ ๋ค์ด๋ก๋
chmod +x /usr/local/bin/docker-compose
๋ค์ด๋ก๋ํ Docker compose ๋ฐ์ด๋๋ฆฌ์ ์คํ ๊ถํ์ ์ถ๊ฐํ๋ค.
๐ฑ t2.micro ์์๋ ๋ฌด๋ฆฌ
nano .docker-compose.yml
docker-compose ํ์ผ์ ๋ง๋ค์ด์ ๊ธฐ์กด์ ๋ก์ปฌ์์ ์์ฑํ๋ docker-compose ๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํด์ ๊ฐ์ ธ์จ ๋ค์
docker-compose up ์ ํตํด์ ์คํ์ํค๋๊น
์๋ฒ๊ฐ ์ฃฝ์๋ค.
git bash ์ฐฝ์ด ๋๋ ค์ง๊ณ ์๋ต์ด ์๊ณ ํด์ ๋ชจ๋ํฐ๋ง ํด๋ณด๋ CPU ์ฌ์ฉ๋์ด 100% ๋ก ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ ธ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ์คํด์ค๋ฅผ ์ค์งํ๊ณ ์ฌ๋ถํ ํด์ ๋ค์ ์์ํ๋ค.
์๋ฌด๋๋ ๊ธฐ์กด docker-compose ํ์ผ์ ์ ์ฉ๋์ด์๋ redis, kafka, elasticsearch ๋ฅผ ๋๋ ์ ๊ฐ ๊ฐ์ EC2 ์์ ๊ด๋ฆฌํ ํ์๊ฐ ์์ด๋ณด์ธ๋ค.
๊ธฐ์กด EC2 ์์๋
# ์ค์ง๋ ๋ชจ๋ ์ปจํ
์ด๋ ์ญ์
sudo docker container prune -f
# ์ฌ์ฉํ์ง ์๋ ๋ชจ๋ ์ด๋ฏธ์ง ์ญ์
sudo docker image prune -a -f
# ์ฌ์ฉํ์ง ์๋ ๋ชจ๋ ๋ณผ๋ฅจ ์ญ์
sudo docker volume prune -f
# ์ฌ์ฉํ์ง ์๋ ๋ชจ๋ ๋คํธ์ํฌ ์ญ์
sudo docker network prune -f
๋ช ๋ น์ด๋ฅผ ํตํด ๊ณต๊ฐ์ ๋ค์ ํ๋ณดํด์คฌ๋ค.
df -h
ํด๋น ๋ช ๋ น์ด๋ก ๋จ์ ์ฉ๋์ ํ์ธํ ์ ์๋ค.
๐ฑ ์๋ก์ด ์ธ์คํด์ค t2.micro ์์ Elastic search ์ค์น ์๋
์ด ์ค๋ฅ๋ Elasticsearch๊ฐ ์์ํ ๋ ์ฌ์ฉํ๋ JVM ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์์ ์์คํ ์์ ํ ๋นํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
Elasticsearch๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋นํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ตฌํ๊ธฐ ๋๋ฌธ์ ๋ ํฐ ์ฉ๋์ ์ธ์คํด์ค๊ฐ ํ์ํ๋ค.
์ค๋ฅ ๋ถ์
- ์ค๋ฅ ๋ฉ์์ง์์ Native memory allocation (mmap) failed to map 2147483648 bytes๋ผ๊ณ ๋์ค๋ ๋ถ๋ถ์ ๋ณด๋ฉด, Elasticsearch๊ฐ 2GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ค๊ณ ์๋ํ์ผ๋, ์์คํ ์์ ํ ๋นํ ์ ์๋ค๋ ๊ฒ
- ์ด ๋ฌธ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด๊ฑฐ๋ ES_JAVA_OPTS์ ์ค์ ๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ์ด๊ณผํ์ ๋ ๋ฐ์
docker-compose.yml
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
container_name: elasticsearch
environment:
- node.name=es01
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1g -Xmx1g" # ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ 1GB๋ก ์ค์
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es-data:/usr/share/elasticsearch/data # Elasticsearch ๋ฐ์ดํฐ ์ ์ฅ
ports:
- "9200:9200" # HTTP ํฌํธ
- "9300:9300" # Transport ํฌํธ
networks:
- es_network
volumes:
es-data: # Elasticsearch ๋ฐ์ดํฐ ์ ์ฅ์ฉ Volume
networks:
es_network: # ์ปค์คํ
๋คํธ์ํฌ ์ค์
driver: bridge
1. docker-compose ํ์ผ์ ๋ง๋ค์ด์ elasticsearch ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ 1GB ๋ก ์ค์ ํ๋ค.
2. t2.medium ์ผ๋ก ์ธ์คํด์ค ์ ํ ๋ณ๊ฒฝํ๋ค.
๐ฑ Kafka docker-compose ์ค์
version: "3.8"
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2181
ports:
- "22181:2181"
kafka1:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- "19092:19092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka1:9092,EXTERNAL://172.31.40.10:19092
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
kafka2:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- "19093:19093"
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka2:9093,EXTERNAL://172.31.40.10:19093
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
kafka3:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- "19094:19094"
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka3:9094,EXTERNAL://172.31.40.10:19094
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
Kafka ์ธ์คํด์ค์์๋ ์์ฒ๋ผ docker-compose.yml ํ์ผ์ ์์ฑํด์ฃผ์๋๋ฐ,
๊ธฐ์กด์ EXTERNAL ๋ถ๋ถ์์ ๋ก์ปฌ ํ๊ฒฝ์ docker-compose ํ์ผ์ ๊ทธ๋๋ก ๊ฐ์ ธ์๋ค ๋ณด๋ localhost ๋ก ๋์ด์์๋ค.
๊ทธ๋์ ์ด๋ฅผ kafka ์ธ์คํด์ค์ ํ๋ผ์ด๋น ip ๋ก ์ค์ ํด์ฃผ์๋ค.
๐ฑ EC2 ๋ค ๊ฐ์ PORT ์ฐ๊ฒฐ
์์ฒ๋ผ ๋ด ์๋น์ค๋ฅผ ์ํ EC2 ๋ค์ ๋์์คฌ๋ค.
์ด๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด์ ์ปจํ ์ด๋๋ฅผ ๋์ด ํฌํธ๋ฅผ ์ธ๋ฐ์ด๋ ๊ท์น์์ ์ด์ด์ค์ผํ๋ค.
Kafka ์ธ์คํด์ค ์ ์ฉ ๋ณด์ ๊ทธ๋ฃน ๊ท์น
์๋ Kafka ์ธ์คํด์ค์ ์ ์ฉ๋ ๋ณด์ ๊ทธ๋ฃน ๊ท์น์ด๋ค.
์์ฒ๋ผ Redis ์ elastic search ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด์ด์ฃผ๋ฉด ๋๋ค.
Notification ์ 8082 ํฌํธ๋ก ์ด์ด๋จ๊ธฐ ๋๋ฌธ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ฉ์์ผ์ฃผ๋ฉด ๋์๋ค.