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