MinIo Get Started

vernolog·2024년 9월 1일

MinIO

목록 보기
1/2

Minio란

MiniO는 오픈 소스로 제공되는 분산 스토리지 솔루션으로, S3와 호환되는 오브젝트 스토리지를 구축할 수 있다.

아키텍처

아키텍처는 내부적으로 3개의 레이어로 구성됨

  • S3 layer : 대외적인 네트워크를 처리하는 영역
  • Object layer : cache, compression, encryption, erasure code, bitrot와 같은 기능을 수행하는 영역
  • Storage layer : file system과 직접적으로 통신하는 영역

기능

사용자가 사용하기에 편한 webUI 지원

사용자 별로, 그룹별로 권한 부여 가능

  • 아래는 readonly policy를 수정한 코드
    • readOnly의 경우 기본 Action 설정은 “s3:GetBucketLocation”, "s3:GetObject"이지만, 폴더 구조를 읽을 수 있도록 "s3:List*", "s3:ListBucket" 을 추가하였고

    • test 버킷만 접근할 수 있도록 Resource 또한 수정하였음

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetBucketLocation",
                      "s3:GetObject",
                      "s3:List*",
                      "s3:ListBucket"
                  ],
                  "Resource": [
                      "arn:aws:s3:::test/*"
                  ]
              }
          ]
      }

여러 드라이브 지원

  • 하지만 networked storage (NAS, SAN, NFS) 보다는 Direct-Attached Storage (DAS)를 추천
  • 특히 주요한 데이터를 사용하거나 자주 읽고 쓰는 데이터의 경우, flash storage (NVMe, SSD)를 권유
  • minio pool은 드라이브 유형을 구별하지 않음. 한 종류의 드라이브를 사용하는 것을 지향. 또한 여러 드라이브의 사이즈를 동일하게 보기에, 같은 사이즈의 드라이브를 사용하는 것을 권장.
  • MINIO_VOLUMES="/data-{1...4}" 와 같이 {x...y} 표기법으로 작성. (이때 1에서 시작해서, 값이 하나씩 올라감)
  • 오브젝트 스토리지를 위해 독립적인 드라이브 또는 볼륨을 사용하기. 그렇지 않으면 corruption, data loss를 초래함. 또한 MinIO를 통해서가 아닌, 직접적으로 또는 다른 툴을 통해서 수정하지 말기
  • 그외 드라이브 관련 권장 사항은 이 링크 참조

버킷 별 기능

  • 용량 제한
  • 데이터를 삭제하지 못하도록 막을 수도 있음
  • versioning 기능
    • 특정 시점의 데이터를 확인하고 되돌릴 수 있음
    • 또한 versioning 기능 사용시, 기존 개체를 덮어쓰기함.
    • 데이터를 삭제하더라도, 특정 시점으로 이동시 확인 가능. 즉 완전시 삭제되지 않음 (완전 삭제도 따로 가능)

라이프 사이클 관리 가능

  • 일정 기간 후, 저장된 데이터를 지우는 기능.
  • MinIO의 객체 만료 Lifecycle은 aws의 lifecycle 관리와 호환되어 s3에 적용된 JSON을 직접 적용할 수 있음

모니터링

  • WebUI를 통해 모니터링이 가능
  • Minio 성능을 체크할 수 있는 프로메테우스 지표를 제공함 (관련자료)

EC(Erasure Coding) 지원

  • EC는 데이터를 특수한 알고리즘(*EC코덱)으로 인코딩하여 복제한 후, 데이터 손실이 발생하였을때 이를 디코딩하여 원본 데이터를 복구하는 방법
  • 원리 : 원본 데이터를 여러 조각으로 나누고, 원본 데이터를 복구할 수 있는 패리티 데이터를 만듦
    • 데이터 분할 및 패리티 생성 : 원본 데이터를 ‘k’개의 데이터 블록으로 나누고, ‘m’개의 패리티 블록을 추가로 생성 (결과적으로 n = k+m 개의 블록 생성)
    • 데이터 저장 : 만들어진 ‘n’개의 블록을 서로 다른 스토리지 노드에 분산 저장
    • 데이터 복구 : ‘k’개의 원본 데이터 블록 중 일부가 손실되더라도 남아있는 데이터 블록과 페리티 블록이 ‘k’개 보다 큰 경우 복구 가능
  • 예시 : 아래는 Erasure Coding을 통해 파일을 6개의 블록으로 나누면서, 6의 절반인 3개의 parity 블록을 생성하여 fault-tolerance를 보장.

Get Started

MinIo 설치

설치

# 다운로드
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio

# 실행 가능하도록 권한을 부여
chmod +x minio 

실행

기본적으로 localhost로 서버가 올라가므로, --address 옵션을 통해 설정해주어야함

./minio server data --address :9000 --console-address :9001

minio 설치 모드

  • 단일서버 단일저장소(Single-Node Single-Drive, SNSD)
  • 단일서버 다중저장소 (Single-Node Multi-Drive, SNMD)
  • 다중서버 다중저장소 (Multi-Node Multi-Drive, MNMD)

데이터 저장방식

  • FS(File-system) 방식
  • EC(Erasure-code) 방식

user / PW 설정

아래와 같이 설정한 후, minio 서버 실행하면 설정된 정보를 통해 로그인 할 수 있음

export MINIO_ROOT_USER='<user_value>'
export MINIO_ROOT_PASSWORD='<pw_value>'

참고자료

0개의 댓글