[MinIO] MinIO 핵심 운영 개념

MinIO 핵심 운영 개념

MinIO의 구성요소

MinIO는 하나 이상의 스토리지 및 컴퓨팅 리소스로 구성되며, 이를 통해 단일 객체 스토리지 저장소로 작동한다.

MinIO는 물리적 장치에서 직접 실행될 수도 있으며, docker, k8s와 같은 container 내에서도 실행될 수 있다.

MinIO는 3가지 토폴로지(설계 및 구축 방법)가 있다.

  • Single Node Single Drive: 단일 MinIO 서버와 데이터를 위한 단일 드라이브 또는 폴더가 있는 토폴로지이다. 이는 컴퓨터의 하드 드라이브에 있는 폴더를 사용하여 로컬 PC에서 테스트하는 경우와 같은 경우에 사용될 수 있다.

  • Single Node Multi Drive: 단일 MinIO 서버와 데이터를 위한 여러 마운트된 드라이브 또는 폴더가 있는 토폴로지이다. 이는 두 개 이상의 마운트된 볼륨을 가진 단일 컨테이너와 같은 경우에 사용될 수 있다.

  • Multi Node Multi Drive: 여러 개의 MinIO 서버와 데이터를 위한 여러 마운트된 드라이브 또는 볼륨이 있는 토폴로지이다. 이는 Kubernetes를 사용하여 pod와 관련된 PVC을 관리하고 배포하는 운영환경인 경우에 사용될 수 있다.


Distributed MinIO

Distributed MinIO 동작 방식

Distributed MinIO는 여러 노드로 구성된 클러스터를 말한다. 각 노드는 독립 실행형 MinIO 서버로 작동하며, 데이터를 저장하고 처리한다.

서버 풀(Server Pool)은 MinIO 서버 노드의 집합으로, 각 노드는 드라이브와 리소스를 풀링하여 객체 저장 및 검색 요청을 처리하는 데 사용된다. MinIO는 수평적 확장을 위해 기존 MinIO에 하나 이상의 서버 풀을 추가 할 수 있다. 분산 MinIO 클러스터는 “Erasure Coding”이라는 특수한 데이터 복제 기술을 사용하여 데이터의 신뢰성을 보장한다. 데이터는 조각으로 나누어 여러 노드에 분산 저장되고, 손실된 노드에서도 데이터를 복원할 수 있다. 여러 서버 풀 이 있는 경우, 각 데이터는 항상 동일한 서버 풀 내의 동일한 Erasure Set에 기록된다.

하나의 서버 풀이 다운되면, MinIO는 클러스터가 정상 작동할 때까지 다운된 서버 풀의 모든 풀에 대한 I/O를 중단한다. 다운된 서버 풀의 I/O를 계속하려면 해당 풀을 작동 상태로 복구해야 한다. 복구 작업을 수행하는 동안 다른 풀에 기록된 객체는 디스크에 안전하게 유지된다.

다음은 minio server명령어를 통해 노드당 4개의 drive를 가진 4개의 MinIO 서버 노드로 구성된 단일 서버 풀을 구성하는 예시이다.

minio server https://minio{1...4}.example.net/mnt/disk{1...4}

             |                    Server Pool                |

같은 MinIO 서버 시작 명령으로 서버 풀을 시작하면 모든 서버들이 클러스터링 된다.

그렇다면 노드당 4개의 drive를 가진 4개의 MinIO 서버 노드로 구성된 서버 풀을 2개로 구성해보자. 총 32개의 drive일 것이다.

minio server https://minio{1...4}.example.net/mnt/disk{1...4} \
             https://minio{5...8}.example.net/mnt/disk{1...4}

             |                    Server Pool                |

각 서버 풀은 drive와 노드 수에 따라 하나 이상의 Erasure Set을 가진다. MinIO는 운영 환경에서 클러스터를 구성할 때 적절한 고가용성과 내구성을 위하여 적어도 4개의 MinIO 서버 노드로 구성된 서버 풀을 강력히 권장한다.


MinIO 사이즈 변경

Distributed MinIO에서 사용가능한 저장소를 확장 및 축소 시킬 수 있다. 확장은 기존에 서버 풀을 추가하여 용량을 늘리는 것이며, 제외는 오래된 풀을 제거하고 데이터를 새로운 풀로 이전하는 작업이다. 제외 작업은 주로 오래된 하드웨어를 가진 풀을 제거하는데 사용한다.


MinIO 클러스터 관리

MinIO 클러스터를 관리하기 위한 여러가지 옵션이 있다.

  1. mcmc admin을 사용하여 명령줄(Command Line)로 관리하는 방법
    • mc는 MinIO의 명령줄 도구로, 파일 및 객체 관리 작업을 수행할 수 있다.
    • mc admin은 MinIO 클러스터를 관리하기 위한 명령줄 도구로, 클러스터 설정 및 모니터링 작업을 수행할 수 있다.
  2. 개별 인스턴스를 위한 MinIO Console 그래픽 사용자 인터페이스(GUI)
    • MinIO Console은 개별 MinIO 인스턴스를 관리하기 위한 그래픽 사용자 인터페이스(GUI)다.
    • 이를 통해 객체 저장소, 액세스 권한 설정, 사용량 모니터링 등을 관리할 수 있다.
  3. Kubernetes에서 MinIO Operator Console을 사용하는 방법
    • MinIO Operator Console은 Kubernetes에서 MinIO를 관리하기 위한 그래픽 사용자 인터페이스(GUI)다.
    • 이를 통해 Kubernetes 환경에서 MinIO 클러스터를 배포하고 관리할 수 있다.


MinIO 내에서 분산 데이터 관리 방법

데이터 저장

MinIO는 가용한 서버 풀 간에 데이터 저장을 최적화하기 위해 여러 가용한 서버 풀 중에서 가장 많은 여유 공간을 가진 서버 풀에 새로운 데이터를 저장되며, 해당 풀이 가득 차면 새로운 쓰기 작업은 점차적으로 배포된 모든 풀에 균등하게 분산된다. 데이터 추가, 업데이트의 경우 아래와 같다.

  1. 데이터 추가: MinIO는 여러 가용한 서버 풀 중에서 가장 많은 여유 공간을 가진 풀을 선택하여 객체를 저장한다. 이를 통해 데이터를 균형 있게 분산시킬 수 있다.
  2. 기존 데이터 업데이트: 이미 존재하는 데이터에 대한 쓰기 작업은 해당 데이터가 저장된 서버 풀을 기반으로 수행된다. 이를 위해 MinIO는 데이터의 메타데이터를 확인하여 해당 데이터가 저장된 서버 풀을 식별하고, 해당 풀에 데이터를 쓰는 작업을 수행한다.


서버 확장 후 데이터 재배치

확장 후에 모든 풀 간에 데이터를 재배치하는 작업은 전체 배포를 스캔하고 데이터를 풀 간에 이동해야 하므로 비용이 많이 드는 작업이다. 이는 이동해야 할 데이터 양에 따라 완료까지 시간이 오래 걸릴 수 있다.

MinIO 클라이언트 버전 RELEASE.2022-11-07T23-47-39Z부터 mc admin rebalance 명령어를 사용하여 모든 서버 풀 간에 재배치 작업을 수동으로 시작할 수 있다.

재배치 작업은 진행 중인 작업을 차단하지 않고 모든 다른 I/O와 병렬로 실행된다. 이로 인해 정상 작업의 성능이 감소할 수 있다. 생산 워크로드에 영향을 주지 않기 위해 재배치 작업을 non-peak 시간에 수행하는 것이 좋다. 재배치 작업은 언제든지 시작하고 중지할 수 있다.


MinIO로 데이터 업로드

MinIO를 사용하여 데이터를 업로드하기 위해선, Amazon S3와 호환되는 어떠한 tool이든 사용할 수 있다.

MinIO는 또한 multipart uploads를 지원한다. 이를 통해 클라이언트는 객체를 여러 부분으로 나누어 전송량과 전송 신뢰성을 향상시킬 수 있다. MinIO는 이러한 부분을 다시 조립하여 완성된 객체를 생성한 다음 지정된 경로에 저장한다.


MinIO의 데이터 안정성 및 지속성 제공

Erasure Coding

MinIO Erasure Coding은 MinIO 배포에서 여러 드라이브를 사용하여 클러스터에서 여러 드라이브 또는 노드의 손실에도 객체를 실시간으로 자동으로 복구할 수 있는 데이터 복제 및 가용성 기능이다.

Erasure Set

Erasure Set은 MinIO Erasure Coding을 지원하는 여러 드라이브의 그룹이다.

MinIO는 데이터를 샤드(Shard)라고 불리는 청크로 나누고, Erasure Set의 각 드라이브에 균등하게 분산시킨다. 어떤 단일 드라이브의 손실이 있더라도 MinIO는 읽기 및 쓰기 요청을 원활하게 처리할 수 있다. 최고 중복성 수준에서는, MinIO는 배포된 총 드라이브의 절반 (N/2)까지 손실이 발생해도 성능에 미치는 영향을 최소화하면서 읽기 요청을 처리할 수 있다.

MinIO는 서버 풀의 총 드라이브 수와 서버 수에 따라 Erasure Set의 크기와 수를 계산한다. 이를 통해 MinIO는 데이터를 안전하게 분산시키고 이중화하여 고 가용성과 복원력을 제공한다. Erasure Set은 MinIO의 중요한 기능 중 하나로, 데이터의 안전성과 신뢰성을 보장한다.


저장 공간 효율성

Erasure Coding은 RAID나 복제와 비교하여 더 적은 저장 공간을 요구하며, 데이터 복구 과정에서 필요한 리소스 및 대역폭도 줄인다. 이를 통해 MinIO는 데이터 중복성과 가용성을 효율적으로 제공하면서도 저장 공간과 리소스의 효율성을 유지한다.


Bit Rot Healing

Bit Rot이란 장치에서 발생할 수 있는 예상치 못한 데이터 손상을 의미한다. Bit rot 손상은 사용자의 활동으로 인해 유발되지 않으며, 시스템의 운영 체제만으로는 손상을 감지하여 사용자나 관리자에게 데이터 변경 사항을 알리지 못한다. Bit Rot의 일반적인 원인은 아래와 같다.

  • 오래된 드라이브
  • 전류 문제
  • 드라이브 펌웨어 버그
  • 의도하지 않은 쓰기 작업
  • 잘못된 읽기/쓰기 작업
  • 드라이버 오류
  • 실수로 덮어쓰기

MinIO는 해시 알고리즘을 사용하여 객체의 무결성을 확인한다. 만약 Bit rot으로 인해 객체가 손상된다면, MinIO는 사용자나 관리자의 개입 없이도 시스템의 토폴로지와 가용성에 따라 자동으로 해당 객체를 복구할 수 있다.


Quorum

Quorum은 작업을 수행하는 데 필요한 최소한의 드라이브 수를 의미한다. MinIO에서는 데이터를 읽는 데 필요한 Quorum과 데이터를 쓰는 데 필요한 별도의 Quorum이 있다.

기본적으로 MinIO에서는 데이터 샤드와 패리티 샤드를 포함하는 erasure set의 노드 수 중 과반수를 Quorum으로 설정한다. 이는 데이터와 패리티 샤드 중 절반 이상의 샤드가 동시에 접근 가능하다는 것을 의미한다. 예를 들어, 만약 erasure set에 8개의 데이터 샤드와 4개의 패리티 샤드가 있다면, Quorum은 데이터 샤드 5개와 패리티 샤드 3개로 설정될 수 있다.

Quorum의 개념을 활용하면 MinIO는 노드 중 일부가 동작하지 않거나 응답이 지연되는 경우에도 데이터의 일관성과 가용성을 유지할 수 있다. 응용 프로그램은 Quorum을 충족하는 노드의 수에 따라 읽기 및 쓰기 작업을 수행하고, Quorum 이상의 노드가 작업을 수행해야만 작업이 성공적으로 완료된 것으로 간주한다.

즉, MinIO는 읽기와 쓰기 작업을 처리하기 위해 동시에 작동해야 하는 최소한의 드라이브 수를 유지함으로써 데이터의 안정성과 가용성을 보장한다.

Leave a comment