프로그래밍

[MinIO] MinIO Windows에 설치하기

Victory_HA 2023. 3. 10. 11:00

1. MinIO

  • Open Source Object Storage
  • Kubernetes, docker, OS (linux, macOS, Windows)등 다양한 운영 환경을 지원합니다.
  • MinIO는 2개 모드를 구성할 수 있습니다.
    • Standalone : Node 1개 - Drive 1개
    • Distributed : Node n개 - Drive n개

1.1. MinIO - Distributed 모드

  • multi drive를 하나의 object storage 로 묶는 기능입니다.

  • Distributed 모드로 사용하면 Erasure Coding 기법을 사용하여 Object를 관리합니다.
  • Erasure Coding 기법을 사용함으로써 데이터 중복을 허용, 가용성을 지원합니다.
    • 데이터를 인코딩하여 추가한 후 데이터 손실이 발생했을 때 디코딩하여 복구하는 기법입니다.

1.2. MinIO 설치

  • MinIO를 설치하려면 Server와 Client 두 가지를 설치해야 합니다.
    • Server : 스토리지 서비스의 역할
    • Client : 서버의 설정을 담당
  • Default 설정으로 사용하고자 한다면 Client 설치하지 않아도 됩니다.
  • 여러 개의 버킷을 관리하고 버킷 별로 계정추가, 권한관리, 버킷이중화 등의 기능을 사용하려면 Client 설치가 필수입니다.

1.2.1. MinIO 서버 설치

  • 다음 URL에서 MinIO 실행 파일을 다운로드합니다.
https://dl.min.io/server/minio/release/windows-amd64/minio.exe

1.2.2. MinIO 서버 실행

  • PowerShell 또는 명령 프롬프트에서 실행 파일 위치로 이동하거나 minio.exe 파일의 경로를 시스템 $PATH에 추가합니다.
  • 아래 명령어를 사용하여 D:\minio 폴더에서 로컬 MinIO 인스턴스를 시작합니다.
    • D:\minio를 로컬 컴퓨터의 다른 드라이브 또는 폴더 경로로 바꿀 수 있습니다.
.\minio.exe server D:\minio --console-address :9090
  • minio 서버 프로세스는 다음과 유사한 출력을 시스템 콘솔에 인쇄됩니다.
API: http://192.0.2.10:9000  http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin

Console: http://192.0.2.10:9090 http://127.0.0.1:9090
RootUser: minioadmin
RootPass: minioadmin

Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html
   $ mc alias set myminio http://192.0.2.10:9000 minioadmin minioadmin

Documentation: https://min.io/docs/minio/linux/index.html

WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables.
  • 프로세스는 현재 PowerShell 또는 명령 프롬프트 창에 연결되어 있습니다.
  • 창을 닫으면 서버가 중지되고 프로세스가 종료됩니다.

1.2.3. MinIO Client 설치

1.2.4.실행

  • PowerShell - 아래 실행 명령어 입력
    mc alias set myminio [HOSTNAME] [ACCESS_KEY] [SECRET KEY]
  • Success 확인
    PS C:\Users\seungha.lee> mc config host add localtest http://127.0.0.1:9000 7QeUfQDLt9V5Sc8b qggbmV9kzWr7zvqwSUhaOQnxPqc4x7Y0
    Added `localtest` successfully.

1.3. Browser를 통한 MinIO서버 접근

  • address : 127.0.0.1:9090
  • 로그인 페이지
    • ID: minioadmin
    • PW: minioadmin

  • 메인 페이지

Bucket 생성

  • Buckets - Create Bucket

File Upload

  • Buckets - 폴더 아이콘 - Upload File/Folder

이미지파일 (Tiff) 업로드 후 파일 상태 확인

모니터링

  • Prometheus, InfluxDB를 이용하면 모니터링이 가능합니다.

5. File Upload/Download

  • minio Nuget 설치

5.1. 성능 테스트

  • Upload/Download는 MinIO가 느립니다.
  • Tiff 파일로 테스트 진행
    • FileSize : 224MB

public static async Task Main(string[] args)
        {
            var srcDirPath = @"C:\Users\seungha.lee\Desktop\minio_src";
            var destDirPath = @"C:\Users\seungha.lee\Desktop\minio_dst";
            var srcFullPath = Directory.GetFiles(srcDirPath);
            var fileNames = new List<string>();

            foreach (var src in srcFullPath)
            {
                fileNames.Add(Path.GetFileName(src));
            }

            try
            {
                //minio info
                var endPoint = "127.0.0.1:9000";
                var accessKey = "7QeUfQDLt9V5Sc8b";
                var secretKey = "qggbmV9kzWr7zvqwSUhaOQnxPqc4x7Y0";
                var bucketName = "searchtest1";

                //init client
                var minio = new MinioClient()
                    .WithEndpoint(endPoint)
                    .WithCredentials(accessKey, secretKey)
                    .Build();

                var existsArgs = new BucketExistsArgs().WithBucket(bucketName);
                var isBucket = await minio.BucketExistsAsync(existsArgs).ConfigureAwait(false);

                //Make bucket
                if (!isBucket)
                {
                    await MakeBucket.Run(minio, bucketName);
                }

                //Upload    (local -> minio)
                for (int i = 0; i < 5; i++)
                {
                    await FPutObject.Run(minio, bucketName, fileNames[i], srcFullPath[i]);
                }

                //Download  (minio -> local)
                for (int i = 0; i < 5; i++)
                {
                    await FGetObject.Run(minio, bucketName, fileNames[i], Path.Combine(destDirPath, fileNames[i]));
                }

                //Delete
                for (int i = 0; i < 5; i++)
                {
                    await RemoveObject.Run(minio, bucketName, fileNames[i]).ConfigureAwait(false);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();
        }
  • packages2 폴더의 파일들을 packages로 이동시킨 후 빌드해야합니다.

MinIO_TEST.zip
17.98MB
packages.zip
19.50MB
packages2.zip
16.57MB

'프로그래밍' 카테고리의 다른 글

유스케이스 (Usecase)  (0) 2023.04.26
VisualStudio Copilot 설치하기  (0) 2023.03.30
Zero Copy 란?  (0) 2023.03.05
[프로그래밍] 디자인패턴  (0) 2022.11.07
[gRPC] gRPC란?  (0) 2022.06.16