Para garantir a máxima disponibilidade, escalabilidade e alto desempenho de aplicações web, é comum implementar tecnologias que introduzem redundância, como agrupamento de servidores e balanceamento de carga. Por exemplo, configurar um cluster de servidores que executam as mesmas aplicações e, em seguida, implantar balanceadores de carga à frente deles para distribuir o tráfego.
HAProxy é um balanceador de carga TCP/HTTP de alta disponibilidade, open-source, poderoso, de alto desempenho, confiável, seguro e amplamente utilizado, servidor proxy e terminador SSL/TLS projetado para sites de tráfego muito alto. Ele funciona de maneira confiável em sistemas operacionais Linux, Solaris, FreeBSD, OpenBSD e também AIX.
Este guia mostra como configurar um balanceador de carga de alta disponibilidade dedicado com HAProxy no CentOS 8 para controlar o tráfego em um cluster de servidores web NGINX. Também demonstra como configurar a terminação SSL/TLS no HAProxy.
Pré-requisitos:
A total of 4 servers with minimal CentOS 8 installation.
Configuração do Ambiente de Teste
----------- HAProxy Server Setup ----------- HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247 Test Site Domain: www.tecmint.lan ----------- Client Web Servers Setup ----------- Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200 Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21 Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34
Passo 1: Configurando o Servidor HTTP Nginx nas Máquinas Cliente
1. Faça login em todas as suas máquinas cliente CentOS 8 e instale o servidor web Nginx usando o gerenciador de pacotes dnf conforme mostrado.
# dnf install Nginx
2. Em seguida, inicie o serviço Nginx, por enquanto, habilite-o para iniciar automaticamente na inicialização do sistema e confirme que está ativo e funcionando, verificando seu status, usando os comandos systemctl (faça isso em todas as máquinas clientes).
# systemctl start nginx # systemctl enable nginx # systemctl status nginx
3. Além disso, se o serviço firewalld estiver em execução em todas as máquinas clientes (o que você pode verificar executando systemctl start firewalld), você deve adicionar os serviços HTTP e HTTPS na configuração do firewall para permitir que as solicitações do balanceador de carga passem pelo firewall até os servidores web Nginx. Em seguida, recarregue o serviço firewalld para efetivar as novas alterações (faça isso em todas as máquinas clientes).
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent --add-service=https # firewall-cmd --reload
4. Em seguida, abra um navegador web em suas máquinas locais e teste se a instalação do Nginx está funcionando corretamente. Use os IPs dos clientes para navegar, uma vez que você veja a página de teste do Nginx, significa que o servidor web instalado na máquina cliente está funcionando adequadamente.

5. Em seguida, precisamos criar páginas de teste nas máquinas clientes que usaremos mais tarde para testar a configuração do HAProxy.
----------- Web Server #1 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #2 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html ----------- Web Server #3 ----------- # cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig # echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html
Passo 2: Instalando e Configurando o Servidor HAProxy no CentOS 8
6. Agora instale o pacote HAProxy no servidor HAProxy executando o seguinte comando.
# dnf install haproxy
7. Em seguida, inicie o serviço HAProxy, habilite-o para iniciar automaticamente na inicialização do sistema e verifique seu status.
# systemctl start haproxy # systemctl enable haproxy # systemctl status haproxy

8. Agora vamos configurar o HAProxy usando o seguinte arquivo de configuração.
# vi /etc/haproxy/haproxy.cfg
O arquivo de configuração é dividido em quatro seções principais.
- configurações globais – define parâmetros para todo o processo.
- padrões – esta seção define parâmetros padrão para todas as outras seções após sua declaração.
- frontend – esta seção descreve um conjunto de soquetes de escuta que aceitam conexões de clientes.
- Backend – esta seção descreve um conjunto de servidores aos quais o proxy se conectará para encaminhar conexões recebidas.
Para entender as opções em configurações globais e padrões, leia a documentação do HAProxy (link fornecido no final do artigo). Para este guia, usaremos os padrões.
Configurando o Registro do HAProxy
9. Uma vez implantado, o HAProxy desempenhará um papel significativo na sua infraestrutura de TI, portanto, configurar o registro para ele é uma exigência básica; isso permite obter insights sobre cada conexão com seus servidores web de backend.
O parâmetro de log (destacado na captura de tela a seguir) declara um servidor global Syslog (como o rsyslog, padrão no CentOS) que receberá as mensagens de log. Mais de um servidor pode ser declarado aqui.
A configuração padrão aponta para o localhost (127.0.0.1) e local2 é o código de facilidade padrão usado para identificar mensagens de log do HAProxy sob rsyslog.

10. Em seguida, você precisa informar ao servidor rsyslog como receber e processar as mensagens de log do HAProxy. Abra o arquivo de configuração do rsyslog em /etc/rsyslog.conf ou crie um novo arquivo dentro do diretório /etc/rsyslog.d, por exemplo /etc/rsyslog.d/haproxy.conf.
# vi /etc/rsyslog.d/haproxy.conf
Copie e cole a seguinte configuração para coletar log com UDP na porta padrão 514.
$ModLoad imudp $UDPServerAddress 127.0.0.1 $UDPServerRun 514
Adicione também estas linhas para instruir o rsyslog a escrever em dois arquivos de log separados com base na gravidade, onde local2 é o código de facilidade definido na configuração do HAProxy acima.
local2.* /var/log/haproxy-traffic.log local2.notice /var/log/haproxy-admin.log
11. Salve o arquivo e feche-o. Em seguida, reinicie o serviço rsyslog para aplicar as alterações recentes.
# systemctl restart rsyslog
Configurando Front-ends e Back-ends do HAProxy
12. Nesta seção, demonstraremos como configurar os proxies front-end e back-end. Volte ao arquivo de configuração do HAProxy e modifique as seções padrão de front-end e backend conforme a seguir. Não entraremos em uma explicação detalhada de cada parâmetro, você pode sempre consultar a documentação oficial.
A configuração a seguir define uma seção listen usada para servir a página de estatísticas do HAProxy Stats. O parâmetro bind atribui um ouvinte a um determinado endereço IP (*
para todos neste caso) e porta (9000).
A configuração de enable das estatísticas ativa a página de estatísticas que será acessada usando o URI /stats (ou seja, http://server_ip:9000/stats
).
A configuração de auth das estatísticas é usada para adicionar uma autenticação básica ao acessar a página (substitua haproxy e Lostp@1ss por um nome de usuário e senha de sua escolha).
listen stats bind *:9000 stats enable stats hide-version stats uri /stats stats admin if LOCALHOST stats auth haproxy:Lostp@1ss
13. A próxima configuração define uma seção de frontend chamada TL (você pode dar um nome de sua preferência). O parâmetro mode define o modo de operação do HAProxy.
O parâmetro acl (Lista de Controle de Acesso) é usado para tomar uma decisão com base no conteúdo extraído da solicitação. Neste exemplo, a solicitação é considerada HTTP simples se não for feita sobre SSL.
Então a configuração http-request set-header é usada para adicionar um cabeçalho HTTP à solicitação. Isso ajuda a informar o Nginx de que a solicitação inicial foi feita sobre HTTP (ou através da porta 80).
A diretiva default_backend ou use_backend define os servidores de backend, neste caso, referenciados por TL_web_servers.
Note que o HAProxy retornará um erro de “503 Serviço Indisponível” se uma solicitação não for roteada por uma diretiva use_backend ou default_backend.
frontend TL bind *:80 mode http acl http ssl_fc,not http-request set-header X-Forwarded-Protocol http if http default_backend TL_web_servers
14. Então precisamos definir uma seção de backend onde a configuração balance define como o HAProxy seleciona os servidores de back-end para processar uma solicitação se nenhum método de persistência substituir essa seleção.
A diretiva cookie habilita a persistência baseada em cookies, ela instrui o HAProxy a enviar um cookie chamado SERVERID ao cliente e associá-lo com o ID do servidor que deu a resposta inicial.
A diretiva server é usada para definir os servidores upstream no formato server_name (por exemplo, websrv1), server_IP:porta e opções.
Uma opção importante é check, que indica ao HAProxy para continuar verificando a disponibilidade de um servidor e relatar na página de estatísticas.
backend TL_web_servers mode http balance roundrobin option httpchk HEAD / cookie SERVERUID insert indirect nocache server websrv1 10.42.0.200:80 cookie websrv1 check server websrv2 10.42.0.21:80 cookie websrv2 check server websrv3 10.42.0.34:80 cookie websrv3 check
Comente quaisquer outras seções de frontend e backend conforme mostrado na captura de tela a seguir. Salve o arquivo e feche-o.

15. Agora reinicie o serviço HAProxy para aplicar as novas alterações.
# systemctl restart haproxy
16. Em seguida, certifique-se de que os serviços HTTP (porta 80) e HTTPS (porta 433) estejam abertos no firewall para aceitar solicitações de clientes da seguinte forma. Além disso, abra a porta 9000 no firewall para acessar a página de estatísticas e recarregue as configurações do firewall.
# firewall-cmd --zone=public --permanent --add-service=http # firewall-cmd --zone=public --permanent –add-service=https # firewall-cmd --zone=public --permanent --add-port=9000/tcp # firewall-cmd --reload
Etapa 3: Testando a Configuração do HAProxy e Visualizando Estatísticas
17. Agora é hora de testar a configuração do HAProxy. Na máquina desktop local de onde você está acessando todos os servidores, adicione a seguinte linha no arquivo /etc/hosts para nos permitir usar o domínio do site fictício.
10.42.0.247 www.tecmint.lan
18. Em seguida, abra um navegador e navegue usando o endereço do servidor ou domínio do site.
http://10.42.0.247/ OR http://www.tecmint.lan/

19. Para acessar a página de estatísticas do HAProxy, use o seguinte endereço.
http://10.42.0.247:9000/stats
Então use o nome de usuário e senha que você definiu no arquivo de configuração do HAProxy (consulte o parâmetro de autenticação de estatísticas).

Após um login bem-sucedido, você será direcionado para a página de estatísticas do HAProxy que mostra métricas que abrangem a saúde de seus servidores, taxas de solicitação atuais, tempos de resposta e muito mais.
Para demonstrar como o relatório de status funciona em relação ao trabalho dos códigos de cores, nós colocamos um dos servidores de back-end.

Passo 4: Configurando HTTPS no HAProxy Usando um Certificado SSL Autoassinado
20. Nesta seção final, demonstraremos como configurar SSL/TLS para proteger todas as comunicações entre o servidor HAProxy e o cliente. O HAProxy suporta quatro modos principais de configuração HTTPS, mas para este guia, utilizaremos a offloading de SSL/TLS.
No modo de offloading de SSL/TLS, o HAProxy decifra o tráfego no lado do cliente e se conecta com tráfego claro aos servidores de back-end.
Começaremos criando o certificado e a chave conforme mostrado (responda às perguntas de acordo com os detalhes de sua empresa durante a criação do certificado, conforme destacado na captura de tela).
# mkdir /etc/ssl/tecmint.lan # cd /etc/ssl/tecmint.lan/ # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt # cd /etc/ssl/tecmint.lan/ # cat tecmint.crt tecmint.key >tecmint.pem # ls -l

21. Em seguida, abra o arquivo de configuração do HAProxy (/etc/haproxy/haproxy.cfg) e edite a seção front-end.
frontend TL bind *:80 bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem redirect scheme https if !{ ssl_fc } mode http acl http ssl_fc,not acl https ssl_fc http-request set-header X-Forwarded-Protocol http if http http-request set-header X-Forwarded-Protocol https if https default_backend TL_web_servers

Salve o arquivo e feche-o.
22. Em seguida, reinicie o serviço do HAProxy para aplicar as novas alterações.
# systemctl restart haproxy.service
23. Depois, abra um navegador da web e tente acessar o site novamente. O navegador mostrará um erro devido ao certificado autoassinado, clique em Avançado para prosseguir.



Por enquanto é só! Cada aplicação web tem seu próprio conjunto de requisitos, você precisa projetar e configurar o balanceamento de carga para atender à infraestrutura de TI e aos requisitos da aplicação.
Para obter mais informações sobre algumas das opções de configuração usadas neste guia, e em geral como usar HAProxy, consulte a documentação oficial da edição comunitária do HAProxy ou a documentação da versão empresarial do HAProxy. Você pode postar quaisquer perguntas ou pensamentos através do formulário de feedback abaixo.
Source:
https://www.tecmint.com/setup-nginx-haproxy-load-balancer-in-centos-8/