BLOG | NGINX

Armazenamento em nuvem de nível empresarial com NGINX Plus e Minio

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Nitish Tawari
Nitish Tawari
Publicado em 19 de janeiro de 2017

Esta é uma postagem de blog convidada de Nitish Tiwari, um desenvolvedor de software para Minio , um servidor de armazenamento de objetos distribuídos especializado em aplicativos em nuvem e na abordagem DevOps para desenvolvimento e entrega de aplicativos. Os interesses da Nitish incluem infraestrutura baseada em software, especialmente armazenamento e sistemas distribuídos.

Nesta postagem, Nitish explica como usar o NGINX e o NGINX Plus como proxy reverso e balanceador de carga para servidores Minio. A postagem se aplica igualmente ao NGINX e ao NGINX Plus; por questões de brevidade, ela se refere apenas ao NGINX Plus.

Projetando Armazenamento de Objetos

Quase todos os aplicativos precisam de armazenamento, mas diferentes aplicativos precisam e usam o armazenamento de maneiras específicas. Tomemos como exemplo um armazenamento de documentos: ele pode não precisar atender a solicitações de leitura frequentes quando pequeno, mas precisa ser dimensionado com o passar do tempo. Outro aplicativo, como uma galeria de imagens, precisa atender às solicitações rapidamente e ser escalonado com o tempo.

Essas nuances dificultam a configuração do armazenamento. No entanto, nem tudo são flores: com o advento do armazenamento de objetos como a maneira padrão de armazenar dados não estruturados, o HTTP se tornou o modo de comunicação padrão, padronizando como os aplicativos se comunicam com o armazenamento.

Ainda assim, a questão permanece: Como você cria uma configuração de armazenamento de objetos que seja adaptada aos requisitos do seu aplicativo, mas ainda flexível?

Como o armazenamento de objetos envolve servidores e clientes HTTP, faz sentido ter um servidor web versátil como o NGINX Plus na frente para lidar com o tráfego HTTP. Um servidor de armazenamento de objetos leve, como o Minio, pode ser usado para fornecer armazenamento escalável no backend. A flexibilidade de tal sistema é a chave para criar um serviço de nível empresarial.

O NGINX Plus é um balanceador de carga eficaz para instâncias distribuídas do servidor de armazenamento de objetos baseado em nuvem Minio
O NGINX Plus encerra conexões de cliente SSL/TLS e balanceia a carga de servidores de armazenamento em nuvem Minio

Com o NGINX Plus, os administradores não só podem balancear a carga do tráfego de entrada, como também podem armazenar em cache, limitar, encerrar SSL/TLS e até mesmo filtrar o tráfego com base em vários parâmetros. O Minio, por outro lado, oferece um servidor de armazenamento de objetos leve que é compatível com o Amazon S3 .

O MinIO foi criado para armazenamento de IA e é mais adequado para armazenar dados não estruturados, como fotos, vídeos, arquivos de log, backups e imagens de VM e contêiner. O servidor Minio é leve o suficiente para ser empacotado com a pilha de aplicativos, semelhante ao Node.js, Redis e MySQL. O Minio também oferece suporte a um modo distribuído , permitindo que você agrupe várias unidades, mesmo em máquinas diferentes, em um único servidor de armazenamento de objetos.

Nesta postagem, exploraremos alguns dos recursos do NGINX Plus em vários casos de uso e aprenderemos como combiná-los com o Minio para configurar um sistema de armazenamento de objetos de nível de produção, altamente escalável, altamente disponível e estável.

NGINX Plus como um proxy reverso e balanceador de carga

O NGINX Plus é bem conhecido como um servidor proxy reverso. Mas por que é necessário um proxy reverso para o Minio? Vejamos alguns casos de uso:

  • Com um proxy reverso NGINX Plus na frente de um ou mais servidores Minio, você tem a liberdade de mover instâncias do servidor Minio para diferentes máquinas/locais ao longo do tempo, sem precisar atualizar clientes ou aplicativos.
  • O NGINX Plus pode balancear a carga do tráfego de entrada e distribuí-lo uniformemente entre instâncias distribuídas do servidor Minio .
  • Um proxy NGINX Plus pode fazer parte de uma configuração de armazenamento de objetos de alta disponibilidade com o Minio, usando o comando de espelhamento do Minio Client ( mc ).

O NGINX Plus faz proxy reverso do tráfego do cliente passando solicitações para um servidor de backend, que está escutando na URL especificada pela diretiva proxy_pass . No snippet de configuração a seguir, uma instância autônoma do Minio está sendo executada no localhost , portanto, está disponível em http://localhost:9000 . Todas as solicitações recebidas na porta 80 para o diretório de nível superior ( / ) em www.example.com são passadas para o Minio. O NGINX Plus define explicitamente o cabeçalho do Host para seu valor na solicitação original.

servidor { ouvir 80;
nome_do_servidor www.example.com;

localização / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
}

Se você tiver vários servidores Minio, balanceie a carga do tráfego entre eles listando-os em um bloco de configuração upstream e referenciando o grupo upstream na diretiva proxy_pass :

upstream minio_servers { servidor minio-server-1 :9000; servidor minio-server-2 :9000; } servidor { ouvir 80; nome_do_servidor www.example.com; localização / { proxy_set_header Host $http_host; proxy_pass http:// minio_servers ; } }

Para obter mais detalhes sobre como configurar o NGINX ou o NGINX Plus como um proxy para o Minio, consulte a documentação do Minio .

Encerramento do SSL/TLS

Com o HTTPS se tornando o protocolo padrão para grande parte do tráfego da web, faz sentido implantar um servidor HTTPS, em vez de simplesmente um servidor HTTP, para o Minio. É bastante fácil configurar o NGINX Plus como um servidor HTTPS. Você precisa de um certificado SSL/TLS para começar; o Let's Encrypt fornece certificados SSL/TLS gratuitos e se integra ao NGINX Plus .

O próximo passo é editar o arquivo de configuração do NGINX Plus. Aqui você precisa especificar o parâmetro ssl para a diretiva listen no bloco server e, em seguida, especificar os arquivos que contêm o certificado do servidor e a chave privada :

servidor { ouvir 80; nome_do_servidor www.exemplo.com; retornar 301 https://www.exemplo.com$request_uri; } servidor { ouvir 443 ssl ; nome_do_servidor www.exemplo.com; certificado_ssl www.exemplo.com.crt; chave_do_certificado_ssl www.exemplo.com.chave ; protocolos_ssl TLSv1 TLSv1.1 TLSv1.2; cifras_ssl ALTO:!aNULL:!MD5; localização / { cabeçalho_do_conjunto_de_proxy Host $http_host; senha_do_proxy http://localhost:9000; } }

Para obter mais informações sobre a terminação SSL/TLS, consulte o Guia de administração do NGINX Plus .

Cache

Os servidores de armazenamento de objetos não são conhecidos por sua velocidade, mas isso não significa necessariamente respostas lentas aos clientes. Ao habilitar o cache no servidor NGINX Plus, ele salva dados acessados com frequência, que podem ser retornados ao cliente imediatamente, sem precisar encaminhar a solicitação ao servidor de back-end.

Veja como funciona. O cache da web NGINX Plus fica entre um cliente e o Minio, salvando uma cópia de cada arquivo de conteúdo solicitado. Quando um cliente solicita conteúdo armazenado no cache, o NGINX Plus o retorna diretamente, sem entrar em contato com o Minio. Isso melhora o tempo de resposta ao cliente e reduz a carga no servidor Minio.

Você configura o cache do NGINX Plus para Minio com as diretivas proxy_cache_path e proxy_cache . A diretiva proxy_cache_path define a localização e a configuração do cache, e a diretiva proxy_cache o ativa. Para obter detalhes, consulte Um guia para cache com NGINX e NGINX Plus .

proxy_cache_path /caminho/para/o/cache levels=1:2 keys_zone=meu_cache:10m max_size=10g inativo=60m use_temp_path=off ; server { # ... location / { proxy_cache meu_cache ; proxy_set_header Host $http_host; proxy_pass http://localhost:9000; } }

Aceleração

Às vezes, você precisa limitar solicitações por motivos comerciais ou de segurança. Com o NGINX Plus, você pode limitar a largura de banda disponível, o número de solicitações ou o número de conexões.

Para limitar a largura de banda, use a diretiva limit_rate . Este exemplo limita a velocidade de download a 200 KB por segundo:

servidor { # ... localização /imagens/ { taxa_limite 200k ; # ... } }

Para limitação de solicitações, use as diretivas limit_req e limit_req_zone , como neste exemplo, que limita cada endereço IP exclusivo a 10 solicitações por segundo, permitindo rajadas de 20 solicitações.

limit_req_zone $binary_remote_addr zone=meu_limite_de_req:10m rate=10r/s ; server { # ... location /images/ { limit_req zone=meu_limite_de_req burst=20 ; # ... } }

Para limitar o número de conexões, use as diretivas limit_conn e limit_conn_zone . Este exemplo limita cada endereço IP exclusivo a 5 conexões simultâneas.

limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m ; servidor { # ... localização /imagens/ { limit_conn my_conn_limit 5 ; # ... } }

Para mais detalhes, consulte o Guia de administração do NGINX Plus .

Resumo

Nesta postagem, demonstramos o uso de vários recursos do NGINX Plus para balanceamento de carga em particular, para balanceamento de carga na frente de um servidor de armazenamento de objetos Minio. A combinação do NGINX Plus e do Minio permite que você configure um servidor de armazenamento de objetos flexível e adaptado às necessidades do seu aplicativo.

Para mais informações sobre balanceamento de carga com o NGINX Plus, consulte estas postagens de blog e outros recursos:

 

Para experimentar o NGINX Plus, comece hoje mesmo seu teste gratuito de 30 dias ou entre em contato conosco para discutir seus casos de uso .


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."