Balanceamento de Carga com Varnish

O que fazer quando as requisições de acesso ao seu site está aumentando e o servidor não está dando conta? mesmo com um servidor de ponta, com um grande poder de processamento e uma grande quantidade de memória eventualmente o hardware chegará ao seu limite devido ao aumento no número de requisições, o que causará a lentidão no acesso ao seu site ou pior o deixando-o fora do ar.

Nessa situação uma boa maneira de aumentar a performance do seu site é utilizar Balanceamento de Carga com Varnish.

A configuração deste exemplo é baseada no balanceamento de carga entre dois servidores, utilizando a técnica de Round-robin.

Primeiramente no arquivo default.vcl iremos declarar dois backends, um para cada servidor que iremos utilizar para realizar o balanceamento.


backend server1 {
  .host = "10.0.0.10";
  .probe = {
                .url = "/";
                .interval = 5s;  # Intervalo de tempo entre as verificações que o varnish realiza.
                .timeout = 1 s; # Tempo mínimo para o servidor responder.
                .window = 5;  # Número de tentativas de acesso.
                .threshold = 3; # Valor mínimo de sucesso de acesso para ser considerado saudável.
  }
}

backend server2 {
  .host = "10.0.0.11";
  .probe = {
                .url = "/";
                .interval = 5s;
                .timeout = 1 s;
                .window = 5;
                .threshold = 3;
  }
}

Criamos dois backends especificando como host o endereço ip de cada servidor e utilizamos a opção probe para especificar os limites de carga para o servidor, perceba que devemos efetuar a mesma configuração de carga para os dois servidores.
Nessa configuração, a cada 5 segundos o varnish irá verificar como está a "saúde" da carga no servidor, caso o servidor demorar mais que 1 segundo para responder a requisição, será considerado falha no acesso. O varnish irá realizar essa verificação 5 vezes,  se dentro desse valor mais de 3 tentativas forem bem sucedidas a carga de acesso no servidor é considerada saudável, não sendo necessário enviar a requisição para o outro servidor.

Agora que nós temos os backends dos servidores configurados, devemos junta-los em um encapsulamento lógico para que o varnish efetue de fato o balanceamento de carga entre eles. Então adicione a seguinte configuração no default.vcl


director balance round-robin {
        {
                .backend = server1;
        }
        {
                .backend = server2;
        }
}

Essa configuração nós definimos um backend virtual lógico, que nomeamos de balance  utilizando o algorítimo round-robin entre o backend do server1 e server2.

Por fim nós vamos direcionar todo o tráfego desses servidores para um único domínio de acesso.
 
sub vcl_recv {
   if (req.http.host ~ "^(www.)?dominio.com.br$") {
       set req.backend = balance;
   }
}

No final das contas seu arquivo default.vcl deverá estar parecido com esse:

backend server1 {
  .host = "10.0.0.10";
  .probe = {
                .url = "/";
                .interval = 5s;
                .timeout = 1 s; 
                .window = 5; 
                .threshold = 3; 
  }
}

backend server2 {
  .host = "10.0.0.11";
  .probe = {
                .url = "/";
                .interval = 5s;
                .timeout = 1 s;
                .window = 5;
                .threshold = 3;
  }
}

director balance round-robin {
        {
                .backend = server1;
        }
        {
                .backend = server2;
        }
}

sub vcl_recv {
   if (req.http.host ~ "^(www.)?dominio.com.br$") {
       set req.backend = balance;
   }
}

E esse um modo simples de realizar o balanceamento de carga entre dois servidores utilizando varnish.

Referência:

https://www.varnish-cache.org/trac/wiki/LoadBalancing 
 

Postado em por Rafael Santos.

Deixe um comentário