EC2 인스턴스에서 MinIO, PostgreSQL, Kafka를 바이너리로 설치하고 systemd에 등록하여 인스턴스 재부팅 시 자동 실행되도록 설정한 과정을 정리했다. EC2 유저 데이터 스크립트로 자동화도 가능하지만, 테스트 결과 불안정한 부분이 있어 수동으로 설정하며 기록했다.
# 기본 패키지 설치
$ 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 설치
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.conf
와 pg_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
$ 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에 등록하면 EC2 인스턴스가 중지됐다가 재실행됐을때 해당 패키지도 자동 실행할 수 있다.
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
배포판별 서비스 이름이 다를 수 있기 때문에 이름을 먼저 확인한다.
$ 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도 자동 재시작되어 있는 것을 확인할 수 있다.
$ 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의 기본 로그 경로는 log.dirs=/tmp/kafka-logs
로, 인스턴스 재시작 시 로그가 사라질 수 있다. server.properties
에서 이를 영속 경로로 수정해야 한다.
Kafka는 실행할 유저가 해당 디렉토리에 권한이 있어야 하기 때문에 chown -R ubuntu:ubuntu /opt/kafka
로 권한을 추가해 주어야 한다.
외부에서 접속이 안 된다면 pg_hba.conf에 IPv4 설정이 host all all 0.0.0.0/0 md5
로 들어가 있는지 확인해야 한다.
처음에는 유저 데이터로 자동화하려 했는데, 몇 번 테스트해보니 설치 누락되거나 systemd 등록이 안 되는 경우가 있어서 일단 수동으로 구성했다. 다음 단계에서는 유저 데이터로 자동화 해봐야 할 것 같다.