Instalando o balanceador de carga HAProxy no CentOS

A tradução do artigo foi preparada na véspera do início do curso "Administrador Linux. Virtualização e clustering"

Instalando o balanceador de carga HAProxy no CentOS

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. HAPROxy é um dos softwares de balanceamento de carga de código aberto mais populares que também oferece alta disponibilidade e funcionalidade de proxy.

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 Debian 8 и Ubuntu 16.

Instalando o balanceador de carga HAProxy no CentOS

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 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

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 na página de documentação, se você quiser saber mais sobre isso.

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 no painel de controle UpCloud e na aba Rede privada no menu Network.

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!

Instalando o balanceador de carga HAProxy no CentOS

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 documentação completa.

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 extensa documentação, disponível para HAProxy e, em seguida, comece a planejar o balanceamento de carga para seu ambiente de produção.

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 artigo sobre endereços IP flutuantes no UpCloud.

Mais sobre o curso "Administrador Linux. Virtualização e clustering"***

Fonte: habr.com

Adicionar um comentário