본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
오픈소스로 제공되는 분산 객체 스토리지 (S3 API 호환)
등록일
2022.10.25
첨부파일
놀랍도록 빠르고, 당장 구현 가능한 분산 스토리지 MinIO
오픈소스로 제공되는 분산 객체 스토리지 (S3 API 호환)
  • MinIO란?

  • MinIO는 오픈소스로 제공되는 분산 스토리지 솔루션입니다. 오브젝트 스토리지로 제공되며, S3 스토리지와 완벽하게 호환됩니다. S3의 SDK를 사용할 수 있습니다. MinIO은 파일 스토리지, 블록 스토리지 형태로 제공되지 않습니다. 추가로 minfs라는 프로젝트로 클라이언트에 마운트 하여 사용할 수 있도록 소스를 제공하고 있습니다.

  • MinIO 아키텍처

  • MinIO는 3가지 인프라 환경에서 사용할 수 있습니다.

  • 디스크는 JBOD, JBOF 사용을 권장합니다.어쩔 수 없이 단일 디스크로 구성해야 할 경우 디스크의 가용성을 보장하기 위하여 RAID 컨트롤러의 선택이 필수입니다.여러 디스크 사용 시에는 MinIO 솔루션이 제공하는 가용성 장치로 디스크 및 서버의 가용성을 확보할 수 있습니다.
  • 직관적인 GUI 관리 툴 제공

  • MinIO는 매우 직관적으로 분산 스토리지 전체를 관리할 수 있는 관리 툴을 제공합니다.
  • Erasure Coding

  • 디스크를 JBOD, JBOF로 사용한다면 이레이저 코딩으로 데이터를 보호합니다. 데이터 중복 수준은 설정할 수 있고, 설정된 중복 수준으로 데이터 및 패리티 블록으로 분산 보관합니다. MinIO의 Erasure Coding은 오브젝트 수준에서 치유를 수행하고 여러 오브젝트를 독립적으로 치유할 수 있습니다.

  • 암호화

  • MinIO는 전송 중인 데이터를 암호화하거나, 데이터를 암호화하여 보관할 수 있습니다. 서버 및 클라이언트 암호화는 AES-256-GCM, ChaCha20-Poly1305 및 AES-CBC를 사용하여 지원됩니다. 또한, KMS를 사용하여 SSE-S3를 지원합니다.

  • 원격지 복제

  • MinIO는 연속된 원격지 복제를 매우 간단한 구성으로 제공합니다. 비교적 적은 구성으로 백업이나 원격지 복제를 구성할 수 있습니다.

  • MinIO 구성

  • 온프레미스 환경에 MinIO 분산 스토리지를 구성하는 방법은 크게 3가지로 볼 수 있습니다.

  • Docker 컨테이너로 배포는 멀티 노드 지원이 되지 않습니다. 싱글 노드-단일 디스크 구성이나 싱글 노드-멀티 디스크 구성에서만 사용 가능합니다. Docker 컨테이너 배포 방법에는 멀티 노드 스케일아웃이 지원되지 않습니다. 아래 테스트 환경은 싱글 노드-여러 디스크 사용으로 데이터 가용성을 확보하여 구성하였습니다.
  • OS 권장

  • - Ubuntu 18.04+
  • - Redhat 8+
  • 설치 서버 스펙

  • - 환경 : VM
  • - CPU : 4Core
  • - Memory : 8GB
  • - Disk : (OS)30GB / 10GB / 10GB / 10GB / 10GB
  • - OS : CentOS 8.x
  • 디스크 마운트

  • 모든 디스크는 MinIO에서 권장하고 있는 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
  • fstab에 마운트 내용 추가
  • $ vi /etc/fstab
  • LABEL=DISK1    /mnt/disk1   xfs    defaults,noatime    0    2
  • LABEL=DISK2    /mnt/disk2   xfs    defaults,noatime    0    2
  • LABEL=DISK3    /mnt/disk3   xfs    defaults,noatime    0    2
  • LABEL=DISK4    /mnt/disk4   xfs    defaults,noatime    0    2
  • MinIO 설치

  • $ yum install https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20221008201100.0.0.x86_64.rpm
  • 사용자 생성 및 폴더 권한 설정

  • $ groupadd -r minio-user
  • $ useradd -M -r -g minio-user minio-user
  • $ chown minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4
  • 기본 설정 사용자는 minio-user로 되어 있습니다. 실 서비스에서는 꼭 다른 사용자와 그룹을 지정하여 사용해야 합니다. 기본 사용자가 아닌 다른 사용자 지정은 /etc/systemd/system/minio.servier 파일의 “User=”,”Group=” 내용을 수정하여 적용하시면 됩니다.
  • 정책 파일 생성

  • /etc/default/minio 파일 생성 및 내용 추가
  • MINIO_ROOT_USER=itmayaadmin
  • MINIO_ROOT_PASSWORD=itmayaadmin
  • MINIO_VOLUMES="/mnt/disk{1...4}"
  • 방화벽 포트 허용

  • $ firewall-cmd --permanent --zone=public --add-port=9000/tcp
  • $ firewall-cmd --permanent --zone=public --add-port=xxxxx/tcp -> 매번 변경됨 (journalctl 에서 확인)
  • $ firewall-cmd --reload
  • 서비스 시작

  • $ systemctl enable minio.service
  • $ systemctl start minio.service
  • 상태 확인
  • $ journalctl -f -u minio.service
  • 서비스가 시작되면 웹브라우저에서 IP:9000로 접근하여 GUI 툴에서 버킷을 생성하거나 사용자를 관리할 수 있습니다.
  • MinIO Client CLI 설치

  • $ yum install https://dl.min.io/client/mc/release/linux-amd64/mcli-20221009211059.0.0.x86_64.rpm
  • CLI사용

  • Host 등록
  • $ mcli config host add itmayas3/ http://MINIO-SERVER MYUSER MYPASSWORD
  • 등록된 Host 확인
  • $ mcli config host ls
  • 등록된 Host 삭제
  • $ mcli config host rm itmayas3/
  • 버킷 생성
  • $ mcli mb itmayas3/testbk1/
  • $ mcli mb itmayas3/testbk2/yyk1/
  • 버킷 목록 확인
  • $ mcli ls itmayas3/
  • $ mcli ls itmayas3/testbk1/
  • $ mcli ls itmayas3/testbk2/
  • 정책 변경 (버킷 생성시 기본 정책은 Private) -> 모두 사용가능하도록 Public 으로 변경할 수 있습니다.
  • $ mcli policy set public itmayas3/testbk1/
  • 버킷 삭제
  • $ mcli rb itmayas3/testbk1
  • $ mcli rb --force itmayas3/testbk1
  • 파일/폴더 업로드
  • $ mcli cp /forder/filename itmayas3/testbk1/filename
  • $ mcli cp --recursive /forder/ itmayas3/testbk1/
  • 파일/폴더 다운로드
  • $ mcli cp itmayas3/testbk1/filename /forder/filename
  • $ mcli cp itmayas3/testbk1/forder/ /forder/
  • 파일/폴더 삭제
  • $ mcli rm itmayas3/testbk1/filename
  • $ mcli rm --recursive itmayas3/testbk1/forder
  • $ mcli rm --recursive --force itmayas3/testbk1/forder
  • Erasure Code Parity

  • Erasure Code는 다수의 디스크로 구성할 경우, 패리티를 두어 가용성을 확보하는 방법입니다. 기본은 EC 4로 구성되고, 75%의 디스크 사용률을 가집니다.

    PLEASE WAIT WHILE LOADING...