NGINX Open Source com Balanceamento de Carga e Persistência de Sessão

Atualmente, a maioria dos sistemas disponíveis na Internet são críticos e precisam ficar online todo o tempo. O Balanceamento de Carga é uma opção para que os serviços fiquem disponíveis com uma Alta Disponibilidade e o NGINX Open Source se mostra uma excelente escolha para tal cenário.

[ Hits: 9.891 ]

Por: Fabiano Furtado em 29/09/2016


Introdução



A Alta Disponibilidade (High Availability ou HA) é um recurso essencial para os serviços disponibilizados na Internet. Uma das formas de se ter HA é utilizarmos o recurso de balanceamento de carga (Load Balancing ou LB) em vários servidores backend.

O NGINX[1] Open Source já possui uma solução de LB[2] nativa através da utilização de algumas diretrizes especiais como o ip_hash[3]. Esta solução inclusive oferece o recurso de persistência de sessão[4], porém ela definitivamente não pode ser considerada um LB eficiente, pois quando diversos clientes estão atrás de um NAT[5] ou proxy ela se tornará um grande problema.

Ou seja, em um cenário onde poderemos ter vários clientes acessando nosso servidor com o mesmo endereço IP e o balanceamento de carga é feito tomando como base o endereço IP de origem, a carga não será distribuída de maneira homogênea entre os servidores backend, o que comprometerá toda a solução.

A partir da versão 1.7.2 do NGINX Open Source, a diretiva hash[6] foi disponibilizada e podemos utilizá-la em conjunto com outras configurações para obtermos o resultado almejado.

Como funciona

Toda a lógica é baseada na configuração abaixo, a qual será explanada ao longo do artigo.

1	upstream us_backend {
2	  hash $upstream_grp;
3	  server backend1;
4	  server backend2;
5	}
6
7	split_clients "client${remote_addr}${http_user_agent}${date_gmt}" $upstream_var {
8	  50.0%   "backend1";
9	  *       "backend2";
10	}
11
12	map $cookie_route $upstream_grp {
13	  default         $upstream_var;
14	  "backend1"      "backend1";
15	  "backend2"      "backend2";
16	}
17
18	server {
19	   listen       80;
20	   server_name  apptest;
21
22	   location / {
23	      add_header Set-Cookie 'route=$upstream_grp;Path=/;HttpOnly';
24	      proxy_pass http://us_backend;
25	   }
26	}

    Próxima página

Páginas do artigo
   1. Introdução
   2. Primeiro acesso do cliente: recebendo o cookie "route" do servidor
   3. Colocando o servidor backend em manutenção: Minimizando a perda de sessão
   4. Aumentando a segurança
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Torne-se um DJ usando Linux

Como instalar o SopCast e sua interface QT no Linux

Instalando ou atualizando o seu KDE

Formatação especial no Open Office

Programação: Uso de funções

  
Comentários
[1] Comentário enviado por mpsnet em 30/09/2016 - 10:42h

Parabéns pelo artigo.
Pretendo utilizar seu artigo para aprimorar meu sistema. Mas desculpe minha ignorância;
- como configuro os outros backends (tem que instalar o nginx neles) ?
- como faço para configurar/gerar o hash nos backends ?

Grato

[2] Comentário enviado por fusca em 30/09/2016 - 13:06h

Obrigado mpsnet!

Olha... não existe ignorância. Ninguém nasce sabendo de nada. Basta um pouco de estudo, dedicação e compromisso com aquilo que se deseja alcançar que a sabedoria aparece.

Sobre a primeira pergunta, os backends não precisam do NGINX. Por se tratar de um proxy reverso, somente a borda precisa dele instalado. No NGINX, basta colocar mais backend na conf, exemplo... backend3, backend4, ....

Em relação à outra dúvida, o HASH é utilizado para "esconder" o nome real dos seus backends. Você pode usar qualquer nome (exemplo: b1, b2, b3, ...), mas, por questões de segurança, sugiro você usar um HASH, pois o mesmo aparece no cookie enviado para o cliente. No Linux, vc pode usar o comando "sha1sum" ou "sha224sum" ou "sha256sum" ou "sha384sum" ou "sha512sum" para gerar o HASH.

Espero ter ajudado.


[1] Comentário enviado por mpsnet em 30/09/2016 - 10:42h

Parabéns pelo artigo.
Pretendo utilizar seu artigo para aprimorar meu sistema. Mas desculpe minha ignorância;
- como configuro os outros backends (tem que instalar o nginx neles) ?
- como faço para configurar/gerar o hash nos backends ?

Grato

[3] Comentário enviado por mpsnet em 30/09/2016 - 13:37h

Ajudou sim
Obrigado

[4] Comentário enviado por rdgovieira em 16/06/2018 - 13:24h

Muito bom o artigo, consegui entender e aplicar na minha infraestrutura com sucesso.
Muito obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts