메뉴 닫기

MinIO Distributed Mode

아키텍처

  • IP :192.168.0.110~114
  • VIP : 192.168.0.105
  • Port
    • 9000 – API
    • 9001 – Console
    • 19000 – HA Proxy API
    • 19001 – HA Proxy Console

스펙

  • OS : Ubuntu(권장)
  • Minio 분산처리 구성시 : 최소 4대의 서버부터 필요
  • 물리 디스크 : 서버당 2개이상 필요(페리티 비트)
  • 파일 시스템 : XFS 드라이브에 XFS 포맷 사용MinIO는 XFS로 포맷된 드라이브를 스토리지로 프로비저닝할 것을 강력히 권장합니다. MinIO는 내부 테스트 및 검증 도구의 일부로 XFS를 사용하여 모든 규모에서 성능과 동작에 대한 추가적인 신뢰성을 제공합니다. MinIO :  EXT4, BTRFS, ZFS 등 다른 파일 시스템을 테스트하거나 권장 하지 않습니다

Minio 설치

  • 패키지 다운로드
apt install -y wget curl 
  • Minio 바이너리 설치
    • 최신 바이너리 받을 경우에는 CE 버전만 지원되므로, 하위 버전 다운로드 진행(2025.06.23 변경됨)
cd /usr/local/bin
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20250408154124.0.0_amd64.deb
dpkg -i minio_20250408154124.0.0_amd64.deb

디스크 구성

  • 디스크 포맷
    • 파일 시스템 : xfs
# 디스크 초기화
fdisk /dev/sdb
fdisk /dev/sdc

# 파일 시스템 생성
mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdc1

# 디렉토리 생성
mkdir /data1
mkdir /data2

자동 마운트 처리

  • 포맷처리 후 blkid UUID 값으로 처리
vi /etc/fstab

UUID=e067bd0c-8f4f-4bc6-bbcc-4603fa4a99ef /data1 xfs defaults 0 2
UUID=e8e39f7e-67ed-4dce-9d5c-d81f1411224e /data2 xfs defaults 0 2
mount -a
df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  1.8G     0  1.8G   0% /dev
tmpfs          tmpfs     1.8G     0  1.8G   0% /dev/shm
tmpfs          tmpfs     1.8G  8.5M  1.8G   1% /run
tmpfs          tmpfs     1.8G     0  1.8G   0% /sys/fs/cgroup
/dev/sda2      xfs        50G  5.0G   45G  10% /
/dev/sda1      vfat      200M  5.8M  194M   3% /boot/efi
tmpfs          tmpfs     367M     0  367M   0% /run/user/1002
/dev/sdb1      xfs        10G  104M  9.9G   2% /data1
/dev/sdc1      xfs        10G  104M  9.9G   2% /data2

서버 설정

  • 방화벽 오픈
# 포트 허용
sudo ufw allow 22/tcp
sudo ufw allow 9000/tcp
sudo ufw allow 9001/tcp

# 변경 사항 적용 (ufw는 명령어 실행 시 바로 적용되므로 reload는 보통 불필요)
sudo ufw status verbose
  • 일반 계정
    • 로그인 X, 프로세스 구동용
groupadd -r minio
useradd -M -r -g minio minio
chown -R minio:minio /data1
chown -R minio:minio /data2

서비스 등록

vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO Distributed Server
After=network.target

[Service]
User=minio
Group=minio
ExecStart=/usr/local/bin/minio server \
  --address :9000 \
  --console-address :9001 \
  http://192.168.0.110/data1 \
  http://192.168.0.110/data2 \
  http://192.168.0.111/data1 \
  http://192.168.0.111/data2 \
  http://192.168.0.112/data1 \
  http://192.168.0.112/data2 \
  http://192.168.0.113/data1 \
  http://192.168.0.113/data2
Restart=always
LimitNOFILE=65536

Environment=MINIO_ROOT_USER=minioadmin  ##초기 암호 설정
Environment=MINIO_ROOT_PASSWORD=minioadmin ##초기 암호 설정


[Install]
WantedBy=multi-user.target 

서비스 적용 및 실행

systemctl daemon-reload
systemctl enable minio
systemctl start minio
  • 서비스 상태 체크
ps -ef | grep minio

상태 체크

  • 드라이버 상태 정보
    • 서버 4대
    • Drive 8개

SSL 인증서 생성하기

  • Key 합치기
    • 합칠때 key파일명, crt 파일명 순서로해야함
cat syntekabio.key syntekabio.crt > /etc/ssl/certs/minio.pem
  • 권한 설정
sudo chmod 600 /etc/ssl/certs/minio.pem
sudo chown haproxy:haproxy /etc/ssl/certs/minio.pem

Keepalive 구성

  • keepalive 설치
 apt install keepalived -y
  • keepalive Config
    • interface : 실제 네트워크 인터페이스로 이름으로 변경
vi /etc/keepalived/keepalived.conf
  • Master
vrrp_script chk_haproxy {
    script "/usr/bin/killall -0 haproxy" # 전체 프로세스 정보
    interval 2                     # 2초마다 체크
    weight 2                       # 우선순위 조정값
    fall 2                        # 2번 실패시 DOWN
    rise 2                        # 2번 성공시 UP
}

vrrp_instance VI_1 {
    state MASTER
    interface ens192           #실제 네트워크 인터페이스
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass mypassword
    }
    virtual_ipaddress {
        192.168.0.105/24      # VIP (Virtual IP)
    }
    track_script {
        chk_haproxy
    }
}
  • Backup
vrrp_script chk_haproxy {
    script "/usr/bin/killall -0 haproxy" # 전체 프로세스 정보
    interval 2                     # 2초마다 체크
    weight 2                       # 우선순위 조정값
    fall 2                        # 2번 실패시 DOWN
    rise 2                        # 2번 성공시 UP
}

vrrp_instance VI_1 {
    state BACKUP           # BACKUP으로 변경
    interface ens192
    virtual_router_id 51
    priority 100           # 낮은 우선순위
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass mypassword
    }
    virtual_ipaddress {
        192.168.0.105/24    # 동일한 VIP
    }
    track_script {
        chk_haproxy
    }
}
  • keepalive 서비스 재시작

systemctl enable keepalived.service
systemctl restart keepalived.service

Haproxy 구성

  • 설치
#Ubuntu
sudo apt install -y haproxy 

Haproxy 설정

vi /etc/haproxy/haproxy.cfg
  • Master
# /etc/haproxy/haproxy.cfg
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    timeout connect 5s
    timeout client  50s
    timeout server  50s
    option  httplog

# HAProxy 통계 페이지
frontend stats
    bind *:8404 ssl crt /etc/ssl/certs/minio.pem
    stats enable
    stats uri /haproxy-stats
    stats realm HAProxy\ Statistics
    stats auth admin:password123
    stats refresh 30s

# MinIO API 로드밸런싱 (19000 포트)
frontend minio_api_frontend
    bind *:19000 ssl crt /etc/ssl/certs/minio.pem
    mode http
    default_backend minio_api_backend

backend minio_api_backend
    mode http
    balance roundrobin
    
    server minio1 192.168.0.110:9000  
    server minio2 192.168.0.111:9000 
    server minio3 192.168.0.112:9000 
    server minio4 192.168.0.113:9000 

# MinIO Console 로드밸런싱 (19001 포트)
frontend minio_console_frontend
    bind *:19001 ssl crt /etc/ssl/certs/minio.pem
    mode http
    default_backend minio_console_backend

backend minio_console_backend
    mode http
    balance roundrobin
    option httpchk GET /
    http-check expect status 200
    
    server console1 192.168.0.110:9001 check inter 5s rise 2 fall 3
    server console2 192.168.0.111:9001 check inter 5s rise 2 fall 3
    server console3 192.168.0.112:9001 check inter 5s rise 2 fall 3
    server console4 192.168.0.113:9001 check inter 5s rise 2 fall 3
  • Backup
# /etc/haproxy/haproxy.cfg
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    log     global
    mode    http
    timeout connect 5s
    timeout client  50s
    timeout server  50s
    option  httplog

# HAProxy 통계 페이지
frontend stats
    bind *:8404 ssl crt /etc/ssl/certs/minio.pem
    stats enable
    stats uri /haproxy-stats
    stats realm HAProxy\ Statistics
    stats auth admin:password123
    stats refresh 30s

# MinIO API 로드밸런싱 (19000 포트)
frontend minio_api_frontend
    bind *:19000 ssl crt /etc/ssl/certs/minio.pem
    mode http
    default_backend minio_api_backend

backend minio_api_backend
    mode http
    balance roundrobin
    
    server minio1 192.168.0.110:9000  
    server minio2 192.168.0.111:9000 
    server minio3 192.168.0.112:9000 
    server minio4 192.168.0.113:9000 

# MinIO Console 로드밸런싱 (19001 포트)
frontend minio_console_frontend
    bind *:19001 ssl crt /etc/ssl/certs/minio.pem
    mode http
    default_backend minio_console_backend

backend minio_console_backend
    mode http
    balance roundrobin
    option httpchk GET /
    http-check expect status 200
    
    server console1 192.168.0.110:9001 check inter 5s rise 2 fall 3
    server console2 192.168.0.111:9001 check inter 5s rise 2 fall 3
    server console3 192.168.0.112:9001 check inter 5s rise 2 fall 3
    server console4 192.168.0.113:9001 check inter 5s rise 2 fall 3
  • 서비스 재시작
# HAProxy 시작
sudo systemctl enable haproxy
sudo systemctl restart haproxy

Haproxy 상태 체크

  • HaProxy 상태 체크
http://192.168.0.105:8404/haproxy-stats

Minio Client

  • mc Client 다운로드
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
  --create-dirs \
  -o $HOME/minio-binaries/mc

chmod +x $HOME/minio-binaries/mc
export PATH=$PATH:$HOME/minio-binaries/
  • mc Client로 접근하기
mc alias set "이름" "URL정보" "ID" "passowr"

mc alias set admin http://192.168.0.110:9000 minioadmin minioadmin
  • 서비스 상태 체크
mc admin info admin

●  192.168.0.110:9000
   Uptime: 21 minutes
   Version: 2025-04-08T15:41:24Z
   Network: 4/4 OK
   Drives: 2/2 OK
   Pool: 1

●  192.168.0.111:9000
   Uptime: 21 minutes
   Version: 2025-04-08T15:41:24Z
   Network: 4/4 OK
   Drives: 2/2 OK
   Pool: 1

●  192.168.0.112:9000
   Uptime: 21 minutes
   Version: 2025-04-08T15:41:24Z
   Network: 4/4 OK
   Drives: 2/2 OK
   Pool: 1

●  192.168.0.113:9000
   Uptime: 21 minutes
   Version: 2025-04-08T15:41:24Z
   Network: 4/4 OK
   Drives: 2/2 OK
   Pool: 1

VIP Minio 테스트(HTTP)

  • mc VIP 테스트
mc alias set vip-minio http://192.168.0.105:19000 minioadmin minioadmin
  • mc admin
mc admin info vip-minio

VIP Minio 테스트(HTTPS)

  • HAproxy Stats
  • HAproxy Console
  • HAproxy API
    • https 인증서라서 ip 기반으로 불가능하고 도메인 기반으로 적용해야함
mc alias set vip-https-minio https://blog.htms.co.kr:19000 minioadmin minioadmin
  • 상태 확인
mc admin info vip-https-minio
  • 버킷 확인
mc ls vip-https-minio
  • 파일 업로드 테스트
#파일 생성
touch minio-test-file.txt
 
#파일 버킷으로 복사
mc cp minio-test-file.txt vip-https-minio/vvv
  • 실제 데이터 업로드 확인
    • VIP 상태, Minio1~4서버 확인
Posted in minio

Related Posts