Einer der starken Anwendungsfälle für MinIO ist die Tatsache, dass es überall und auf allem laufen kann. Da sich die Branche langsam auf die Rückführung von Daten in ein Collaboration- oder Rechenzentrum verlagert, wünschen sich immer mehr Unternehmen die gleichen Objektspeicherfunktionen wie in der Cloud, mit vollständiger Kontrolle über die Infrastruktur.
Warum sollten Sie Daten näher an Ihrem Zuhause haben wollen? Es gibt eine Reihe von Gründen, aber in erster Linie sind es die Kosten. Die Public Cloud ist sehr teuer geworden. Vor einiger Zeit hatte ich beispielsweise einen von ElasticSearch verwalteten Cluster, der in AWS lief. Ich wollte diesen neuen Managed Service unbedingt ausprobieren, hatte aber keine Lust, meine überraschende 30.000-Dollar-Rechnung mit meinem Chef zu besprechen. Das war ein schmerzhafter, aber vertrauter Weckruf, denn in diesem Moment wurde mir klar, dass ich AWS gerade sechs Monate Cloud-Budget bezahlt hatte, um etwas zu tun, das ich selbst hätte einrichten können. Die Moral der Geschichte lautet: Wenn Sie nicht sehr vorsichtig sind und Ihre Cloud-Ausgaben genau überwachen, können diese sehr schnell außer Kontrolle geraten.
Hinzu kommt die Frage der Sicherheit. Unabhängig davon, wo sich Ihre Daten in der öffentlichen Cloud befinden, befinden sie sich fast immer auf einem Knoten oder Speicherpool, der von jemandem gemeinsam genutzt wird, der überhaupt nichts mit Ihnen zu tun hat. Das liegt in der Natur der Cloud, denn so funktioniert Virtualisierung. Die Cloud vermittelt ein warmes Gefühl der Beruhigung, denn jetzt muss sich jemand anders mit den Sicherheitsherausforderungen befassen, aber wenn es sicherheitsrelevante Probleme gibt, gibt es keinen Einblick in das Problem (sofern jemand es überhaupt erkennen konnte) und wie man es lösen kann . Das Gefühl der Beruhigung verfliegt schnell, wenn Sie nicht mehr in der Lage sind, die Infrastruktur einer anderen Person zu sichern, um Ihre Daten zu schützen. Viele Unternehmen haben die Rückkehr zur vollständigen Kontrolle durch die Rückführung auf MinIO auf die von ihnen verwaltete Hardware genossen.
Um Ihre Rückführungsbemühungen optimal zu nutzen, verfügt MinIO über eine Reihe unternehmenstauglicher Funktionen wie Bitrot Protection zur Gewährleistung der Datenintegrität, Tiering zur Ableitung von Daten auf eine Cold-Storage-Ebene und Erasure Coding , das Objekte als Datensammlung speichert Paritätsblöcke und rekonstruiert sie im laufenden Betrieb ohne zusätzliche Hardware oder Software. Darüber hinaus unterstützt MinIO sowohl die Verschlüsselung im Ruhezustand als auch während der Übertragung . Dadurch wird sichergestellt, dass Daten in allen Facetten der Transaktion verschlüsselt werden, vom Moment des Aufrufs bis zur Platzierung des Objekts im Bucket, wo es dann mit IAM-S3-Richtlinien und einem integrierten oder externen IDP geschützt wird, siehe MinIO Weitere Informationen finden Sie unter Best Practices – Sicherheit und Zugriffskontrolle .
Eine Rückführung muss gründlich und sorgfältig geplant werden. Wenn Sie mit Petabytes an Daten zu tun haben, ist es im Allgemeinen kostengünstiger, über eine eigene Infrastruktur und eigene Server zu verfügen. Sie können sogar eine private Cloud mit Ihrer eigenen (oder geleasten) Hardware aufbauen. Darüber hinaus umfasst dies unter anderem auch die Verwaltung der Immobilien (Colo Space), der Stromversorgung/USV, der Kühlung/HLK. Lassen Sie sich davon nicht abschrecken, denn wir zeigen Ihnen, wie Sie migrieren können, der Gesamt-ROI ist jedoch immer noch besser als in der Public Cloud.
Eine private Cloud ist wie eine Wohnung (wie unser CEO AB Periasamy gerne sagt). Sie haben die volle Kontrolle über die damit verbundenen Kosten und Ausgaben und werden nie mit der Warnung vor einer überraschenden Rechnung geweckt, die durch eine rekursive Schleifenfunktion verursacht wurde, die über Nacht ausgeführt wurde. Es gibt natürlich gewisse Reibungsverluste beim Umzug, wenn man versucht, die Dinge zu verbessern. Wenn man zum Beispiel versucht, eine Autobahn auszubauen, muss man unweigerlich einige Fahrspuren sperren, damit der Bau sicher voranschreiten kann, aber wenn der Bau erst einmal abgeschlossen ist, wird man das tun nicht nur auf den Originalspuren fahren können, sondern auch auf den neu gebauten, um der Kapazität gerecht zu werden.
Zwei der wichtigsten Kostenüberlegungen, die wir in der öffentlichen Cloud berücksichtigen müssen, sind die Menge an benötigtem Speicherplatz und die Ausgangskosten beim Zugriff auf/Verschieben dieser Daten – diese können im Vergleich zu Ihrer eigenen Hardware etwa 39 % bzw. 42 % höher sein in Ihrem Rechenzentrum oder Colocation-Einrichtung. Darüber hinaus sind einige der anderen zu berücksichtigenden Kostenfaktoren Software, Hardware, Netzwerk/Switches, Immobilien/Rack-Platz/Colocation-Miete, S3-API-Aufrufe – alles, was Sie sich vorstellen können, und mehr. Erfahren Sie mehr über mögliche Einsparungen, die sich aus der Umstellung auf Ihre eigene private Cloud ergeben, in „Der Lebenszyklus der Cloud“ .
Zwischen der öffentlichen Cloud und Ihrem Rechenzentrum besteht ein Mittelweg, der Ihnen die vollständige Kontrolle über die Infrastruktur-Hardware ohne hohe Anfangskosten ermöglicht. Equinix Metal liefert, wie der Name schon sagt, Bare-Metal-Server mit genau den vom Kunden gewünschten Spezifikationen. Wenn Sie NVMe-SSDs verwenden möchten, können Sie diese Festplatten zum Bare-Metal-Server hinzufügen. Equinix bietet eine Verwaltungs-API zur Vereinfachung der Hardwarebereitstellung und des Hardwarebetriebs. Für den Entwickler/Endbenutzer ist es so einfach wie das Starten einer Instanz in der Cloud. Tatsächlich gibt es sogar einen Terraform-Anbieter für Equinix Metal (den wir Ihnen später zeigen werden).
Lass uns anfangen!
Während wir Ressourcen manuell bereitstellen können, möchte der DevOps in mir zumindest einige der sich wiederholenden Teile dieses Prozesses automatisieren, um Zeit und Aufwand zu sparen, insbesondere wenn wir unter anderem Site-to-Site-Replikation durchführen möchten.
Equinix ist einer der wenigen Bare-Metal-Anbieter, der über eine API zur vollständigen Automatisierung des Infrastrukturverwaltungsprozesses verfügt. Mithilfe ihrer API können Sie die Bereitstellung physischer Server automatisieren, sie herunterfahren und sogar beenden. All dies können Sie tun, ohne Ihre eigene Hardware, Switches, Router und andere Ressourcen zu verwenden. Dies kommt der Automatisierung auf Public-Cloud-Ebene am nächsten und stellt gleichzeitig sicher, dass niemand anderes Ihre Hardware teilt. Denn Equinix Metal unterstützt eine Vielzahl von Instanztypen und Speicheroptionen und Verbindungen wie SAS oder SATA sowie SSD, NVMe SSD oder HDD in verschiedenen Größen. Sie können auch die Hardware, auf der MinIO läuft, genau nach Ihren Spezifikationen konfigurieren – bis hin zum genauen Laufwerkstyp zur Unterbringung der MinIO-Partitionen.
Niemand erwartet von Ihnen, dass Sie Python-Skripte schreiben, um mit der Metal-API zu kommunizieren. Equinix Metal verfügt über einen Terraform-Anbieter, der es uns ermöglicht, eine Verbindung herzustellen und die für die Bereitstellung von Cluster-Ressourcen erforderlichen High-Level-Informationen bereitzustellen, während gleichzeitig der interne Aufwand abstrahiert wird, der für die Einrichtung von Netzwerk, Hardware, MinIO und anderen Anwendungen erforderlich ist.
provider "metal" { auth_token = var.auth_token }
Wenn Sie Terraform noch nicht installiert haben, können Sie es von der Download-Seite herunterladen.
Klonen Sie das GitHub-Repo equinix/terraform-metal-distributed-minio
auf Ihre lokale Workstation.
git clone https://github.com/equinix/terraform-metal-distributed-minio.git
Gehen Sie in das Repo und initialisieren Sie Terraform, damit es alle erforderlichen Module und Plugins vom Upstream herunterladen kann.
$ cd terraform-metal-distributed-minio $ terraform init
Dadurch wird sichergestellt, dass alle erforderlichen Module automatisch heruntergeladen werden. Stellen wir nun sicher, dass einige obligatorische Variablen festgelegt sind. Sie können sie entweder als Umgebungsvariablen festlegen oder es gibt eine Datei im oben geklonten Repo mit dem Namen vars.template
, die Sie als cp vars.template terraform.tfvars
kopieren können.
Unabhängig davon, welche Methode Sie wählen, müssen Sie letztendlich die folgenden zwei Variablen festlegen
Weitere Informationen hierzu finden Sie in den API- Dokumenten.
Es gibt mehrere andere Variablen, die Sie in terraform.tfvars
ändern können, und wir werden die folgenden später ändern, wenn wir eine Site-to-Site-Replikation durchführen.
Sobald Sie Ihre bevorzugte Konfiguration festgelegt haben, wenden Sie den Terraform-Plan an. Wenn der Plan in Ordnung aussieht, führen Sie den Befehl approve
aus.
$ terraform plan $ terraform apply --auto-approve
Wenn die Ressourcen ordnungsgemäß mit der richtigen Konfiguration angewendet wurden, sollte die resultierende Ausgabe etwa so aussehen
Apply complete! Resources: 10 added, 0 changed, 0 destroyed. Outputs: minio_access_key = Xe245QheQ7Nwi20dxsuF minio_access_secret = 9g4LKJlXqpe7Us4MIwTPluNyTUJv4A5T9xVwwcZh minio_endpoints = [ "minio-storage-node1 minio endpoint is http://147.75.65.29:9000", "minio-storage-node2 minio endpoint is http://147.75.39.227:9000", "minio-storage-node3 minio endpoint is http://147.75.66.53:9000", "minio-storage-node4 minio endpoint is http://147.75.194.101:9000", ] minio_region_name = us-east-1
Das ist der ganze Kram. Wenn Sie diese Ausgabe sehen, wurden nicht nur Ihre physischen Server bereitgestellt, sondern auch MinIO auf diesen Knoten bereitgestellt und die Knoten wurden als Cluster verteilten Speichers konfiguriert.
Wir haben Terraform verwendet, um den größten Teil des Prozesses zu automatisieren. Jetzt müssen wir nur noch auf den MinIO-Cluster zugreifen. Unser empfohlenes Tool ist die Verwendung mc
. Verwenden Sie den folgenden Befehl, um die Binärdatei herunterzuladen
curl https://dl.min.io/client/mc/release/linux-amd64/mc \ --create-dirs \ -o $HOME/minio-binaries/mc chmod +x $HOME/minio-binaries/mc export PATH=$PATH:$HOME/minio-binaries/
Erstellen Sie einen Alias, der auf den von uns bereitgestellten MinIO-Cluster verweist
mc config host add minio1 $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
Sie können die oben genannten Variablen durch die Werte ersetzen, die Sie beim Starten des MinIO-Clusters über Terraform festgelegt haben. Stellen Sie jedoch sicher, dass der Aliasname auf minio1
festgelegt ist. Dies wird später Sinn machen, wenn wir Ihnen zeigen, wie Sie eine Site-to-Site-Replikation durchführen.
Überprüfen Sie, ob Sie eine erfolgreiche Verbindung herstellen können, indem Sie einige Metadaten aus dem Cluster abrufen
$ mc admin info minio1 --json | jq .info.backend { "backendType": "Erasure", "onlineDisks": 48, "rrSCData": 6, "rrSCParity": 2, "standardSCData": 6, "standardSCParity": 2 }
Wenn Sie eine ähnliche Ausgabe wie oben sehen, können Sie über den Befehl mc
erfolgreich auf den MinIO-Cluster zugreifen. Was kommt als nächstes? Wann sollten wir die Daten von S3 migrieren?
Wir können die Daten von S3 migrieren oder sogar einige unserer eigenen Daten hinzufügen und mit der Nutzung des Clusters beginnen. Aber gehen wir noch einen Schritt weiter. Wir möchten das gleiche Maß an Redundanz wie AWS S3 erreichen. Das heißt, wenn eine Site ausfällt, möchten wir sicherstellen, dass unsere Daten auf einer anderen Site zugänglich sind. AWS hat dies mit Regionen erreicht, aber wie erreichen wir dies mit MinIO?
Jetzt können wir die Schönheit der kleinen Automatisierung erkennen, die wir zuvor mit Terraform durchgeführt haben. Lassen Sie mich Ihnen zeigen, wie einfach es ist, eine weitere MinIO-Region in Equinix Metal einzurichten.
Lassen Sie git clone
, dieses Mal jedoch in einem neuen Verzeichnis terraform-metal-distributed-minio-site-2
git clone https://github.com/equinix/terraform-metal-distributed-minio.git terraform-metal-distributed-minio-site-2
Gehen Sie in das Repository terraform-metal-distributed-minio-site-2
und initialisieren Sie Terraform, damit es alle erforderlichen Module und Plugins vom Upstream herunterladen kann, ähnlich wie bei der ursprünglichen MinIO-Bereitstellung.
$ cd terraform-metal-distributed-minio-site-2 $ terraform init
Nachdem alle Module heruntergeladen wurden, kopieren Sie die Variablendatei cp vars.template terraform.tfvars
und legen Sie die beiden Variablen fest
Bisher sollte der Prozess dem Start des ersten Clusters sehr ähnlich sein, aber hier werden sich die Dinge unterscheiden.
Legen wir die Variablen fest, die die zweite Site von der ersten Site unterscheiden.
Stellen Sie zunächst die facility
auf sv16
ein oder wählen Sie eine aus dieser Liste von Einrichtungen aus. Als nächstes setzen Sie den minio_region_name
auf us-west-1
oder einen anderen Wert, der ihn vom anderen Cluster unterscheidet.
Führen Sie den Plan aus, um sicherzustellen, dass die von Ihnen vorgenommenen Änderungen in der Ausgabe widergespiegelt werden.
$ terraform plan $ terraform apply --auto-approve
Wenn die Ressourcen ordnungsgemäß und mit der richtigen Konfiguration angewendet wurden, sollte die resultierende Ausgabe etwa so aussehen
Apply complete! Resources: 10 added, 0 changed, 0 destroyed. Outputs: minio_access_key = Xe245QheQ7Nwi20dxsuF minio_access_secret = 9g4LKJlXqpe7Us4MIwTPluNyTUJv4A5T9xVwwcZh minio_endpoints = [ "minio-storage-node1 minio endpoint is http://144.45.65.29:9000", "minio-storage-node2 minio endpoint is http://144.45.39.227:9000", "minio-storage-node3 minio endpoint is http://144.45.66.53:9000", "minio-storage-node4 minio endpoint is http://144.45.194.101:9000", ] minio_region_name = us-west-1
Wenn minio_region_name
als us-west-1
angezeigt wird, haben Sie den zweiten Cluster erfolgreich gestartet. Lassen Sie uns das zu mc
hinzufügen.
mc config host add minio2 $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
Legen Sie den Aliasnamen auf minio2
fest und prüfen Sie, ob Sie eine erfolgreiche Verbindung herstellen können, indem Sie einige Metadaten aus dem Cluster abrufen
$ mc admin info minio2 --json | jq .info.backend { "backendType": "Erasure", "onlineDisks": 48, "rrSCData": 6, "rrSCParity": 2, "standardSCData": 6, "standardSCParity": 2 }
Zu diesem Zeitpunkt sollten Sie zwei Sites haben: minio1
und minio2
.
Lassen Sie uns die Replikation über beide Cluster hinweg einrichten
$ mc admin replicate add minio1 minio2 Requested sites were configured for replication successfully.
Stellen Sie sicher, dass beide Sites korrekt konfiguriert sind
mc admin replicate info minio1 SiteReplication enabled for: Deployment ID | Site Name | Endpoint f96a6675-ddc3-4c6e-907d-edccd9eae7a4 | minio1 | http://<site1_public_ip> 0dfce53f-e85b-48d0-91de-4d7564d5456f | minio2 | http://<site2_public_ip>
Überprüfen Sie, ob die Replikation ordnungsgemäß funktioniert
mc admin replicate status minio1 Bucket replication status: No Buckets present Policy replication status: ● 5/5 Policies in sync User replication status: No Users present Group replication status: No Groups present
Testen Sie, indem Sie einen Bucket in minio1
erstellen
/opt/minio-binaries/mc mb minio1/testbucket
Fügen Sie dem Bucket ein beliebiges Objekt hinzu
/opt/minio-binaries/mc cp my_object minio1/testbucket
Listen Sie die Objekte auf den anderen Websites auf, in diesem Fall auf minio2
/opt/minio-binaries/mc ls minio2/testbucket [2023-07-20 18:52:09 UTC] 3.0KiB STANDARD my_object
Wie Sie sehen, können Daten nahezu augenblicklich auf andere MinIO-Bereitstellungen repliziert werden, auch wenn diese geografisch unterschiedlich sind.
Machen wir einen kurzen Test, um zu sehen, ob das wirklich so einfach ist, wie es scheint. Denken Sie daran, dass MinIO ein direkter Ersatz für AWS S3 ist, sodass alles, was mit S3 funktionieren soll, auch mit MinIO funktioniert. In diesem Fall verwenden wir Terraform, um ein Objekt in einen MinIO-Bucket hochzuladen. In Terraform erfolgt dies über den AWS-Anbieter, der im Wesentlichen ein Modul ist, das eine Verbindung zur AWS-API herstellt, um verschiedene Vorgänge im AWS-Ökosystem auszuführen. In diesem Fall verwenden wir jedoch die Terraform AWS S3-Ressource, um auf den MinIO-Bucket zuzugreifen.
Erstellen Sie wie unten beschrieben einen AWS-Anbieter in Terraform. Stellen Sie sicher, dass Sie die Details aktualisieren, damit sie mit dem Equinix Metal minio1
-Cluster übereinstimmen, den wir gerade bereitgestellt haben.
provider "aws" { region = "us-east-1" access_key = "Xe245QheQ7Nwi20dxsuF" secret_key = "9g4LKJlXqpe7Us4MIwTPluNyTUJv4A5T9xVwwcZh" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true s3_force_path_style = true endpoints { s3 = "http://147.75.65.29:9000" } }
Laden Sie eine Datei mit der Terraform-Ressource aws_s3_bucket_object
hoch
resource "aws_s3_bucket_object" "object" { bucket = "public" key = "my_file_name.txt" source = "path/to/my_file_name.txt" etag = filemd5("path/to/my_file_name.txt") }
Wie Sie oben sehen können, haben wir keine MinIO-spezifische Terraform-Ressource verwendet, sondern die Ressource aws_s3_bucket_object
des AWS-Anbieters. Obwohl wir die vorhandene AWS S3 Terraform-Ressource verwenden, wird der Objektspeicher vollständig durch MinIO der Produktionsklasse für Unternehmen betrieben.
Wir haben jetzt alle Bausteine bereit, damit Sie über Objektspeicher in Produktionsqualität und vollständige Kontrolle über die gesamte Infrastruktur verfügen. Als Nächstes migrieren wir Daten, die sich bereits in S3 befinden.
Es gibt verschiedene Möglichkeiten, Ihre Daten von AWS S3 nach MinIO zu migrieren. Wir empfehlen jedoch die Verwendung mc
.
mc mirror
ist ein Schweizer Taschenmesser der Datensynchronisation. Es kann Objekte aus S3- oder S3-API-kompatiblen Objektspeichern kopieren und auf MinIO spiegeln. Einer der beliebtesten Anwendungsfälle hierfür ist die Spiegelung eines Amazon S3-Buckets auf MinIO, um Daten für Nicht-AWS-Anwendungen und -Dienste verfügbar zu machen.
Erstellen Sie eine neue IAM-Richtlinie mit einem Zugriffsschlüssel und einem geheimen Schlüssel, die nur den Zugriff auf unseren Bucket ermöglicht. Speichern Sie die generierten Anmeldeinformationen für den nächsten Schritt.
/opt/minio-binaries/mc alias set s3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api S3v4
Verwenden Sie MC Mirror , um die Daten von S3 nach MinIO zu kopieren
mc mirror s3/mybucket minio1/testbucket
Abhängig von der Datenmenge, der Netzwerkgeschwindigkeit und der physischen Entfernung von der Region, in der die Bucket-Daten gespeichert sind, kann es einige Minuten oder länger dauern, bis Sie alle Daten gespiegelt haben. Sie sehen eine Meldung, wenn mc
mit dem Kopieren aller Objekte fertig ist.
Sobald die Daten kopiert wurden oder während die Daten kopiert werden, listen Sie den Inhalt des Buckets auf der minio2
Site auf. Sie werden feststellen, dass einige der Daten von minio1
bereits vorhanden sind.
/opt/minio-binaries/mc ls minio2/testbucket [2022-12-19 18:52:09 UTC] 3.0KiB STANDARD all_object s
Letztendlich stellt der Laptop, auf dem Sie mc mirror
ausführen, einen Engpass dar, da die Daten das System durchlaufen müssen, auf dem mc mirror
Befehl ausgeführt wird. Dabei kann es sich um mehrere Petabyte an Daten handeln, deren Migration je nach Netzwerkgeschwindigkeit Tage oder sogar Wochen dauern kann. Um Daten von S3 nach MinIO zu migrieren, gibt es eine effizientere Methode namens Batch-Replikation. Weitere Informationen zur Batch-Replikation und anderen Best Practices für die Migration finden Sie unter So führen Sie eine Rückführung von AWS S3 nach MinIO durch .
In diesem Blogbeitrag wurde gezeigt, dass MinIO, das auf Equinix Metal NVMe SSDs in einer Site-to-Site-Replikationskonfiguration ausgeführt wird, Ihnen das gleiche Maß an Leistung, Datenhaltbarkeit und Ausfallsicherheit, wenn nicht sogar mehr, zu einem Bruchteil der Kosten von S3 bietet Behalten Sie die volle Kontrolle über Ihre Cloud.
Haben Sie 100 % Kontrolle über die gesamte Infrastruktur? Nicht ganz. Die Switches, Router und andere Netzwerkgeräte werden von Equinix verwaltet, aber die Vorteile der Verbindung zu ihrem Netzwerk überwiegen die Nachteile. Sie können Punkt-zu-Punkt-, WAN- oder andere dedizierte Leitungen nutzen, um sich virtuell mit jedem anderen Anbieter da draußen zu verbinden. Im Wesentlichen können Sie eine private Verbindung direkt mit AWS verbinden (über Equinix Connect) und dann Ihre Daten zehnmal schneller übertragen, und das bei gleichzeitiger Sicherheit, da sie nicht das offene öffentliche Internet durchquert und nur Ihre Daten durchgelassen werden diese Schaltung.
Darüber hinaus zeigen MinIO- Benchmarks wiederholt eine sehr geringe (<1 %) Verschlechterung der Durchsatzleistung bei aktivierter Verschlüsselung. Daher empfehlen wir, dass alle MinIO-Bereitstellungen die Verschlüsselung im Ruhezustand verwenden und alle MinIO-Bereitstellungen auch die Netzwerkkommunikation mithilfe von TLS sichern sollten. Herzlichen Glückwunsch, jetzt befinden sich Ihre Daten auf einem sichereren und dennoch transparenten System, in dem Sie die volle Kontrolle und Verantwortung haben.
Wenn Sie Fragen zur Migration von AWS S3 zu MinIO auf Equinix Metal haben, wenden Sie sich unbedingt an uns auf Slack !
Auch hier veröffentlicht.