MinIO 분산 객체 저장소 시스템 아키텍처 및 운영 가이드

개요

MinIO는 고성능, 분산형 오픈소스 객체 저장 솔루션으로, 클라우드 네이티브 환경에서 대규모 데이터 저장 요구를 충족시키기 위해 설계되었습니다. S3 호환 API를 제공하며, 비정형 데이터(이미지, 비디오, 로그 등)의 안정적이고 확장 가능한 저장을 가능하게 합니다.

핵심 개념

서버 풀(Server Pool)

MinIO 배포는 최소 4대 이상의 동일 사양 서버로 구성되며, 이들 노드는 하나의 논리적 저장 장치인 '서버 풀'을 형성합니다. 모든 노드는 동일한 스토리지 용량과 컴퓨팅 자원을 가져야 하며, 전체 시스템은 단일 객체 저장 서비스처럼 외부에 노출됩니다.

EC(Erasure Coding, 소거 부호화)

MinIO는 데이터 보호를 위해 EC 기술을 사용합니다. 기본 수식은 n = k + m이며, 여기서:

  • k: 원본 데이터 블록 수
  • m: 패리티(검증) 블록 수
  • n: 총 블록 수 (k + m)

이 구조는 최대 m개의 디스크 장애까지 데이터 무결성을 유지할 수 있습니다. 예를 들어 EC:4+4 구성은 4개의 검증 블록을 의미하여, 동시에 4개 디스크가 고장나도 데이터 접근이 가능합니다. 스토리지 효율성은 k/n로 계산되며, EC:4+4에서는 50%의 효율을 제공합니다. 일반적으로 EC:6+3 또는 EC:8+4 구성이 균형 잡힌 성능과 내구성을 제공하는 권장 사양입니다.

다중 노드 다중 드라이브 배포

사전 준비

하드웨어 및 파일시스템

최적의 성능을 위해 다음과 같은 조건을 권장합니다:

  • 동일한 용량과 성능의 NVMe 또는 SSD 사용
  • XFS 파일시스템 포맷 적용
  • 각 디스크에 별도 마운트 포인트 할당
# XFS 포맷 및 마운트 설정
mkfs.xfs /dev/sdb -L DISK1
mkfs.xfs /dev/sdc -L DISK2
mkfs.xfs /dev/sdd -L DISK3
mkfs.xfs /dev/sde -L DISK4

# /etc/fstab 자동 마운트 등록
echo 'LABEL=DISK1 /mnt/disk1 xfs defaults,noatime 0 2' >> /etc/fstab
echo 'LABEL=DISK2 /mnt/disk2 xfs defaults,noatime 0 2' >> /etc/fstab
echo 'LABEL=DISK3 /mnt/disk3 xfs defaults,noatime 0 2' >> /etc/fstab
echo 'LABEL=DISK4 /mnt/disk4 xfs defaults,noatime 0 2' >> /etc/fstab

mount -a

네트워크 및 시간 동기화

모든 노드 간 정확한 시간 동기가 필수입니다.

timedatectl set-timezone Asia/Seoul
apt update && apt install -y chrony
systemctl enable chronyd --now

로드 밸런서 구성

Nginx를 이용해 API(9000)와 콘솔(9001) 트래픽을 분산 처리합니다.

upstream minio_api {
    least_conn;
    server 172.31.3.170:9000;
    server 172.31.3.171:9000;
    server 172.31.3.172:9000;
    server 172.31.3.173:9000;
}

upstream minio_console {
    least_conn;
    server 172.31.3.170:9001;
    server 172.31.3.171:9001;
    server 172.31.3.172:9001;
    server 172.31.3.173:9001;
}

server {
    listen 81;
    server_name minio-api.example.com;

    location / {
        proxy_pass http://minio_api;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 0;
        proxy_buffering off;
    }
}

설치 및 초기화

# 설치 패키지 다운로드 및 설치
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240101163633.0.0_amd64.deb -O minio.deb
dpkg -i minio.deb

# 전용 사용자 생성
useradd -r -s /sbin/nologin minio-user
chown -R minio-user:minio-user /mnt/disk*

# 환경 변수 설정 (/etc/default/minio)
export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=SecurePass123!
export MINIO_VOLUMES="http://minio-0{1...4}:9000/mnt/disk{1...4}"
export MINIO_OPTS="--console-address :9001"
export MINIO_SERVER_URL="http://lb.example.com:81"

설정 후 systemctl enable minio && systemctl start minio로 서비스 시작합니다.

관리 도구(mc) 설정

curl https://dl.min.io/client/mc/release/linux-amd64/mc -o mc
chmod +x mc
mv mc /usr/local/bin/

# MinIO 인스턴스 등록
mc alias set mycluster http://lb.example.com:81 minioadmin SecurePass123!

# 상태 확인
mc admin info mycluster

보안 강화: TLS 구성

내부 암호화를 위해 자체 서명된 인증서를 사용할 수 있습니다.

# certgen 도구로 인증서 생성
wget https://github.com/minio/certgen/releases/latest/download/certgen-linux-amd64
chmod +x certgen-linux-amd64
./certgen-linux-amd64 -host "minio-01,minio-02,minio-03,minio-04,localhost"

# 생성된 인증서를 각 노드의 사용자 디렉터리에 배포
mkdir -p /home/minio-user/.minio/certs
cp public.crt private.key /home/minio-user/.minio/certs/
chown -R minio-user:minio-user /home/minio-user/.minio/certs

환경 변수에서 httphttps로 변경하고 서비스 재시작합니다.

운영 관리

클러스터 확장

기존 서버 풀에 새 노드를 추가하여 용량을 늘릴 수 있습니다. 주의사항:

  • 확장은 새로운 서버 풀 단위로 수행
  • 모든 노드의 하드웨어 및 소프트웨어 구성 일치 필요
  • 확장 중 전체 클러스터 재시작 필요

예: 기존 4노드 → 8노드로 확장 시, MINIO_VOLUMES 값을 새 노드 포함하도록 수정 후 모든 노드 동시 재시작.

모니터링

Prometheus와 Grafana를 통합하여 실시간 모니터링이 가능합니다. MinIO는 다음 엔드포인트를 통해 메트릭을 제공합니다:

  • /minio/health/live: 노드 활성 상태
  • /minio/health/cluster: 클러스터 쓰기 가능 여부
  • /minio/health/cluster/read: 클러스터 읽기 가능 여부

장애 대응

  • 디스크 장애: 문제가 있는 디스크를 제거하고 교체 후 자동 재동기화
  • 노드 장애: 전체 노드 교체 시 동일 이름과 IP로 복구
  • 사이트 장애: MinIO의 Active-Passive 사이트 복제 기능으로 재해 복구 구성 가능

모범 사례

  • RAID 미사용, 직접 디스크(JBOD) 방식 권장
  • XFS 파일시스템 사용
  • 로드 밸런서 알고리즘은 least_conn 추천
  • 단일 클러스터는 최대 16노드, 노드 당 8디스크 이하로 구성
  • EC 구성은 워크로드 특성에 따라 조정 (읽기 중심: 높은 k값, 쓰기 중심: 낮은 m값)

태그: MinIO 객체저장소 분산스토리지 S3호환 ErasureCoding

7월 24일 17:09에 게시됨