Instalando o balanceador de carga HAProxy no CentOS

A tradução do artigo foi preparada em antecipação ao início do curso «Administrador Linux. Virtualização e Clusterização»

Instalando o balanceador de carga HAProxy no CentOS

O balanceamento de carga é uma solução comum para escalonamento horizontal de aplicativos web em vários hosts, proporcionando aos usuários um único ponto de acesso ao serviço. HAProxy é um dos programas de balanceamento de carga de código aberto mais populares, que também oferece alta disponibilidade e funcionalidade de proxy.

O HAProxy busca otimizar o uso de recursos, maximizar a largura de banda, minimizar o tempo de resposta e evitar a sobrecarga de cada recurso individual. Ele pode ser instalado em várias distribuições Linux, como CentOS 8, que abordaremos neste guia, assim como em sistemas Debian 8 e Ubuntu 16.

Instalando o balanceador de carga HAProxy no CentOS

O HAProxy é especialmente adequado para sites com tráfego extremamente alto e, por isso, é frequentemente utilizado para aumentar a confiabilidade e o desempenho de configurações de serviços web com vários servidores. Este guia descreve os passos para configurar o HAProxy como balanceador de carga em um host em nuvem CentOS 8, que então direciona o tráfego para seus servidores web.

Como condição necessária para alcançar os melhores resultados, você deve ter pelo menos dois servidores web e um servidor para balanceamento de carga. Os servidores web devem ter pelo menos um serviço web básico em execução, como nginx ou httpd, para que seja possível verificar o balanceamento de carga entre eles.

Instalação do HAProxy no CentOS 8

Devido ao fato de que o HAProxy é um aplicativo de código aberto em rápida evolução, a distribuição disponível em seus repositórios padrão do CentOS pode não ser a versão mais recente. Para saber a versão atual, execute o seguinte comando:

sudo yum info haproxy

O HAProxy sempre oferece três versões estáveis para escolha: as duas versões mais recentes suportadas e uma terceira, mais antiga, que ainda recebe atualizações críticas. Você pode sempre verificar a versão estável mais recente indicada no site do HAProxy e, em seguida, decidir com qual versão deseja trabalhar.

Neste guia, instalaremos a versão estável mais recente 2.0, que ainda não estava disponível nos repositórios padrão no momento da redação deste guia. Você precisará instalá-la a partir da fonte. Mas primeiro, verifique se você atende aos requisitos necessários para baixar e compilar o programa.

sudo yum install gcc pcre-devel tar make -y

Baixe o código-fonte usando o comando abaixo. Você pode verificar se existe uma versão mais nova disponível em página de download do HAProxy.

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Após o download ser concluído, descompacte os arquivos usando o comando abaixo:

tar xzvf ~/haproxy.tar.gz -C ~/

Vá para o diretório descompactado com os arquivos fonte:

cd ~/haproxy-2.0.7

Em seguida, compile o programa para o seu sistema:

make TARGET=linux-glibc

E, finalmente, instale o próprio HAProxy:

sudo make install

Agora o HAProxy está instalado, mas algumas manipulações adicionais são necessárias para que ele funcione. Continuaremos a configuração do software e serviços abaixo.

Configuração do HAProxy para o seu servidor

Agora adicione os seguintes diretórios e arquivo de estatísticas para os registros do HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

Crie um link simbólico para os arquivos binários, para que você possa executar comandos do HAProxy como usuário comum:

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Se você deseja adicionar o servidor proxy ao sistema como um serviço, copie o arquivo haproxy.init do diretório examples para o seu diretório /etc/init.d. Edite as permissões do arquivo, para que o script possa ser executado, e então recarregue o daemon systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

Você também precisa permitir que o serviço reinicie automaticamente na inicialização do sistema:

sudo chkconfig haproxy on

Para maior conveniência, também é recomendável adicionar um novo usuário para executar o HAProxy:

sudo useradd -r haproxy

Depois disso, você pode verificar novamente o número da versão instalada usando o seguinte comando:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

No nosso caso, a versão deve ser 2.0.7, conforme mostrado no exemplo de saída acima.

Finalmente, o firewall no CentOS 8 é bastante restritivo por padrão para este projeto. Use os comandos a seguir para permitir os serviços necessários e reiniciar o firewall:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Configuração do balanceador de carga

Configurar o HAProxy é um processo bastante simples. Na verdade, tudo que você precisa fazer é informar ao HAProxy quais conexões ele deve escutar e para onde deve redirecioná-las.

Isso é feito criando um arquivo de configuração /etc/haproxy/haproxy.cfg com as configurações necessárias. Você pode ler sobre os parâmetros de configuração do HAProxy na página de documentação, se quiser saber mais sobre isso.

Balanceamento de carga na camada de transporte (layer 4)

Começaremos com uma configuração básica. Crie um novo arquivo de configuração, por exemplo, usando vi com o seguinte comando:

sudo vi /etc/haproxy/haproxy.cfg

Adicione as seguintes seções ao arquivo. Substitua server_name pelo que deve chamar seus servidores na página de estatísticas, e private_ip pelos IPs privados dos servidores para os quais você deseja direcionar o tráfego da web. Você pode verificar os IPs privados no painel de controle da UpCloud e na aba Rede privada no menu Rede.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Isso define um balanceador de carga na camada de transporte (layer 4) com o nome externo http_front, escutando a porta 80, que então redireciona o tráfego para o backend padrão chamado http_back. Estatísticas adicionais em /haproxy?stats conectam à página de estatísticas no endereço especificado.

Vários algoritmos de balanceamento de carga.

Especificar os servidores na seção de backend permite que o HAProxy utilize esses servidores para balanceamento de carga de acordo com o algoritmo de round-robin, quando possível.

Os algoritmos de balanceamento são usados para determinar a qual servidor no backend cada conexão é passada. Aqui estão algumas opções úteis:

  • Roundrobin: cada servidor é utilizado em sequência de acordo com seu peso. Este é o algoritmo mais suave e justo, quando o tempo de processamento entre os servidores é igual. Este algoritmo é dinâmico, permitindo ajustar o peso do servidor em tempo real.
  • Leastconn: um servidor com o menor número de conexões é selecionado. A seleção cíclica é realizada entre servidores com carga semelhante. O uso deste algoritmo é recomendado para sessões longas, como LDAP, SQL, TSE, etc., mas não é muito adequado para sessões curtas, como HTTP.
  • Primeiro: o primeiro servidor com slots disponíveis para conexão recebe a conexão. Os servidores são selecionados do identificador numérico mais baixo ao mais alto, que por padrão corresponde à posição do servidor na fazenda. Assim que o servidor atinge o valor maxconn, o próximo servidor é utilizado.
  • Fonte: O IP de origem é hashado e dividido pelo peso total dos servidores em execução para determinar qual servidor receberá a solicitação. Assim, o mesmo IP do cliente sempre será direcionado para o mesmo servidor, enquanto os servidores permanecem inalterados.

Configuração de balanceamento de carga no nível de aplicação (camada 7)

Outra possibilidade disponível é configurar o balanceador de carga para operar no nível de aplicação (camada 7), o que é útil quando partes do seu aplicativo web estão localizadas em diferentes hosts. Isso pode ser alcançado através do controle da transmissão de conexões, por exemplo, por URL.

Abra o arquivo de configuração do HAProxy com um editor de texto:

sudo vi /etc/haproxy/haproxy.cfg

Em seguida, configure as seções frontend e backend de acordo com o exemplo abaixo:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

O frontend declara uma regra ACL chamada url_blog, que se aplica a todas as conexões com caminhos que começam com /blog. O use_backend determina que as conexões que atendem à condição url_blog devem ser atendidas pelo backend chamado blog_back, enquanto todas as outras solicitações são processadas pelo backend padrão.

Do lado do backend, a configuração estabelece dois grupos de servidores: http_back, como antes, e um novo, chamado blog_back, que atende as conexões com example.com/blog.

Após alterar as configurações, salve o arquivo e reinicie o HAProxy com o seguinte comando:

sudo systemctl restart haproxy

Se você recebeu avisos ou mensagens de erro ao iniciar, verifique a configuração à procura deles e certifique-se de que você criou todos os arquivos e pastas necessários, e então tente reiniciar novamente.

Testando a configuração

Quando o HAProxy estiver configurado e em execução, abra o endereço IP público do servidor do balanceador de carga no navegador e verifique se você se conectou corretamente ao backend. O parâmetro stats uri na configuração cria uma página de estatísticas no endereço especificado.

http://load_balancer_public_ip/haproxy?stats

Quando você carregar a página de estatísticas, se todos os seus servidores estiverem exibidos em verde, a configuração foi bem-sucedida!

Instalando o balanceador de carga HAProxy no CentOS

A página de estatísticas contém algumas informações úteis para monitorar seus web hosts, incluindo o tempo de atividade/inatividade e o número de sessões. Se um servidor estiver marcado em vermelho, verifique se o servidor está ligado e se você pode fazer ping nele a partir da máquina do balanceador de carga.

Se o seu balanceador de carga não estiver respondendo, verifique se as conexões HTTP não estão bloqueadas pelo firewall. Também certifique-se de que o HAProxy está funcionando usando o comando abaixo:

sudo systemctl status haproxy

Protegendo a página de estatísticas com senha

No entanto, se a página de estatísticas estiver simplesmente listada no frontend, ela estará acessível ao público, o que pode não ser uma boa ideia. Em vez disso, você pode designar uma porta exclusiva para ela, adicionando o exemplo abaixo ao final do seu arquivo haproxy.cfg. Substitua nome de usuário e senha por algo seguro:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Após adicionar o novo grupo de ouvintes, remova o antigo link para stats uri do grupo frontend. Quando terminar, salve o arquivo e reinicie o HAProxy.

sudo systemctl restart haproxy

Em seguida, abra novamente o balanceador de carga com o novo número da porta e faça login com o nome de usuário e a senha que você especificou no arquivo de configuração.

http://load_balancer_public_ip:8181

Certifique-se de que todos os seus servidores ainda estejam exibidos em verde, e então abra apenas o IP do balanceador de carga sem números de portas no seu navegador.

http://load_balancer_public_ip/

Se os seus servidores internos têm alguma variedade de páginas de destino, você perceberá que, toda vez que recarrega a página, recebe uma resposta de um host diferente. Você pode experimentar diferentes algoritmos de balanceamento na seção de configuração ou consultar a documentação completa.

Conclusão: balanceador de carga HAProxy

Parabéns pela configuração bem-sucedida do balanceador de carga HAProxy! Mesmo com uma configuração básica de balanceamento de carga, você pode aumentar significativamente o desempenho e a disponibilidade do seu aplicativo web. Este guia é apenas uma introdução ao balanceamento de carga com o HAProxy, que é capaz de muito mais do que o que pode ser descrito em um breve manual de configuração. Recomendamos que você experimente diferentes configurações usando a documentação extensa, disponível para o HAProxy, e depois comece a planejar o balanceamento de carga para o seu ambiente de produção.

Usando vários hosts para proteger o seu serviço web com uma reserva de potência, o próprio balanceador de carga ainda pode representar um ponto de falha. Você pode aumentar ainda mais a alta disponibilidade configurando um IP flutuante entre vários balanceadores de carga. Você pode saber mais sobre isso em nosso artigo sobre IPs flutuantes na UpCloud.

Saiba mais sobre o curso «Administrador Linux. Virtualização e Clusterização»***

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster