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 설치
- https://min.io/docs/minio/linux/reference/minio-mc.html#command-mc
- 시스템 환경변수 추가
- D:\minio\mc.exe 경로를 환경변수에 추가합니다.
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를 이용하면 모니터링이 가능합니다.
- 참조 : https://min.io/docs/minio/windows/operations/monitoring/collect-minio-metrics-using-prometheus.html
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로 이동시킨 후 빌드해야합니다.
'프로그래밍' 카테고리의 다른 글
유스케이스 (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 |