MinIO의 공식 문서에 있는 아키텍처와 핵심 컨셉 내용들을 정리해봤습니다.
MinIO 는 분산 시스템으로 최소 4개의 MinIO 호스트(노드)로 구성되며, 각 호스트는 프로덕션 환경에서는 동일한 하드웨어 사양을 가져야 합니다. 호스트의 디스크는 XFS 파일 시스템을 기반으로 JBOD 형태로 구성됩니다. 고가용성을 위한 Erasure Coding(EC)을 통해 객체를 데이터와 패리티 샤드(조각)으로 나누어 분산 저장합니다.
요청을 받을 때는 로드밸런서를 통해서 각 호스트에 분배되는데, 호스트는 요청을 받아서 다른 호스트에 작업을 분배하게 됩니다.
로드 밸런싱에 대해서는 "최소 연결"이나 "라운드 로빈"방식을 권장하고 있습니다.
MinIO는 S3 API를 엄격하게 구현하기 때문에 AWS Signature 알고리즘을 사용하므로, 클라이언트에서 제공되는 헤더를 전달하도록 구성해야 합니다.
MinIO가 최고 성능을 내기 위해 아래 사항들을 권장하고 있습니다.
MinIO의 복원력과 가용성은 Erasure Coding 기술을 기반으로 제공됩니다. MinIO는 각 객체를 데이터 및 패리티 샤드로 분할하고 해당 샤드를 단일 Erasure Set에 분산합니다
Erasure Coding은 객체를 데이터(K)와 패리티(M) 샤드로 나누어서 저장하는 기술입니다. N (ERASURE SET SIZE) = K (DATA) + M (PARITY)
MinIO는 드라이브들을 Erasure Set이라는 단위로 그룹화 하고, 각 Erasure Set은 독립적으로 동작합니다.
핵심 동작원리를 설명하면 아래와 같고, 실제 데이터가 저장되고 복구되는 부분은 아래 이미지를 참조하면 이해하기 쉽습니다.
MinIO는 쿼럼 개념을 통해 읽기/쓰기 가능 여부를 결정합니다.
예를 들어, 8개의 드라이브로 구성된 Erasure Set에서 EC:2 (데이터 6 + 패리티 2) 구성을 사용한다고 가정하면 6개의 데이터 샤드와 2개의 패리티 샤드가 생성되어 총 10개 드라이브에 분산 저장됩니다. 최소 샤드 8개만 확보되면 원본 데이터를 완벽하게 복원할 수 있습니다.
패리티의 비율이 50%인 경우에는 네트워크 등 문제로 완벽히 둘로 Erasure set이 나눠졌을 때 (Split-brain)시나리오를 방지하기 위해서 입니다.
테스트 용도 까지 포함한 케이스로 좀 더 표를 나눠봤습니다.
읽기 쿼럼 : 읽기 작업을 위한 최소 드라이브 수
쓰기 쿼럼 : 쓰기 작업을 위한 최소 드라이브 수
Parity | 용량 | 비율 | 읽기 쿼럼 | 쓰기 쿼럼 |
---|---|---|---|---|
EC:4 | 12TB | 75% | 12 | 12 |
EC:6 | 10TB | 62.5% | 10 | 10 |
EC:8 | 8TB | 50% | 8 | 9 |
Parity | 용량 | 비율 | 읽기 쿼럼 | 쓰기 쿼럼 |
---|---|---|---|---|
EC:3 | 9TB | 75% | 9 | 9 |
EC:4 | 8TB | 66.7% | 8 | 8 |
EC:5 | 7TB | 58.3% | 7 | 7 |
EC:6 | 6TB | 50% | 6 | 7 |
Parity | 용량 | 비율 | 읽기 쿼럼 | 쓰기 쿼럼 |
---|---|---|---|---|
EC:2 | 6TB | 75% | 6 | 6 |
EC:3 | 5TB | 62.5% | 5 | 5 |
EC:4 | 4TB | 50% | 4 | 5 |
Parity | 용량 | 비율 | 읽기 쿼럼 | 쓰기 쿼럼 |
---|---|---|---|---|
EC:1 | 3TB | 75% | 3 | 3 |
EC:2 | 2TB | 50% | 2 | 3 |
힐링은 MinIO의 자동 복구 기능입니다. 드라이브 수준, OS, 파일 시스템, Bit Rot 등 다양한 이유로 발생할 수 있는 손상되거나 손실된 데이터를 자동으로 복구해주는 매우 중요한 기능이며, 복구는 Erasure Coding을 통해서 이뤄집니다.
MinIO는 세 가지 상황에서 객체를 힐링합니다.
mc admin heal
명령어를 통해 전체 시스템을 복구객체 스캐너의 작업은 저장 매체와 처리량 등에 의해 영향을 받을 수 있으며, 객체 수와 크기가 증가함에 따라 더 많은 시간이 걸릴 수 있습니다. 스캐너 작업시 읽기/쓰기 요청이 들어오면 스캐너를 일시 중지하게 됩니다.
객체 스캐너가 처리하는 작업은 아래와 같습니다.
객체 스캐너는 클러스터 단위와 버킷 단위로 작업을 나눠서 실행합니다.
클러스터 수준에서 스캐너는 모든 버킷을 그룹으로 분할하고 한번에 한 그룹씩 버킷을 스캔하고, 버킷 수준에서는 버킷 내부의 객체 이름을 해시기반으로 16회의 사이클로 나눠서 모든 객체를 한번씩 검사합니다. 마지막 스캔 이후에는 새로 추가된 객체를 스캔합니다.
MinIO DirectPV 소개 및 설치 (0) | 2025.09.18 |
---|---|
MinIO 기초적인 Tenant 배포와 EC 검증 테스트 (0) | 2025.09.12 |
MinIO 오브젝트 스토리지 에센셜 강의 자료 정리 (0) | 2025.09.11 |