1 minuto(s) de leitura

Hoje vou mostrar um recurso interessante do Nginx para balanceamento de carga. O Nginx possui suporte para três mecanismos de balanceamento de carga:

– round-robin: As requisições são distribuidas no modelo round-robin onde a distribuição é feita de forma circular entre os parcicipantes do conjunto. Ou seja, se tivermos dois componentes, funciona assim: 1 – 2 – 1 – 2… Se tivermos três, temos o seguinte funcionamento: 1 – 2 – 3 – 1 – 2 – 3… O round-robin é o modelo padrão de funcionamento;

– least-connected: A próxima requisição é direcionada para o componente com o menor número de conexões ativas;

– ip-hash: Usado para distribuir as requisições entre os componentes de baseado no endereço IP do cliente que origina a requisição.

Eu não vou entrar em configurações mais complexas e caso esteja interessado em se aprofundar mais no assunto, e ver outras opções disponíveis como por exemplo atribuição de peso em servidores, slow start, persistência de sessão, limite de conexões, healthcheck e etc, visite: http://nginx.com/resources/admin-guide/load-balancer/

Um cenário real seria um servidor com o Nginx instalado servindo como loadbalancer, distribuindo a carga entre dois servidores web, como no exemplo abaixo:

lb

Como neste laboratório não temos dois servidores, cada um com seu respectivo endereço IP, vou direcionar as requisições feitas para loadbalancer.ricardomartins.com.br para dois outros sites via round-robin (no caso para distrowatch.com e br-linux.org) apenas para demonstrar o funcionamento.

Vou fazer assim pois não adiantaria criar outros dois hosts virtuais (server1.ricardomartins.com.br e server2.ricardomartins.com.br) na mesma máquina uma vez que o balanceamento não funcionaria por estarem sob o mesmo endereço IP do próprio loadbalancer.ricardomartins.com.br.

Em um cenário real, deveria apontar para outros dois servidores web com o mesmo conteúdo, para efetivamente distribuir a carga dois servidores que estejam servindo o mesmo site/conteúdo.

Abaixo a configuração do /etc/nginx/conf.d/loadbalancer.conf

server {  
  listen 80;  
  server_name loadbalancer.ricardomartins.com.br;  
  location / {  
  proxy_pass http://ricardo;  
  }   
}

upstream ricardo {  
  server br-linux.org;  
  server distrowatch.com;  
}  

Desta forma, quando chamar loadbalancer.ricardomartins.com.br, como estou usando a configuração padrão de round-robin, cada hora estarei sendo direcionado para um servidor, no nosso caso, para br-linux.org e distrowatch.com. Vejam o teste:

* Caso queira saber como fazer balanceamento com o HAProxy, veja aqui: http://www.ricardomartins.com.br/balanceamento-de-carga-com-haproxy/

Tags:

Atualizado em:

Deixe um comentário