BLOG | NGINX

Cloud-Speicher der Enterprise-Klasse mit NGINX Plus und Minio

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Nitish Tawari Miniaturbild
Nitish Tawari
Veröffentlicht am 19. Januar 2017

Dies ist ein Gastblogbeitrag von Nitish Tiwari, einem Softwareentwickler für Minio , einem verteilten Objektspeicherserver, der auf Cloud-Anwendungen und den DevOps- Ansatz für die App-Entwicklung und -Bereitstellung spezialisiert ist. Zu Nitishs Interessen zählen softwarebasierte Infrastrukturen, insbesondere Speicher und verteilte Systeme.

In diesem Beitrag erklärt Nitish, wie man NGINX und NGINX Plus als Reverse-Proxy und Load Balancer für Minio-Server verwendet. Der Beitrag gilt gleichermaßen für NGINX und NGINX Plus; der Kürze halber bezieht er sich nur auf NGINX Plus.

Entwerfen eines Objektspeichers

Fast alle Anwendungen benötigen Speicher, aber verschiedene Apps brauchen und nutzen Speicher auf besondere Weise. Nehmen wir beispielsweise einen Dokumentspeicher: Dieser muss in kleinen Mengen möglicherweise nicht häufige Leseanforderungen verarbeiten, muss aber mit der Zeit skaliert werden. Eine andere Anwendung, beispielsweise eine Bildergalerie, muss sowohl Anfragen schnell erfüllen als auch mit der Zeit skalierbar sein.

Diese Nuancen erschweren die Speichereinrichtung. Es ist jedoch nicht alles düster – mit dem Aufkommen der Objektspeicherung als Standardmethode zum Speichern unstrukturierter Daten hat sich HTTP zum Standardkommunikationsmodus entwickelt und standardisiert die Art und Weise, wie Anwendungen mit dem Speicher kommunizieren.

Dennoch bleibt die Frage: Wie erstellen Sie ein Objektspeicher-Setup, das auf Ihre Anwendungsanforderungen zugeschnitten und dennoch flexibel ist?

Da die Objektspeicherung HTTP-Server und -Clients umfasst, ist es sinnvoll, für die Abwicklung des HTTP-Verkehrs einen vielseitigen Webserver wie NGINX Plus vorzuschalten. Ein leichter Objektspeicherserver wie Minio kann verwendet werden, um skalierbaren Speicher im Backend bereitzustellen. Die Flexibilität eines solchen Systems ist der Schlüssel zur Schaffung eines Dienstes auf Unternehmensebene.

NGINX Plus ist ein effektiver Load Balancer für verteilte Instanzen des Cloud-basierten Objektspeicherservers Minio
NGINX Plus beendet SSL/TLS-Clientverbindungen und führt einen Lastausgleich für Minio-Cloud-Speicherserver durch

Mit NGINX Plus können Administratoren nicht nur die Last des eingehenden Datenverkehrs ausgleichen – sie können den Datenverkehr zwischenspeichern, drosseln, SSL/TLS beenden und sogar anhand verschiedener Parameter filtern. Minio hingegen bietet einen leichten Objektspeicherserver, der mit Amazon S3 kompatibel ist.

MinIO wurde für die KI-Speicherung entwickelt und eignet sich am besten zum Speichern unstrukturierter Daten wie Fotos, Videos, Protokolldateien, Backups sowie VM- und Container-Images. Der Minio-Server ist leicht genug, um mit dem Application gebündelt zu werden, ähnlich wie Node.js, Redis und MySQL. Minio unterstützt auch einen verteilten Modus , mit dem Sie mehrere Laufwerke – auch auf verschiedenen Maschinen – in einem einzigen Objektspeicherserver zusammenfassen können.

In diesem Beitrag untersuchen wir einige der Funktionen von NGINX Plus in verschiedenen Anwendungsfällen und erfahren, wie Sie sie mit Minio kombinieren, um ein produktionsreifes, hoch skalierbares, hochverfügbares und stabiles Objektspeichersystem einzurichten.

NGINX Plus als Reverse-Proxy und Load Balancer

NGINX Plus ist als Reverse-Proxy-Server bekannt. Aber warum braucht man einen Reverse-Proxy für Minio? Schauen wir uns einige Anwendungsfälle an:

  • Mit einem NGINX Plus-Reverseproxy vor einem oder mehreren Minio-Servern haben Sie die Freiheit, Minio-Serverinstanzen im Laufe der Zeit auf andere Maschinen/Standorte zu verschieben, ohne Clients oder Anwendungen aktualisieren zu müssen.
  • NGINX Plus kann die Last des eingehenden Datenverkehrs ausgleichen und ihn gleichmäßig auf verteilte Minio-Serverinstanzen verteilen.
  • Ein NGINX Plus-Proxy kann mithilfe des Minio Client-Befehls ( mc ) „Mirror“ Teil eines hochverfügbaren Objektspeicher-Setups mit Minio sein.

NGINX Plus leitet den Client-Datenverkehr über einen Reverse-Proxy weiter, indem es Anforderungen an einen Backend-Server weiterleitet, der auf der durch die Direktive „proxy_pass“ angegebenen URL lauscht. Im folgenden Konfigurationsausschnitt wird eine eigenständige Minio-Instanz auf localhost ausgeführt und ist daher unter http://localhost:9000 verfügbar. Alle über Port 80 eingehenden Anfragen an das oberste Verzeichnis ( / ) unter www.example.com werden an Minio weitergeleitet. NGINX Plus setzt den Host- Header explizit auf seinen Wert in der ursprünglichen Anfrage.

Server { listen 80;
Servername www.example.com;

Standort / {
Proxy_Set_Header Host $http_host;
Proxy_Pass http://localhost:9000;
}
}

Wenn Sie über mehrere Minio-Server verfügen, verteilen Sie den Datenverkehr zwischen ihnen, indem Sie sie in einem Upstream- Konfigurationsblock auflisten und in der Proxy_pass- Direktive auf die Upstream-Gruppe verweisen:

upstream minio_servers { Server minio-server-1 :9000; Server minio-server-2 :9000; } Server { abhören 80; Servername www.example.com; Standort / { Proxy_Set_Header Host $http_host; Proxy_Passwort http:// minio_servers ; } }

Weitere Einzelheiten zum Einrichten von NGINX oder NGINX Plus als Proxy für Minio finden Sie in der Minio-Dokumentation .

SSL/TLS-Terminierung

Da HTTPS mittlerweile für einen Großteil des Webverkehrs zum Standardprotokoll wird, ist es sinnvoll, für Minio einen HTTPS-Server und nicht nur einen HTTP-Server bereitzustellen. Es ist ziemlich einfach, NGINX Plus als HTTPS-Server einzurichten. Sie benötigen zum Einstieg ein SSL/TLS-Zertifikat. Let’s Encrypt bietet kostenlose SSL/TLS-Zertifikate und lässt sich in NGINX Plus integrieren .

Der nächste Schritt besteht darin, die NGINX Plus-Konfigurationsdatei zu bearbeiten. Hier müssen Sie den SSL- Parameter für die Listen -Direktive im Serverblock angeben und dann die Dateien angeben, die das Serverzertifikat und den privaten Schlüssel enthalten:

Server { abhören 80; Servername www.example.com; return 301 https://www.example.com$request_uri; } Server { abhören 443 SSL; Servername www.example.com; SSL-Zertifikat www.example.com.crt; SSL-Zertifikatsschlüssel www.example.com.key ; SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2; SSL-Chiffren HIGH:!aNULL:!MD5; Standort / { Proxy-Set-Header Host $http_host; Proxy-Passwort http://localhost:9000; } }

Weitere Informationen zur SSL/TLS-Terminierung finden Sie im NGINX Plus Admin Guide .

Zwischenspeicherung

Objektspeicherserver sind nicht für ihre Geschwindigkeit bekannt, aber das muss nicht bedeuten, dass die Reaktionen auf die Clients langsam sind. Wenn Sie das Caching auf dem NGINX Plus-Server aktivieren, speichert dieser häufig abgerufene Daten und kann diese sofort an den Client zurückgeben, ohne die Anforderung an den Back-End-Server weiterleiten zu müssen.

So funktioniert es. Der NGINX Plus-Webcache befindet sich zwischen einem Client und Minio und speichert eine Kopie jeder angeforderten Inhaltsdatei. Wenn ein Client Inhalte anfordert, die im Cache gespeichert sind, gibt NGINX Plus diese direkt zurück, ohne Kontakt mit Minio aufzunehmen. Dadurch wird die Antwortzeit des Clients verbessert und die Belastung des Minio-Servers verringert.

Sie richten den NGINX Plus-Cache für Minio mit den Anweisungen proxy_cache_path und proxy_cache ein. Die Direktive „proxy_cache_path“ legt den Speicherort und die Konfiguration des Caches fest und die Direktive „proxy_cache“ aktiviert ihn. Weitere Einzelheiten finden Sie im Leitfaden zum Caching mit NGINX und NGINX Plus .

proxy_cache_path /Pfad/zum/Cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off ; Server { # ... Standort / { proxy_cache my_cache ; proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }

Drosselung

Manchmal müssen Sie Anfragen aus geschäftlichen oder Sicherheitsgründen drosseln. Mit NGINX Plus können Sie die verfügbare Bandbreite, die Anzahl der Anfragen oder die Anzahl der Verbindungen begrenzen.

Um die Bandbreite zu drosseln, verwenden Sie die Direktive „limit_rate“ . Dieses Beispiel begrenzt die Downloadgeschwindigkeit auf 200 KB pro Sekunde:

Server { # ... Standort /Bilder/ { Limit_Rate 200k ; # ... } }

Verwenden Sie zur Anforderungsdrosselung die Anweisungen limit_req und limit_req_zone , wie in diesem Beispiel, das jede eindeutige IP-Adresse auf 10 Anforderungen pro Sekunde begrenzt, aber gleichzeitig Bursts von 20 Anforderungen zulässt.

limit_req_zone $binary_remote_addr zone=mein_req_limit:10m Rate=10r/s ; Server { # ... Standort /Bilder/ { limit_req zone=mein_req_limit Burst=20 ; # ... } }

Um die Anzahl der Verbindungen zu drosseln, verwenden Sie die Anweisungen limit_conn und limit_conn_zone . Dieses Beispiel begrenzt jede eindeutige IP-Adresse auf 5 gleichzeitige Verbindungen.

limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m ; Server { # ... Standort /Bilder/ { limit_conn my_conn_limit 5 ; # ... } }

Weitere Einzelheiten finden Sie im NGINX Plus-Administratorhandbuch .

Zusammenfassung

In diesem Beitrag haben wir die Verwendung mehrerer NGINX Plus-Funktionen zum Lastenausgleich demonstriert – insbesondere zum Lastenausgleich vor einem Minio-Objektspeicherserver. Die Kombination aus NGINX Plus und Minio ermöglicht Ihnen die Einrichtung eines flexiblen Objektspeicherservers, der auf Ihre Anwendungsanforderungen zugeschnitten ist.

Weitere Informationen zum Lastenausgleich mit NGINX Plus finden Sie in diesen Blogbeiträgen und anderen Ressourcen:

 

Um NGINX Plus selbst auszuprobieren, starten Sie noch heute Ihre kostenlose 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen .


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."