BLOG | NGINX

Stockage cloud de niveau entreprise avec NGINX Plus et Minio

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Nitish Tawari
Nitish Tawari
Publié le 19 janvier 2017

Il s'agit d'un article de blog invité de Nitish Tiwari, développeur de logiciels pour Minio , un serveur de stockage d'objets distribué spécialisé dans les applications cloud et l'approche DevOps pour le développement et la livraison d'applications. Les intérêts de Nitish comprennent les infrastructures logicielles, en particulier le stockage et les systèmes distribués.

Dans cet article, Nitish explique comment utiliser NGINX et NGINX Plus comme proxy inverse et équilibreur de charge pour les serveurs Minio. Cet article s'applique également à NGINX et NGINX Plus ; par souci de concision, il fait uniquement référence à NGINX Plus.

Concevoir un stockage d'objets

Presque toutes les applications ont besoin de stockage, mais différentes applications ont besoin du stockage et l'utilisent de manière particulière. Prenons par exemple un magasin de documents : il n'a peut-être pas besoin de répondre à des demandes de lecture fréquentes lorsqu'il est petit, mais il doit évoluer au fil du temps. Une autre application, comme une galerie d’images, doit à la fois répondre rapidement aux demandes et évoluer dans le temps.

Ces nuances rendent la configuration du stockage difficile. Cependant, tout n’est pas sombre : avec l’avènement du stockage d’objets comme moyen par défaut de stocker des données non structurées, HTTP est devenu le mode de communication par défaut, standardisant la façon dont les applications communiquent avec le stockage.

Mais la question demeure : Comment créer une configuration de stockage d’objets adaptée aux besoins de votre application, mais toujours flexible ?

Étant donné que le stockage d’objets implique des serveurs et des clients HTTP, il est logique de disposer d’un serveur Web polyvalent comme NGINX Plus pour gérer le trafic HTTP. Un serveur de stockage d’objets léger tel que Minio peut être utilisé pour fournir un stockage évolutif au niveau du backend. La flexibilité d’un tel système est la clé pour créer un service de niveau entreprise.

NGINX Plus est un équilibreur de charge efficace pour les instances distribuées du serveur de stockage d'objets basé sur le cloud Minio
NGINX Plus met fin aux connexions client SSL/TLS et équilibre la charge des serveurs de stockage cloud Minio

Avec NGINX Plus, les administrateurs peuvent non seulement équilibrer la charge du trafic entrant, mais ils peuvent également mettre en cache, limiter, mettre fin à SSL/TLS et même filtrer le trafic en fonction de divers paramètres. Minio, quant à lui, propose un serveur de stockage d'objets léger compatible avec Amazon S3 .

MinIO est conçu pour le stockage de l'IA et est particulièrement adapté au stockage de données non structurées telles que des photos, des vidéos, des fichiers journaux, des sauvegardes et des images de machines virtuelles et de conteneurs. Le serveur Minio est suffisamment léger pour être fourni avec la pile application , similaire à Node.js, Redis et MySQL. Minio prend également en charge un mode distribué , vous permettant de regrouper plusieurs lecteurs, même sur différentes machines, dans un seul serveur de stockage d'objets.

Dans cet article, nous explorerons certaines des fonctionnalités de NGINX Plus dans divers cas d’utilisation et apprendrons à les combiner avec Minio pour configurer un système de stockage d’objets de qualité professionnelle, hautement évolutif, hautement disponible et stable.

NGINX Plus comme proxy inverse et équilibreur de charge

NGINX Plus est bien connu comme serveur proxy inverse. Mais pourquoi a-t-on besoin d’un proxy inverse pour Minio ? Examinons quelques cas d’utilisation :

  • Avec un proxy inverse NGINX Plus devant un ou plusieurs serveurs Minio, vous avez la liberté de déplacer les instances de serveur Minio vers différentes machines/emplacements au fil du temps, sans avoir à mettre à jour les clients ou les applications.
  • NGINX Plus peut équilibrer la charge du trafic entrant et le répartir uniformément sur les instances de serveur Minio distribuées .
  • Un proxy NGINX Plus peut faire partie d'une configuration de stockage d'objets hautement disponible avec Minio, à l'aide de la commande miroir Minio Client ( mc ).

NGINX Plus reverse proxys le trafic client en transmettant les requêtes à un serveur backend, qui écoute l'URL spécifiée par la directive proxy_pass . Dans l'extrait de configuration suivant, une instance Minio autonome s'exécute sur localhost , elle est donc disponible sur http://localhost:9000 . Toutes les requêtes arrivant sur le port 80 vers le répertoire de niveau supérieur ( / ) sur www.example.com sont transmises à Minio. NGINX Plus définit explicitement l'en-tête Host sur sa valeur dans la demande d'origine.

serveur { écouter 80 ;
nom_serveur www.exemple.com ;

emplacement / {
proxy_set_header Hôte $http_host ;
proxy_pass http://localhost:9000 ;
}
}

Si vous disposez de plusieurs serveurs Minio, équilibrez la charge du trafic entre eux en les répertoriant dans un bloc de configuration en amont et en référençant le groupe en amont dans la directive proxy_pass :

minio_servers en amont { serveur minio-serveur-1 :9000; serveur minio-serveur-2 :9000; } serveur { écoute 80; nom_serveur www.exemple.com; emplacement / { proxy_set_header Hôte $http_host; proxy_pass http:// minio_servers ; } }

Pour plus de détails sur la configuration de NGINX ou NGINX Plus comme proxy pour Minio, consultez la documentation Minio .

Résiliation SSL/TLS

HTTPS devenant désormais le protocole par défaut pour une grande partie du trafic Web, il est logique de déployer un serveur HTTPS, plutôt qu'un simple serveur HTTP, pour Minio. Il est assez simple de configurer NGINX Plus en tant que serveur HTTPS. Vous avez besoin d'un certificat SSL/TLS pour commencer ; Let's Encrypt fournit des certificats SSL/TLS gratuits et s'intègre à NGINX Plus .

L’étape suivante consiste à modifier le fichier de configuration NGINX Plus. Ici, vous devez spécifier le paramètre ssl de la directive listen dans le bloc serveur , puis spécifier les fichiers contenant le certificat du serveur et la clé privée :

serveur { écouter 80; nom_serveur www.exemple.com; retourner 301 https://www.exemple.com$request_uri; } serveur { écouter 443 ssl ; nom_serveur www.exemple.com; certificat_ssl www.exemple.com.crt; clé_certificat_ssl www.exemple.com.key ; protocoles_ssl TLSv1 TLSv1.1 TLSv1.2; chiffrements_ssl HIGH:!aNULL:!MD5; emplacement / { proxy_set_header Hôte $http_host; proxy_pass http://localhost:9000; } }

Pour plus d'informations sur la terminaison SSL/TLS, consultez le Guide d'administration NGINX Plus .

Mise en cache

Les serveurs de stockage d’objets ne sont pas connus pour leur vitesse, mais cela ne signifie pas nécessairement des réponses lentes aux clients. Lorsque vous activez la mise en cache sur le serveur NGINX Plus, il enregistre les données fréquemment consultées qu'il peut renvoyer immédiatement au client sans avoir à transmettre la demande au serveur principal.

Voici comment cela fonctionne. Le cache Web NGINX Plus se trouve entre un client et Minio, enregistrant une copie de chaque fichier de contenu demandé. Lorsqu'un client demande du contenu stocké dans le cache, NGINX Plus le renvoie directement, sans contacter Minio. Cela améliore à la fois le temps de réponse du client et réduit la charge sur le serveur Minio.

Vous configurez le cache NGINX Plus pour Minio avec les directives proxy_cache_path et proxy_cache . La directive proxy_cache_path définit l'emplacement et la configuration du cache, et la directive proxy_cache l'active. Pour plus de détails, consultez Guide de mise en cache avec NGINX et NGINX Plus .

proxy_cache_path /chemin/vers/cache niveaux=1:2 clés_zone=mon_cache:10m taille_max=10g inactif=60m use_temp_path=désactivé ; serveur { # ... emplacement / { proxy_cache mon_cache ; proxy_set_header Hôte $http_host; proxy_pass http://localhost:9000; } }

Étranglement

Parfois, vous devez limiter les demandes pour des raisons commerciales ou de sécurité. Avec NGINX Plus, vous pouvez limiter la bande passante disponible, le nombre de requêtes ou le nombre de connexions.

Pour limiter la bande passante, utilisez la directive limit_rate . Cet exemple limite la vitesse de téléchargement à 200 Ko par seconde :

serveur { # ... emplacement /images/ { limit_rate 200k ; # ... } }

Pour limiter les requêtes, utilisez les directives limit_req et limit_req_zone , comme dans cet exemple qui limite chaque adresse IP unique à 10 requêtes par seconde tout en autorisant des rafales de 20 requêtes.

limite_req_zone $binary_remote_addr zone=my_req_limit:10m débit=10r/s ; serveur { # ... emplacement /images/ { limite_req zone=my_req_limit burst=20 ; # ... } }

Pour limiter le nombre de connexions, utilisez les directives limit_conn et limit_conn_zone . Cet exemple limite chaque adresse IP unique à 5 connexions simultanées.

limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m ; serveur { # ... emplacement /images/ { limit_conn my_conn_limit 5 ; # ... } }

Pour plus de détails, consultez le Guide d'administration NGINX Plus .

Résumé

Dans cet article, nous avons démontré l’utilisation de plusieurs fonctionnalités de NGINX Plus pour l’équilibrage de charge, en particulier pour l’équilibrage de charge devant un serveur de stockage d’objets Minio. La combinaison de NGINX Plus et Minio vous permet de configurer un serveur de stockage d'objets flexible adapté aux besoins de votre application.

Pour en savoir plus sur l'équilibrage de charge avec NGINX Plus, consultez ces articles de blog et d'autres ressources :

 

Pour essayer NGINX Plus par vous-même, démarrez votre essai gratuit de 30 jours dès aujourd'hui ou contactez-nous pour discuter de vos cas d'utilisation .


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."