[GoormPlay] EC2에 Minio, PostgreSQL, Kafka cluster 바이너리 설치 및 자동 실행 설정하기

HAHAHELLO·2025년 5월 22일
0

EC2 인스턴스에서 MinIO, PostgreSQL, Kafka를 바이너리로 설치하고 systemd에 등록하여 인스턴스 재부팅 시 자동 실행되도록 설정한 과정을 정리했다. EC2 유저 데이터 스크립트로 자동화도 가능하지만, 테스트 결과 불안정한 부분이 있어 수동으로 설정하며 기록했다.

EC2에 패키지 설치하기

MinIO 설치

# 기본 패키지 설치
$ sudo apt update && sudo apt install -y wget

# MinIO 다운로드 및 실행 권한 설정
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
$ sudo mv minio /usr/local/bin/

# MinIO 실행 (로컬 디렉토리 /data 사용)
$ mkdir -p /mnt/data
$ sudo chown ubuntu:ubuntu /mnt/data

PostgreSQL 설치

# PostgreSQL 설치
sudo apt update && sudo apt install -y postgresql postgresql-contrib

# PostgreSQL 서비스 시작 및 자동 실행
sudo systemctl enable postgresql
sudo systemctl start postgresql

# postgres 비밀번호 설정 및 DB 생성 예시
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
sudo -u postgres createdb userlog_db

postgreSQL은 보안규칙과 상관없이 외부 접속을 허용하기 위해서는 postgresql.confpg_hba.conf를 아래와 같이 수정해야 한다.

postgresql.conf

sudo vi /etc/postgresql/16/main/postgresql.conf

# 아래 내용 추가 - 모든 IP 허용
listen_addresses = '*'

pg_hba.conf

sudo vi /etc/postgresql/16/main/pg_hba.conf

# IPv4 설정 추가
host    all             all             0.0.0.0/0  

Kafka 설치

$ sudo apt update
sudo apt install openjdk-17-jdk -y
$ java -version  # 설치 확인
$ cd /opt
$ sudo wget https://downloads.apache.org/kafka/3.7.2/kafka_2.13-3.7.2.tgz
$ sudo tar -xzf kafka_2.13-3.7.2.tgz
$ sudo mv kafka_2.13-3.7.2 kafka

# 로그 디렉토리 및 권한 설정
$ sudo chown ubuntu:ubuntu /opt/kafka

# Kafka 설정 변경 - server.properties 수정
$ sudo vi /opt/kafka/config/server.properties
# log.dirs 항목 변경
log.dirs=/opt/kafka/kraft-logs/kafka-logs1

Kafka를 실행할 때 권한 오류가 나지 않기 위해서 디렉토리 권한을 ubuntu로 바꿔줘야 한다 . ubuntu 유저가 실행하는데 /opt/kafka 디렉토리의 소유자가 root라면 kafka를 실행할 수 없기 때문이다.

Kafka KRaft 모드는 처음에 클러스터 메타데이터 저장소를 초기화해야 한다. 처음 1번만 하면 된다.

kafka cluster 통신과 설정 관련은 이전 포스팅을 참고 >> Kafka cluster는 controller와 broker, client와 어떻게 통신할까(KRaft 모드)

systemd 등록으로 자동 실행 설정

systemd에 등록하면 EC2 인스턴스가 중지됐다가 재실행됐을때 해당 패키지도 자동 실행할 수 있다.

MinIO 등록

which minio 명령어를 사용하여 MinIO의 경로를 파악하고 systemd 서비스에 등록한다.

# systemd 서비스 등록
$ sudo vi /etc/systemd/system/minio.service

# 아래 내용 추가
[Unit]
Description=MinIO Object Storage
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target

[Service]
User=ubuntu
Group=ubuntu
ExecStart=/usr/local/bin/minio server /mnt/data --address ":9000" --console-address ":9001"
Restart=always
LimitNOFILE=65536
Environment="MINIO_ROOT_USER=<ID>"
Environment="MINIO_ROOT_PASSWORD=<PASSWORD>"

[Install]
WantedBy=multi-user.target

# 적용 및 시작
$ sudo systemctl daemon-reexec
$ sudo systemctl daemon-reload
$ sudo systemctl enable minio
$ sudo systemctl start minio

# 상태 확인
$ sudo systemctl status minio

Postgres

배포판별 서비스 이름이 다를 수 있기 때문에 이름을 먼저 확인한다.

$ systemctl list-units --type=service | grep postgres

PostgreSQL을 systemd에 등록한다.

# 서비스 등록
$ sudo systemctl enable postgresql@16-main.service

# 상태 확인
$ sudo systemctl status postgresql@16-main.service

EC2 인스턴스를 재시작하면 postgreSQL도 자동 재시작되어 있는 것을 확인할 수 있다.

Kafka

$ sudo vi /etc/systemd/system/kafka.service

# 아래 내용 추가
[Unit]
Description=Apache Kafka KRaft Broker
After=network.target

[Service]
Type=simple
User=ubuntu
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
Restart=on-failure
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

# 적용 및 시작
$ sudo systemctl daemon-reload
$ sudo systemctl enable kafka
$ sudo systemctl start kafka

# 실시간 로그 확인
journalctl -u kafka.service -f

트러블 슈팅

Kafka 메타데이터 경로 설정 및 권한 추가

Kafka의 기본 로그 경로는 log.dirs=/tmp/kafka-logs로, 인스턴스 재시작 시 로그가 사라질 수 있다. server.properties에서 이를 영속 경로로 수정해야 한다.
Kafka는 실행할 유저가 해당 디렉토리에 권한이 있어야 하기 때문에 chown -R ubuntu:ubuntu /opt/kafka로 권한을 추가해 주어야 한다.

Postgres 설정

외부에서 접속이 안 된다면 pg_hba.conf에 IPv4 설정이 host all all 0.0.0.0/0 md5로 들어가 있는지 확인해야 한다.

EC2 유저 데이터 자동화 오류

처음에는 유저 데이터로 자동화하려 했는데, 몇 번 테스트해보니 설치 누락되거나 systemd 등록이 안 되는 경우가 있어서 일단 수동으로 구성했다. 다음 단계에서는 유저 데이터로 자동화 해봐야 할 것 같다.

profile
데이터 엔지니어가 되어 봅시다 🌈

0개의 댓글