Install Object Storage MinIO – Distributed Mode
오픈소스 Object Storage MinIO Distributed Mode (분산모드) 설치 가이드
고 가용성을 위해 MinIO Object Storage 를 Distributed Mode (분산모드)로 구성할 수 있습니다. MinIO 는 분산모드 환경으로 구성 시 erasure code 를 사용하여 여러 노드 및 드라이브의 오류에 대한 보호를 제공합니다. 분산모드를 구성하기 위한 디스크는 최소 4장이 필요합니다. 자세한 내용은 분산모드 구성 더큐먼트를 확인 해 주시기 바랍니다.
MinIO 분산모드 구성
기본적인 설치나 설정은 단일구성 환경의 설치와 거의 비슷합니다. 핵심 요소는 여러 노드들을 인식할 수 있도록 설정을 추가해 주는 것입니다. 이 가이드에서는 총 4개의 노드에 각 노드당 디스크가 1개씩 있는 환경으로 구성해 보도록 하겠습니다.
호스트 추가
먼저 /etc/hosts 파일에 아래와 같은 형식으로 이름에 연속된 숫자가 들어가도록 추가해 줍니다. 연속된 숫자가 필요한 이유는 {1…n} 형식으로 호스트를 편하게 추가할 수 있기 때문입니다. 아래 [예제 2] 와 같은 방법으로 모든 노드를 추가해 줄 수도 있지만 만약 노드가 많을 경우 설정 파일이 길고 복잡해 질 것입니다.
: vi /etc/hosts
10.19.10.221 storage-1 10.19.10.222 storage-2 10.19.10.223 storage-3 10.19.10.224 storage-4
환경설정 파일 작성
기본적인 설치방법은 단일구성 환경에서의 MinIO 설치 가이드를 참고해 주시고 모든 노드에 동일하게 설치 및 설정을 해주시면 됩니다.
: vi /usr/local/minio/minio
MINIO_ACCESS_KEY="root" MINIO_SECRET_KEY="password12#$56&*" MINIO_OPTS='0.0.0.0:9100 http://storage-{1...4}/data/storage' MINIO_BROWSER=off MINIO_REGION_NAME=pangyo-south-1
단일모드 구성과는 다르게 볼륨이 없습니다. 대신 OPTS 를 보시면 URL 형식에 데이터 디렉토리까지 명시가 되어 있고 바인딩 아이피는 0.0.0.0 으로 되어 있습니다.
상황에 따라서 아래 예제와 같은 방식으로 하실 수도 있습니다.
예제 1)
4개 노드에 4개의 디스크 (/data/storage1, /data/storage2, /data/storage3, /data/storage4 일때)
MINIO_OPTS='0.0.0.0:9100 http://storage-{1...4}/data/storage{1...4}'
예제 2)
{1…n} 형식을 사용하지 않을 때
MINIO_OPTS='0.0.0.0:9100 http://10.19.10.221/data/storage http://10.19.10.222/data/storage http://10.19.10.223/data/storage http://10.19.10.224/data/storage'
systemd 파일 작성
환경설정 파일에서 볼륨을 뺏기 때문에 systemd 파일도 수정해 주시기 바랍니다.
: vi /usr/lib/systemd/system/minio.service
[Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/minio/bin/minio [Service] WorkingDirectory=/usr/local/minio/ User=minio Group=minio PermissionsStartOnly=true EnvironmentFile=/etc/minio/minio ExecStart=/usr/local/minio/bin/minio server --address $MINIO_OPTS StandardOutput=journal StandardError=inherit # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target
MinIO 실행
한 개의 노드만 실행 시 오류가 발생합니다. 이는 다른 노드들이 실행이 안되었기 때문이므로 다른 노드들도 전부 실행해 줍니다. 정상적으로 실행되었을 경우 systemctl status minio
를 이용하여 확인해 보시면 4 Online 이라고 표시 됩니다.
Mar 04 14:38:56 10-19-10-221 minio[43809]: All MinIO sub-systems initialized successfully Mar 04 14:38:56 10-19-10-221 minio[43809]: Status: 4 Online, 0 Offline. Mar 04 14:38:56 10-19-10-221 minio[43809]: Endpoint: http://0.0.0.0:9100 Mar 04 14:38:56 10-19-10-221 minio[43809]: Object API (Amazon S3 compatible): Mar 04 14:38:56 10-19-10-221 minio[43809]: Go: https://docs.min.io/docs/golang-client-quickstart-guide Mar 04 14:38:56 10-19-10-221 minio[43809]: Java: https://docs.min.io/docs/java-client-quickstart-guide Mar 04 14:38:56 10-19-10-221 minio[43809]: Python: https://docs.min.io/docs/python-client-quickstart-guide Mar 04 14:38:56 10-19-10-221 minio[43809]: JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide Mar 04 14:38:56 10-19-10-221 minio[43809]: .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
분산모드 환경 구성에서는 모든 노드가 엔드포인트가 되기 때문에 아무 노드나 접속하여 사용할 수 있습니다.
프로덕션 환경에서는 L4 장비등을 이용하여 로드발란싱 및 https 를 적용하는 것을 권장합니다. 저는 HAProxy + Nginx 조합을 이용하고 있지만 MinIO 공식 더큐먼트에서는 소프트웨어 로드발란서 보다는 하드웨어 장비를 권장하고 있습니다.
mc 클라이언트를 이용하실 때에는 한 노드에서만 설정해도 수정 사항이 모든 노드에 동기화 되기 때문에 모든 노드에서 설정을 추가/수정/삭제 하실 필요는 없습니다.