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>'
참고자료