A tradução do artigo foi preparada em antecipação ao início do curso

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. é 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 e .

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 haproxyO 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 -yBaixe o código-fonte usando o comando abaixo. Você pode verificar se existe uma versão mais nova disponível em .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gzApó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.7Em seguida, compile o programa para o seu sistema:
make TARGET=linux-glibcE, finalmente, instale o próprio HAProxy:
sudo make installAgora 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/statsCrie 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/haproxySe 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-reloadVocê também precisa permitir que o serviço reinicie automaticamente na inicialização do sistema:
sudo chkconfig haproxy onPara maior conveniência, também é recomendável adicionar um novo usuário para executar o HAProxy:
sudo useradd -r haproxyDepois 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 --reloadConfiguraçã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 , 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.cfgAdicione 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 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 checkIsso 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.cfgEm 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 checkO 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 haproxySe 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?statsQuando você carregar a página de estatísticas, se todos os seus servidores estiverem exibidos em verde, a configuração foi bem-sucedida!

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 haproxyProtegendo 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:passwordApó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 haproxyEm 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:8181Certifique-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 .
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 , 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 .
Saiba mais sobre o curso ***
Fonte: habr.com
