A tradução do artigo foi preparada na véspera do início do curso
O balanceamento de carga é uma solução comum para dimensionar horizontalmente aplicativos da Web em vários hosts, ao mesmo tempo que fornece aos usuários um único ponto de acesso ao serviço.
O HAProxy se esforça para otimizar o uso de recursos, maximizar o rendimento, minimizar o tempo de resposta e evitar sobrecarregar qualquer recurso individual. Ele pode ser instalado em diversas distribuições Linux, como CentOS 8, que focaremos neste guia, bem como em sistemas
O HAProxy é particularmente adequado para sites com tráfego muito alto e, portanto, é frequentemente usado para melhorar a confiabilidade e o desempenho de configurações de serviços web de vários servidores. Este guia descreve as etapas para configurar o HAProxy como um balanceador de carga em um host de nuvem CentOS 8, que então roteia o tráfego para seus servidores web.
Como pré-requisito para obter melhores resultados, você deve ter pelo menos dois servidores web e um servidor de balanceamento de carga. Os servidores Web devem executar pelo menos um serviço Web básico, como nginx ou httpd, para testar o balanceamento de carga entre eles.
Instalando HAProxy no CentOS 8
Como o HAProxy é um aplicativo de código aberto em rápida evolução, a distribuição disponível nos repositórios padrão do CentOS pode não ser a versão mais recente. Para descobrir a versão atual, execute o seguinte comando:
sudo yum info haproxy
O HAProxy sempre oferece três versões estáveis para você escolher: as duas versões suportadas mais recentes e uma terceira versão mais antiga que ainda está recebendo atualizações críticas. Você sempre pode verificar a versão estável mais recente listada no site do HAProxy e então 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 do guia. Você precisará instalá-lo a partir da fonte original. Mas primeiro verifique se você atendeu às condições necessárias 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 há uma versão mais recente disponível em
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
Assim que o download for concluído, extraia os arquivos usando o comando abaixo:
tar xzvf ~/haproxy.tar.gz -C ~/
Vá para o diretório de origem descompactado:
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
O HAProxy agora está instalado, mas requer algumas manipulações adicionais para funcionar. Vamos continuar configurando o software e os serviços abaixo.
Configurando HAProxy para seu servidor
Agora adicione os seguintes diretórios e arquivos de estatísticas para as entradas 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 binários para que você possa executar comandos HAProxy como um usuário normal:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
Se você deseja adicionar um proxy ao seu sistema como um serviço, copie o arquivo haproxy.init dos exemplos para o diretório /etc/init.d. Edite as permissões do arquivo para que o script seja executado e reinicie 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 seja reiniciado automaticamente quando o sistema for iniciado:
sudo chkconfig haproxy on
Por conveniência, também é recomendado 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 padrão no CentOS 8 é bastante restritivo para este projeto. Use os seguintes comandos para permitir os serviços necessários e redefinir 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. Essencialmente, tudo o que você precisa fazer é informar ao HAProxy quais conexões ele deve escutar e onde deve retransmiti-las.
Isso é feito criando um arquivo de configuração /etc/haproxy/haproxy.cfg com configurações de definição. Você pode ler sobre as opções de configuração do HAProxy
Balanceamento de carga na camada de transporte (camada 4)
Vamos começar com a configuração básica. Crie um novo arquivo de configuração, por exemplo usando vi com o comando abaixo:
sudo vi /etc/haproxy/haproxy.cfg
Adicione as seguintes seções ao arquivo. Substituir nome do servidor como deve chamar seus servidores na página de estatísticas e ip_privado — endereços IP privados dos servidores para os quais você deseja direcionar o tráfego da web. Você pode verificar endereços IP privados
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 da camada de transporte (camada 4) denominado externamente http_front escutando na porta 80, que então encaminha o tráfego para um back-end padrão denominado http_back. Estatísticas adicionais /haproxy?stats conecta a página de estatísticas ao endereço especificado.
Vários algoritmos de balanceamento de carga.
A especificação de servidores na seção backend permite que o HAProxy use esses servidores para balanceamento de carga de acordo com um algoritmo round-robin, quando possível.
Algoritmos de balanceamento são usados para determinar para qual servidor no back-end cada conexão é passada. Aqui estão algumas das opções úteis:
- Rodada: Cada servidor é usado por sua vez de acordo com seu peso. Este é o algoritmo mais suave e justo quando o tempo de processamento dos servidores permanece distribuído uniformemente. Este algoritmo é dinâmico, permitindo que o peso do servidor seja ajustado rapidamente.
- Menos conexão: o servidor com menos conexões é selecionado. O round robin é realizado entre servidores com a mesma carga. 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 de conexão disponíveis recebe a conexão. Os servidores são selecionados do ID numérico mais baixo para o mais alto, cujo padrão é a posição do servidor no farm. Quando um servidor atinge o valor maxconn, o próximo servidor é usado.
- Fonte: O endereço IP de origem é criptografado e dividido pelo peso total dos servidores em execução para determinar qual servidor receberá a solicitação. Dessa forma, o mesmo endereço IP do cliente irá sempre para o mesmo servidor, enquanto os servidores permanecem os mesmos.
Configurando o balanceamento de carga no nível do aplicativo (camada 7)
Outra opção disponível é configurar um balanceador de carga para ser executado na camada de aplicação (camada 7), o que é útil quando partes da sua aplicação web estão localizadas em hosts diferentes. Isto pode ser conseguido limitando a transmissão da conexão, por exemplo, por URL.
Abra o arquivo de configuração do HAProxy usando um editor de texto:
sudo vi /etc/haproxy/haproxy.cfg
Em seguida, configure os segmentos frontend e backend conforme 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 começando com /blog. Use_backend especifica que as conexões que correspondem à condição url_blog devem ser atendidas por um back-end chamado blog_back e todas as outras solicitações são tratadas pelo back-end padrão.
No backend, a configuração configura dois grupos de servidores: http_back, como antes, e um novo chamado blog_back, que gerencia conexões com example.com/blog.
Após alterar as configurações, salve o arquivo e reinicie o HAProxy usando o seguinte comando:
sudo systemctl restart haproxy
Se você receber algum aviso ou mensagem de erro durante a inicialização, verifique sua configuração e certifique-se de ter criado todos os arquivos e pastas necessários e tente reiniciar novamente.
Testando a configuração
Depois que o HAProxy estiver configurado e em execução, abra o endereço IP público do servidor balanceador de carga em um navegador e verifique se você está conectado ao back-end corretamente. 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
Ao carregar a página de estatísticas, se todos os seus servidores estiverem verdes, a configuração foi bem-sucedida!
A página de estatísticas contém algumas informações úteis para rastrear seus hosts da web, incluindo tempo de atividade/inatividade e número de sessões. Se o servidor estiver marcado em vermelho, certifique-se de que o servidor esteja ligado e que você possa executar ping nele a partir da máquina do balanceador de carga.
Se o seu balanceador de carga não estiver respondendo, certifique-se de que as conexões HTTP não estejam bloqueadas por um firewall. Verifique também se o HAProxy está funcionando usando o comando abaixo:
sudo systemctl status haproxy
Protegendo a página de estatísticas com uma senha
No entanto, se a página de estatísticas estiver simplesmente listada no front-end, ela estará aberta para todos verem, o que pode não ser uma boa ideia. Em vez disso, você pode atribuir a ele um número de porta personalizado adicionando o exemplo abaixo ao final do arquivo haproxy.cfg. Substituir nome de usuário и senha para algo seguro:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
Depois de adicionar um novo grupo de ouvintes, remova o antigo link stats uri do grupo frontend. Ao terminar, salve o arquivo e reinicie o HAProxy.
sudo systemctl restart haproxy
Em seguida, abra o balanceador de carga novamente com o novo número de porta e faça login com o nome de usuário e a senha especificados no arquivo de configuração.
http://load_balancer_public_ip:8181
Certifique-se de que todos os seus servidores ainda estejam verdes e abra apenas o IP do balanceador de carga sem nenhum número de porta em seu navegador.
http://load_balancer_public_ip/
Se você tiver pelo menos alguma variedade de páginas de destino em seus servidores back-end, notará que toda vez que recarregar a página, você receberá uma resposta de um host diferente. Você pode tentar diferentes algoritmos de balanceamento na seção de configuração ou conferir
Conclusão: balanceador de carga HAProxy
Parabéns pela configuração bem-sucedida do seu balanceador de carga HAProxy! Mesmo com uma configuração básica de balanceamento de carga, você pode melhorar significativamente o desempenho e a disponibilidade do seu aplicativo web. Este guia é apenas uma introdução ao balanceamento de carga com HAProxy, que é capaz de muito mais do que o guia de configuração rápida. Recomendamos experimentar diferentes configurações usando
Ao usar vários hosts para proteger seu serviço web com espaço livre, o próprio balanceador de carga ainda pode apresentar um ponto de falha. Você pode melhorar ainda mais a alta disponibilidade instalando um IP flutuante entre vários balanceadores de carga. Você pode saber mais sobre isso em nosso
Mais sobre o curso
Fonte: habr.com