Azure Native Qumulo jetzt in der EU, im Vereinigten Königreich und in Kanada verfügbar – Erfahren Sie mehr

Qumulo mit S3 über Minio skripten

Bei Qumulo ist es äußerst wichtig, sicherzustellen, dass Kunden leicht auf ihre Daten zugreifen und sie verwalten können, da wir daran arbeiten, unsere Mission zu erfüllen, das Unternehmen zu werden, dem die Welt vertraut, seine Daten für immer zu speichern. Benutzer können seit langem über SMB, NFS und RESTful APIs mit ihren Daten interagieren. Für die meisten Kunden erfüllen diese Protokolle ihre Anforderungen. Eine wachsende Untergruppe unserer Kunden möchte jedoch über eine S3-kompatible API mit ihrem Qumulo kommunizieren, um die Wirtschaftlichkeit und Leistung der Dateispeicherung mit modernen, für Objekte geschriebenen Tools zu nutzen.

Die Objektspeicherung ist eine immer beliebtere Option für Kunden, die ihre Daten in der Cloud speichern möchten. Selbst für Kunden, die keinen Objektspeicher nutzen möchten, setzen viele Tools, die sie verwenden, ein Objekt-Backend voraus und kommunizieren über die S3-API von Amazon (die sich zum De-facto-Standard für Objektspeicher-APIs entwickelt hat).

Für Kunden, die mit Qumulo über das S3-SDK oder die API interagieren möchten, empfehlen wir die Verwendung von Minio. Minio ist ein leistungsstarker Objektspeicherserver, der als S3-kompatibles Frontend für verschiedene Cloud- und lokale Speicher fungiert. Das bedeutet, dass Sie einen Minio-Server vor Ihrem Qumulo-Speicher haben und S3-Anfragen bearbeiten können.

In diesem Tutorial gehe ich davon aus, dass Sie bereits über ein Qumulo-Cluster-Setup verfügen. Sollte dies nicht der Fall sein, befolgen Sie bitte zunächst dieses Tutorial.

Deployment-Modell

Für eine optimale Leistung wird das verteilte Gateway-Modell von Minio empfohlen. Mit einem Load Balancer oder Round-Robin-DNS können mehrere Minio-Instanzen hochgefahren und mit demselben NAS verbunden werden. Der Load Balancer kann Anwendungsanfragen über einen Pool von Minio-Servern verteilen, die über NFS mit Qumulo kommunizieren. Aus der Perspektive Ihrer Anwendungen sprechen sie mit S3, während Qumulo nur mehrere daran angeschlossene NFS-Clients sieht, sodass Sie sich keine Sorgen über das Sperren machen müssen.

Empfohlene Umgebung

Qumulo-Knoten: Alle Qumulo-Produkte sind mit Minio . kompatibel

Qumulo Client/Minio Server: 4 x uC-klein (mc-14,15,18,19)

Mounts: Jeder Client hat jeden Qumulo-Knoten mit Standard-NFS-Argumenten gemountet

Minio-Server: 4 Instanzen, die über Docker auf jedem Client-Rechner ausgeführt werden

Minio-Client (mc): Auf jedem Minio-Server-Rechner wird x86 nativ ausgeführt

Dein Thema

Minio herunterladen

Beginnen wir mit dem Herunterladen von Minio. Minio ist für alle gängigen Betriebssysteme verfügbar und kann sogar als Docker- oder Kubernetes-Container ausgeführt werden.

Docker

				
					$> docker pull minio/minio
				
			

Linux

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

MacOS

				
					$> brew install minio/stable/minio
				
			

Windows

Herunterladen und installieren über https://dl.minio.io/server/minio/release/windows-amd64/minio.exe

Windows

Herunterladen und installieren über https://dl.minio.io/server/minio/release/windows-amd64/minio.exe

Minio im Gateway-Modus ausführen

Starten Sie in jedem Docker-Container auf Ihren Clients eine Minio-Instanz mit dem folgenden Befehl:

Docker

				
					$> 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
				
			

MacOS

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

				
			

Windows

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

Testen Sie, ob es funktioniert

Um zu testen, ob Ihr Minio-Server funktioniert, laden wir Boto, das S3-Python-SDK, herunter und schreiben ein einfaches Skript.

				
					$> pip3 install boto3
				
			

Ich werde ein Testskript in Python namens „minio-test.py“ erstellen. Darin habe ich den folgenden Code geschrieben. Es verwendet Boto3, um die im Ordner 'minio-demo' gespeicherte Datei 'minio-read-test.txt' zu lesen und den Dateiinhalt an die Konsole zu drucken.

				
					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())
				
			

Ein vollständiges Codebeispiel, das zeigt, wie Sie zusätzliche S3-Operationen ausführen können, finden Sie unten.

Zusammenfassung

Minio ist ein stabiles und äußerst beliebtes Open-Source-Projekt mit über 105 Millionen Downloads. Das Projekt ist bei einer äußerst aktiven Community beliebt, was uns begeistert, dass Kunden es in ihren Umgebungen einsetzen. Wir freuen uns auch, weil wir das Feedback unserer Kunden ernst nehmen und die Bereitstellung von Minio als Frontend für Qumulo einer der wichtigsten Anfragen nach einer S3-Kompatibilitätsschicht entspricht.

Vollständiges Codebeispiel

				
					# 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')
				
			

Leistung

Je nachdem, wie viele Minio-Gateway-Instanzen hochgefahren werden, variiert die Leistung. Generell gilt: Je parallelisierbarer die Arbeitslast und je mehr Gateways vor Qumulo stehen, desto besser ist die Leistung. Damit Kunden besser einschätzen können, ob Minio ihnen helfen könnte oder nicht, haben wir sowohl unsere Leistungstestergebnisse als auch unsere Testmethodik veröffentlicht.

Test Umgebung

  • Qumulo-Knoten: 4 x Q0626 (du19,21,23,30)
  • Qumulo Client/Minio Server: 4 x uC-klein (mc-14,15,18,19)
  • Mounts: Jeder Client hat jeden Qumulo-Knoten mit Standard-NFS-Argumenten gemountet
  • Minio-Server: 4 Instanzen, die über Docker auf jedem Client-Rechner mit dem folgenden Befehl ausgeführt werden
				
					$> 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-Client (mc): Auf jedem Minio-Server-Rechner wird x86 nativ ausgeführt

Single-Stream-Schreiben: 84 MB/s

Gestreamte Nullen an Qumulo über den mc-Pipe-Befehl des Minio-Clients:

				
					$> 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
				
			

Mit Qumulo Analytics sehen wir während dieser Zeit eine Mischung aus Lese- und Schreib-IOPS, wobei die Lesevorgänge aus dem .minio.sys/multipart-Verzeichnis stammen:

Dies liegt an der Art und Weise, wie das S3-Protokoll mit großen Dateien umgeht, wobei die Datei in Blöcken hochgeladen und dann aus diesen Teilen zur endgültigen Datei wieder zusammengesetzt wird. Im NAS-Gateway-Modus implementiert Minio dieses Verhalten, indem es jeden Chunk zu einer eigenen temporären Datei macht und dann daraus liest und sie der Reihe nach an die endgültige Datei anhängt. Im Wesentlichen gibt es einen Schreibverstärkungsfaktor von 2x und ein zusätzliches Lesen aller geschriebenen Daten.

Single-Stream-Lesen: 643 MB/s

Die von mir geschriebene Datei über den Befehl "mc cat" von Minio zurückgestreamt, wobei zuerst der Linux-Dateisystem-Cache und der Qumulo-Cache gelöscht werden:

				
					$> /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
				
			

Multi-Stream-Schreiben: ~600MBps-1GBps

Dieser Test wurde mit 32 parallel laufenden 10-GB-Schreibstreams auf die oben beschriebene Weise ausgeführt (2 pro Minio-Instanz):

Multi-Stream-Lesen: 1.1-1.7 GB/s

Dieser Test wurde mit 32 parallel laufenden 10-GB-Lesestreams auf die oben beschriebene Weise ausgeführt (2 pro Minio-Instanz):

S3-Benchmarks

Die richtigen Minios modifizierte Version of S3-Benchmark von Wasabi Tech, konnten wir aus unserer Testumgebung folgende Ergebnisse erzielen. Der Benchmark musste angepasst werden, da das Original eine Unterstützung für die Objektversionierung voraussetzt, die Minio im Gateway-Modus nicht unterstützt.

Einzelkunde

Dieser Test wurde mit 32 parallel laufenden 10-GB-Schreibstreams auf die oben beschriebene Weise ausgeführt (2 pro Minio-Instanz):

				
					$> ./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.
				
			

Multi-Client

In dieser Testvariante haben wir eine Instanz von s3-Benchmark pro Minio-Instanz für insgesamt 16 gleichzeitige Instanzen ausgeführt. Jedem s3-Benchmark-Lauf wurde ein eigener Bucket zugewiesen. Insgesamt schienen die Schreibgeschwindigkeiten etwa 700 MB/s zu erreichen, während die Lesegeschwindigkeiten bei 1.5 GB/s ihren Höchststand erreichten und dann nachließen:

Durch die Erhöhung der Dateigröße auf 16 MiB konnte ich einen aggregierten Schreibdurchsatz von etwa 1.5-1.8 GBps und einen aggregierten Lesedurchsatz von 2.5 GBps in der Spitze erreichen. Ein höherer Schreibdurchsatz ist möglich, indem mehr Threads angegeben werden, aber Minio hat 503-Fehler zurückgegeben, was wahrscheinlich auf die Ausführung von vier Minio-Containern pro Client-Rechner zurückzuführen ist.

Das folgende Bash-Skript wurde auf jedem der Client-Rechner ausgeführt:

				
					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-Kompatibilität

Die folgenden S3-APIs werden von Minio nicht unterstützt.

Bucket-APIs

  • BucketACL (Verwenden Bucket-Richtlinien stattdessen)
  • BucketCORS (CORS ist standardmäßig in allen Buckets für alle HTTP-Verben aktiviert)
  • BucketLifecycle (Nicht erforderlich für Minio-Back-End mit Löschcode)
  • BucketReplication (Verwenden MC-Spiegel stattdessen)
  • BucketVersions, BucketVersioning (Verwenden Sie s3git)
  • BucketWebsite (Verwendung Caddie or )
  • BucketAnalytics, BucketMetrics, BucketLogging (Verwendung Bucket-Benachrichtigung APIs)
  • BucketRequestPayment
  • BucketTagging

Objekt-APIs

Einschränkungen für Objektnamen auf Minio

Objektnamen, die die Zeichen `^*|“ enthalten, werden auf Windows und anderen Dateisystemen, die Dateinamen mit diesen Zeichen nicht unterstützen, nicht unterstützt.

2. Ein Bestätigungsdialogfeld erscheint. Klicken Sie auf Ja, Löschen.

Nach oben scrollen