Azure Native Qumulo 이제 EU, 영국 및 캐나다에서 사용 가능 – 자세히 알아보기

Minio를 통해 S3로 Qumulo 스크립팅

Qumulo에서는 고객이 데이터에 쉽게 액세스하고 관리할 수 있도록 하는 것이 데이터를 영원히 저장하는 세계가 신뢰하는 기업이 된다는 우리의 사명을 완수하는 데 매우 중요합니다. 오랫동안 사용자는 SMB, NFS 및 RESTful API를 통해 데이터와 상호 작용할 수 있었습니다. 대부분의 고객에게 이러한 프로토콜은 요구 사항을 충족합니다. 그러나 점점 더 많은 고객이 객체용으로 작성된 최신 도구를 사용하여 파일 스토리지의 경제성과 성능을 활용하기 위해 S3 호환 API를 통해 Qumulo와 대화하려고 합니다.

개체 스토리지는 클라우드에 데이터를 저장하려는 고객에게 점점 더 인기 있는 옵션입니다. 객체 스토리지를 활용하지 않으려는 고객의 경우에도 사용하기 시작한 많은 도구는 객체 백엔드를 가정하고 Amazon의 S3 API(객체 스토리지 API의 사실상 표준이 됨)를 통해 통신합니다.

S3 SDK 또는 API를 통해 Qumulo와 상호 작용하려는 고객의 경우 Minio를 사용하는 것이 좋습니다. Minio는 다양한 클라우드 및 로컬 스토리지에 대한 S3 호환 프론트엔드 역할을 하는 고성능 개체 스토리지 서버입니다. 즉, Minio 서버를 Qumulo 스토리지 앞에 놓고 S3 요청을 처리할 수 있습니다.

이 튜토리얼에서는 이미 Qumulo 클러스터 설정이 있다고 가정합니다. 그렇지 않은 경우 먼저 이 튜토리얼을 따르십시오.

배포 모델

최적의 성능을 위해서는 Minio의 분산 게이트웨이 모델을 권장합니다. 로드 밸런서 또는 라운드 로빈 DNS를 사용하여 여러 Minio 인스턴스를 스핀업하고 동일한 NAS에 연결할 수 있습니다. 로드 밸런서는 NFS를 통해 Qumulo와 통신하는 Minio 서버 풀 전체에 애플리케이션 요청을 분산할 수 있습니다. 응용 프로그램의 관점에서 보면 Qumulo는 연결된 여러 NFS 클라이언트만 보는 동안 S3와 통신하므로 잠금에 대해 걱정할 필요가 없습니다.

권장 환경

Qumulo 노드: 모든 Qumulo 제품은 Minio와 호환됩니다.

Qumulo 클라이언트/미니오 서버: 4 x uC-small(mc-14,15,18,19)

마운트: 각 클라이언트에는 기본 NFS 인수로 마운트된 각 Qumulo 노드가 있습니다.

Minio 서버: 각 클라이언트 시스템에서 Docker를 통해 실행되는 4개의 인스턴스

Minio 클라이언트(mc): 각 Minio 서버 시스템에서 x86 기본 실행

튜토리얼

미니오 다운로드

Minio를 다운로드하여 시작하겠습니다. Minio는 모든 주요 운영 체제에서 사용할 수 있으며 Docker 또는 Kubernetes 컨테이너로 실행할 수도 있습니다.

도커

				
					$> docker pull minio/minio
				
			

Linux

				
					$> wget https://dl.minio.io/server/minio/release/linux-amd64/minio
$> chmod +x minio
				
			

맥 OS

				
					$> brew install minio/stable/minio
				
			

Windows

를 통해 다운로드 및 설치 https://dl.minio.io/server/minio/release/windows-amd64/minio.exe

Windows

를 통해 다운로드 및 설치 https://dl.minio.io/server/minio/release/windows-amd64/minio.exe

게이트웨이 모드에서 Minio 실행

클라이언트의 각 Docker 컨테이너 내에서 다음 명령을 사용하여 Minio 인스턴스를 가동합니다.

도커

				
					$> docker run -d -p 9000:9000 -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" --name minio -v /mnt/minio-test:/nas minio/minio gateway nas /nas
				
			

Linux

				
					./minio gateway nas ./Path-To-Mounted-Qumulo
				
			

맥 OS

				
					minio gateway nas ./Path-To-Mounted-Qumulo

				
			

Windows

				
					minio.exe gateway nas X:\Path-To-Mounted-Qumulo
				
			

작동하는지 테스트

Minio 서버가 작동하는지 테스트하기 위해 S3 Python SDK인 Boto를 다운로드하고 간단한 스크립트를 작성합니다.

				
					$> pip3 install boto3
				
			

저는 Python에서 "minio-test.py"라는 테스트 스크립트를 만들 것입니다. 내부에 아래 코드를 작성했습니다. Boto3를 사용하여 'minio-demo' 폴더에 저장된 'minio-read-test.txt' 파일을 읽어와서 파일 내용을 콘솔에 출력합니다.

				
					import boto3
from botocore.client import Config

# Configure S3 Connection
s3 = boto3.resource('s3',  
  aws_access_key_id = 'YOUR-ACCESS-KEY-HERE',
  aws_secret_access_key = 'YOUR-SECRET-KEY-HERE',                                                                                                         
  endpoint_url = 'YOUR-SERVER-URL-HERE',
  config=Config(signature_version='s3v4'))

# Read File
object = s3.Object('minio-demo', 'minio-read-test.txt')
body = object.get()['Body']
print(body.read())
				
			

추가 S3 작업을 수행하는 방법을 보여주는 전체 코드 샘플은 아래에서 찾을 수 있습니다.

결론

Minio는 105억 3백만 다운로드 이상을 자랑하는 안정적이고 매우 인기 있는 오픈 소스 프로젝트입니다. 이 프로젝트는 매우 활동적인 커뮤니티에서 인기가 높기 때문에 고객이 자신의 환경에 프로젝트를 배포하는 것을 기쁘게 생각합니다. 우리는 또한 고객의 피드백을 진지하게 받아들이고 Minio를 Qumulo의 프론트엔드로 배포함으로써 SXNUMX 호환성 계층에 대한 상위 요청을 처리하게 되어 매우 기쁩니다.

전체 코드 샘플

				
					# Import AWS Python SDK
import boto3
from botocore.client import Config

bucket_name = 'minio-test-bucket' # Name of the mounted Qumulo folder
object_name = 'minio-read-test.txt' # Name of the file you want to read inside your Qumulo folder

# Configure S3 Connection
s3 = boto3.resource('s3',  
  aws_access_key_id = 'YOUR-ACCESS-KEY-HERE',
  aws_secret_access_key = 'YOUR-SECRET-KEY-HERE',                                                                                                         
  endpoint_url = 'YOUR-SERVER-URL-HERE',
  config=Config(signature_version='s3v4'))

# List all buckets
for bucket in s3.buckets.all():
  print(bucket.name)

input('Press Enter to continue...\n')

# Read File
object = s3.Object(bucket_name, object_name)
body = object.get()['Body']
print(body.read())
print('File Read')
input('Press Enter to continue...\n')

# Stream File - Useful for Larger Files
object = s3.Object(bucket_name, object_name)
body = object.get()['Body']
with io.FileIO('/tmp/sample.txt', 'w') as tmp_file:
  while file.write(body.read(amt=512)):
    pass

print('File Streamed @ /tmp/sample.txt')
input('Press Enter to continue...\n')

# Write File
s3.Object(bucket_name, 'aws-write-test.txt').put(Body=open('./aws-write-test.txt', 'rb'))
print('File Written')
input('Press Enter to continue...\n')

# Delete File
s3.Object(bucket_name, 'aws_write_test.txt').delete()
print('File Deleted')
input('Press Enter to continue...\n')

# Stream Write File

# Create Bucket
s3.create_bucket(Bucket='new-bucket')
print('Bucket Created')
input('Press Enter to continue...\n')

# Delete Bucket
bucket_to_delete = s3.Bucket('new-bucket')
for key in bucket_to_delete.objects.all():
  key.delete()

bucket_to_delete.delete()

print('Bucket Deleted')
input('Press Enter to continue...\n')
				
			

퍼포먼스

스핀업된 Minio 게이트웨이 인스턴스의 수에 따라 성능이 달라집니다. 일반적으로 말하면, 워크로드를 병렬화할 수 있고 Qumulo 앞에 게이트웨이가 많을수록 성능이 더 좋아집니다. 고객이 Minio가 도움이 될 수 있는지 여부를 판단할 수 있도록 성능 테스트 결과와 테스트 방법론을 모두 게시했습니다.

테스트 환경

  • Qumulo 노드: 4 x Q0626(du19,21,23,30)
  • Qumulo 클라이언트/미니오 서버: 4 x uC-small(mc-14,15,18,19)
  • 마운트: 각 클라이언트에는 기본 NFS 인수로 마운트된 각 Qumulo 노드가 있습니다.
  • Minio 서버: 아래 명령을 사용하여 각 클라이언트 시스템에서 Docker를 통해 실행되는 4개의 인스턴스
				
					$> docker run -d -p 9000:9000 -e "MINIO_ACCESS_KEY=minio" -e "MINIO_SECRET_KEY=minio123" --name minio -v /mnt/minio-test:/nas minio/minio gateway nas /nas
				
			

Minio 클라이언트(mc): 각 Minio 서버 시스템에서 x86 기본 실행

단일 스트림 쓰기: 84MB/s

Minio 클라이언트의 mc pipe 명령을 통해 XNUMX을 Qumulo로 스트리밍:

				
					$> dd if=/dev/zero bs=1M count=10000 | ./mc pipe minio1/test/10Gzeros
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 124.871 s, 84.0 MB/s
				
			

Qumulo 분석을 사용하여 이 시간 동안 .minio.sys/multipart 디렉토리에서 오는 읽기와 함께 읽기 및 쓰기 IOPS가 혼합된 것을 볼 수 있습니다.

이는 S3 프로토콜이 파일을 청크로 업로드한 다음 해당 부분에서 최종 파일로 재조립하는 대용량 파일을 처리하는 방식 때문입니다. NAS 게이트웨이 모드에서 Minio는 각 청크를 자체 임시 파일로 만든 다음 최종 파일에 순서대로 추가하여 이 동작을 구현합니다. 기본적으로 2배의 쓰기 증폭 계수와 작성된 모든 데이터에 대한 추가 읽기가 있습니다.

단일 스트림 읽기: 643MBps

Minio의 "mc cat" 명령을 통해 작성한 파일을 다시 스트리밍하여 Linux 파일 시스템 캐시와 Qumulo 캐시를 먼저 삭제했는지 확인합니다.

				
					$> /opt/qumulo/qq_internal cache_clear
$> echo 1 > /proc/sys/vm/drop_caches

$> ./mc cat minio1/test/10Gzeros | dd of=/dev/null bs=1M
524+274771 records in
524+274771 records out
10485760000 bytes (10 GB) copied, 16.3165 s, 643 MB/s
				
			

다중 스트림 쓰기: ~600MBps-1GBps

이 테스트는 위에서 설명한 방식으로 병렬로 실행되는 32개의 10GB 쓰기 스트림으로 실행되었습니다(Minio 인스턴스당 2개).

다중 스트림 읽기: 1.1-1.7GBps

이 테스트는 위에서 설명한 방식으로 병렬로 실행되는 32개의 10GB 읽기 스트림으로 실행되었습니다(Minio 인스턴스당 2개).

S3 벤치마크

사용 미니오의 수정 버전 of Wasabi Tech의 S3 벤치마크, 우리는 테스트 환경에서 다음과 같은 결과를 얻을 수 있었습니다. 원본은 게이트웨이 모드의 Minio가 지원하지 않는 개체 버전 관리를 지원한다고 가정하기 때문에 벤치마크를 수정해야 했습니다.

단일 클라이언트

이 테스트는 위에서 설명한 방식으로 병렬로 실행되는 32개의 10GB 쓰기 스트림으로 실행되었습니다(Minio 인스턴스당 2개).

				
					$> ./s3-benchmark -a minio -s minio123 -u http://localhost:9001 -t 100
Wasabi benchmark program v2.0
Parameters: url=http://localhost:9001, bucket=wasabi-benchmark-bucket, duration=60, threads=100, loops=1, size=1M
Loop 1: PUT time 60.2 secs, objects = 7562, speed = 125.5MB/sec, 125.5 operations/sec.
Loop 1: GET time 60.2 secs, objects = 23535, speed = 390.8MB/sec, 390.8 operations/sec.
Loop 1: DELETE time 17.7 secs, 427.9 deletes/sec.
Benchmark completed.
				
			

다중 클라이언트

이 테스트 변형에서는 총 3개의 동시 인스턴스에 대해 Minio 인스턴스당 하나의 s16-benchmark 인스턴스를 실행했습니다. 각 s3-benchmark 실행에는 자체 버킷이 할당되었습니다. 전체적으로 쓰기 속도는 약 700MBps에 도달하는 반면 읽기 속도는 최고 1.5GBps에 도달한 후 점점 줄어듭니다.

파일 크기를 16MiB로 높임으로써 피크에서 약 1.5-1.8GBps의 총 쓰기 처리량과 2.5GBps의 총 읽기 처리량을 달성할 수 있었습니다. 더 많은 스레드를 지정하여 쓰기 처리량을 높일 수 있지만 Minio는 503 오류를 반환하기 시작했습니다. 이는 아마도 클라이언트 시스템당 XNUMX개의 Minio 컨테이너를 실행한 결과일 것입니다.

다음 Bash 스크립트는 각 클라이언트 시스템에서 실행되었습니다.

				
					for i in $(seq 1 4); do 
   s3-benchmark/s3-benchmark -a minio -s minio123 -u http://localhost:900$i -b $HOSTNAME-$i -t 20 -z 16M & 
done;
				
			

S3 호환성

다음 S3 API는 Minio에서 지원되지 않습니다.

버킷 API

  • BucketACL(사용 버킷 정책 대신)
  • BucketCORS(모든 HTTP 동사의 모든 버킷에서 기본적으로 활성화된 CORS)
  • BucketLifecycle(Minio 삭제 코딩된 백엔드에는 필요하지 않음)
  • BucketReplication(사용 MC 미러 대신)
  • BucketVersions, BucketVersioning(사용 s3git)
  • 버킷웹사이트(사용 캐디 or Nginx에)
  • BucketAnalytics, BucketMetrics, BucketLogging(사용 버킷 알림 아피스)
  • 버킷요청결제
  • 버킷 태깅

객체 API

  • ObjectACL(사용 버킷 정책 대신)
  • 오브젝트토렌트
  • 개체 버전

Minio의 개체 이름 제한

`^*|" 문자가 포함된 개체 이름은 이러한 문자가 포함된 파일 이름을 지원하지 않는 Windows 및 기타 파일 시스템에서 지원되지 않습니다.

2. 확인 대화 상자가 나타납니다. 예, 삭제합니다를 클릭합니다.

위쪽으로 스크롤