Como configurar o Haproxy como balanceador de carga para o nginx no CentOS 8

Como configurar o Haproxy como balanceador de carga para o nginx no CentOS 8

Para garantir a máxima disponibilidade de aplicativos da web, escalabilidade e alto desempenho, agora é comum implementar tecnologias que introduzem redundância, como agrupamento de servidores e balanceamento de carga. Por exemplo, configurando um cluster de servidores que executam os mesmos aplicativos e depois implantando o (s) balanceador (s) de carga (s) na frente deles para distribuir o tráfego.

Haproxy é uma alta disponibilidade de código aberto, poderoso, de alto desempenho, confiável, seguro e amplamente usado TCP/HTTP Balanceador de carga, servidor proxy e terminador SSL/TLS construído para sites de tráfego muito alto. Funciona de maneira confiável em Linux, Solaris, FreeBSD, OpenBSD bem como sistemas operacionais AIX.

Este guia mostra como configurar um balanceador de carga de alta disponibilidade dedicado com Haproxy sobre CENTOS 8 Para controlar o tráfego em um conjunto de Nginx Servidores da Web. Também demonstra como configurar SSL/TLS terminação em Haproxy.

Pré -requisitos:

Um total de 4 servidores com instalação mínima do CentOS 8.

Configuração do ambiente de teste

----------- Configuração do servidor Haproxy ----------- HA Proxy Server - HostName: Haproxy -Server.Tecmint.LAN; IP: 10.42.0.247 Domínio do local de teste: www.Tecmint.LAN ----------- Configuração de servidores da web cliente ----------- Servidor da web #1 - nome do host: webSrv1.Tecmint.LAN; IP: 10.42.0.200 servidor da web #2 - nome do host: websrv2.Tecmint.LAN; IP: 10.42.0.21 Web Server #3 - nome do host: WebSRV3.Tecmint.LAN; IP: 10.42.0.34 

Etapa 1: Configurando o servidor HTTP nginx nas máquinas clientes

1. Faça login em todos os seus CENTOS 8 máquinas clientes e instalar o Nginx servidor da web usando o gerenciador de pacotes DNF, como mostrado.

# dnf install nginx 

2. Em seguida, inicie o Nginx Serviço, por enquanto, permita que ele inicie automaticamente na inicialização do sistema e confirme que está em funcionamento verificando seu status, usando os comandos SystemCTL (faça isso em todas as máquinas clientes).

# SystemCtl Iniciar nginx # SystemCtl Ativar nginx # Systemctl Status nginx 

3. Além disso, se o serviço Firewalld estiver em execução em todas as máquinas clientes (que você pode verificar executando o SystemCTL START Firewalld), você deve adicionar o Http e Https Serviços na configuração do firewall para permitir solicitações do balanceador de carga passam pelo firewall para o Nginx Servidores da Web. Então recarregue o Firewalld Serviço para efetuar 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 da web em suas máquinas locais e teste se o Nginx A instalação está funcionando bem. Use os IPs do cliente para navegar, depois de ver o Nginx Página de teste, significa que o servidor da web instalado na máquina cliente está funcionando corretamente.

Teste a instalação do NGINX em todas as máquinas clientes do CentOS 8

5. Em seguida, precisamos criar páginas de teste nas máquinas clientes que usaremos posteriormente para testar o Haproxy configurar.

----------- Servidor da web #1 ----------- # cp/usr/share/nginx/html/index.html/usr/share/nginx/html/index.html.orig # echo "mostrando site da websrv1.Tecmint.LAN ">/usr/share/nginx/html/index.html ----------- Servidor da web #2 ----------- # cp/usr/share/nginx/html/index.html/usr/share/nginx/html/index.html.orig # echo "mostrando site da websrv2.Tecmint.LAN ">/usr/share/nginx/html/index.html ----------- Servidor da web #3 ----------- # cp/usr/share/nginx/html/index.html/usr/share/nginx/html/index.html.orig # echo "mostrando site da websrv3.Tecmint.LAN ">/usr/share/nginx/html/index.html 

Etapa 2: Instalando e configurando o servidor Haproxy no CentOS 8

6. Agora instale o Haproxy pacote no Haproxy servidor executando o seguinte comando.

# dnf install haproxy 

7. Em seguida, inicie o Haproxy Serviço, Ative-o para iniciar automaticamente na inicialização do sistema e verifique seu status.

# SystemCtl Iniciar haproxy # SystemCtl Ativar haproxy # SystemCtl Status HaProxy 
Verifique o status de haproxy no CentOS 8

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 em todo o processo.
  • padrões - Esta seção define parâmetros padrão para todas as outras seções seguindo sua declaração.
  • front-end - Esta seção descreve um conjunto de soquetes de escuta que aceitam conexões do cliente.
  • Processo interno - Esta seção descreve um conjunto de servidores aos quais o proxy se conectará às conexões de entrada encaminhadas.

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

9. Haproxy Quando implantado, desempenhará um papel significativo em sua infraestrutura de TI, configurando assim o registro para ele é um requisito básico; Isso permite que você obtenha informações sobre cada conexão com os servidores da Web de back -end.

O parâmetro de log (destacado na captura de tela a seguir) declara um global Syslog servidor (como rsyslog o padrão no CentOS) que receberá 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 da instalação padrão usado para identificar as mensagens de log do Haproxy em rsyslog.

Parâmetro de log padrão do haproxy

10. Em seguida, você precisa dizer o rsyslog servidor como receber e processar Haproxy mensagens de log. Abra o arquivo de configuração do RSYSLOG para /etc/rsyslog.conf ou criar um novo arquivo dentro do /etc/rsyslog.d diretório, 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 essas linhas para instruir rsyslog Para escrever em dois arquivos de log separados com base na gravidade, onde Local2 é o código da instalação definido na configuração Haproxy acima.

Local2.*/var/log/haproxy-traffic.Log Local2.aviso/var/log/haproxy-admin.registro 

11. Salve o arquivo e feche-o. Em seguida, reinicie o rsyslog Serviço para aplicar as mudanças recentes.

# SystemCtl Reiniciar rsysLog 

Configurando o front-end e back-ends do Haproxy

12. Nesta seção, demonstraremos como configurar os proxies front-end e back-end. Voltar para o Haproxy Arquivo de configuração e modifique as seções de front-end e back-end padrão da seguinte forma, da seguinte forma. Não entraremos em uma explicação detalhada de cada parâmetro, você sempre pode consultar a documentação oficial.

A configuração a seguir define um ouvir seção usada para servir o HAPROXY STATS página. O vincular O parâmetro atribui um ouvinte a um determinado endereço IP (* para todos neste caso) e porta (9000).

As estatísticas habilitar A configuração permite a página de estatísticas que serão acessadas usando o URI /STATS (eu.e http: // server_ip: 9000/estatísticas).

As estatísticas Auth A configuração é usada para adicionar uma autenticação básica ao acessar a página (substitua Haproxy e [Email protegido] com um nome de usuário e senha de sua escolha).

Ouça as estatísticas Bind *: 9000 estatísticas Ativar estatísticas estatísticas de oculto-versão URI /STATS STATS Admin se estatísticas de localhost STATS AUTH HAPROXY: [Email Protected] 

13. A próxima configuração define uma seção de front -end chamada Tl (você pode dar um nome ao seu gosto). O modo O parâmetro define o modo que o Haproxy opera em.

O ACL (Lista de controle de acesso) O parâmetro é usado para tomar uma decisão com base no conteúdo extraído da solicitação. Neste exemplo, o pedido é considerado claro Http Se não for feito Ssl.

Então o HTTP-REQUEST CAPETO A configuração é usada para adicionar um cabeçalho HTTP à solicitação. Isso ajuda a informar Nginx que o pedido inicial foi feito sobre Http (ou via porta 80).

O default_backend ou use_backend a diretiva define os servidores de back -end, neste caso, referenciados por Tl_web_servers.

Observe que Haproxy Vai retornar um “503 Erro indisponível de serviço“Se uma solicitação não for roteada por um use_backend ou default_backend diretivo.

frontend tl bind *: 80 modos http acl http ssl_fc, não http-request cetweer x forwarded-protocol http se http default_backend tl_web_servers 

14. Então precisamos definir uma seção de back -end onde o equilíbrio A configuração define como Haproxy Seleciona os servidores de back-end para processar uma solicitação se nenhum método de persistência substituir essa seleção.

O biscoito Diretiva Ativa à base de biscoitos persistência, instrui Haproxy Para enviar um biscoito chamado ServerID para o cliente e associá -lo ao EU IA do servidor que deu a resposta inicial.

O servidor A diretiva é usada para definir os servidores a montante no formato Sever_name (e.g WebSrv1), Server_ip: porta e opções.

Uma opção chave é verificar que diz Haproxy Para continuar checando a disponibilidade de um servidor e relatório na página de estatísticas.

back -end tl_web_servers Modo http balance redondrobin opção httpchk cabeça / cookie serveruid inserir indireto nocache server webSrv1 10.42.0.200: 80 cookie websrv1 check server webSrv2 10.42.0.21:80 Cookie WebSrv2 Verifique o servidor WebSRV3 10.42.0.34:80 Cookie webSrv3 Verificação 

Comente qualquer outra seção de front -end e back -end, conforme mostrado na captura de tela que segue. Salve o arquivo e feche-o.

Configurando o front-end e back-ends do Haproxy

15. Agora reinicie o Haproxy Serviço para aplicar as novas mudanças.

# SystemCtl Reiniciar haproxy 

16. Em seguida, verifique se o Http (porta 80) e Https (porta 433) Os serviços são abertos no firewall para aceitar solicitações de clientes da seguinte forma. Além disso, porta aberta 9000 No firewall por acessar a página de estatísticas e recarregar 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 as estatísticas de visualização

17. Agora é hora de testar o HAPRXOY configurar. Na máquina de desktop local de onde você está acessando todos os servidores, adicione a seguinte linha no /etc/hosts arquivo 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 o domínio do site.

http: // 10.42.0.247/ou http: // www.Tecmint.lan/ 
Verifique a configuração do haproxy

19. Para acessar o Haproxy Página de estatísticas, use o seguinte endereço.

http: // 10.42.0.247: 9000/estatísticas 

Em seguida, use o nome de usuário e a senha que você definiu no arquivo de configuração do Haproxy (consulte o parâmetro de autenticação das estatísticas).

Página de login de estatísticas Haproxy

Após um login bem -sucedido, você pousará no Haproxy Página de estatísticas que mostra métricas que cobrem 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 sobre os códigos de cores funcionam, colocamos um dos servidores de back-end.

Relatório de estatísticas de Haproxy

Etapa 4: Configurando HTTPs em Haproxy usando um certificado SSL autoassinado

20. Nesta seção final, demonstraremos como configurar SSL/TLS Para garantir todas as comunicações entre o servidor Haproxy e o cliente. Haproxy suporta quatro maiores Https modos de configuração, mas para este guia, usaremos SSL/TLS descarregamento.

Em SSL/TLS modo de descarga, Haproxy Decifra o tráfego no lado do cliente e fica conectado em tráfego claro aos servidores de back-end.

Vamos começar criando o certificado e chave Conforme mostrado (responda às perguntas de acordo com os detalhes da sua empresa durante a criação de 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.chave --out/etc/ssl/tecmint.LAN.CRT # CD/etc/SSL/TECMINT.LAN/ # CAT Tecmint.Crt Tecmint.Chave> Tecmint.PEM # LS -L 
Crie SSL para Haproxy

21. Em seguida, abra o Haproxy arquivo de configuração (/etc/haproxy/haproxy.cfg) e edite a seção front-end.

frontend tl bind *: 80 bind *: 443 ssl crt/etc/ssl/tecmint.LAN/TECMINT.Esquema de redirecionamento do PEM https se !ssl_fc modo http acl http ssl_fc, não acl https ssl_fc http-request cabeçalho x-forwarded-protocol httpppwsTPSTPSTBSFAUNTS _FTTPSTPSTPSFAUNTS DEFTTPSTPSTPSTPTPSTPSTPSTPSTPSTPSTPSTPTPS ° 
Configure o front-end Haproxy com SSL

Salve o arquivo e feche-o.

22. Em seguida, reinicie o serviço Haproxy para aplicar as novas alterações.

# SystemCtl Reiniciar haproxy.serviço 

23. Em seguida, abra um navegador da web e tente acessar o site mais uma vez. O navegador mostrará um erro por causa do certificado autoassinado, clique Avançado para prosseguir.

Erro de conexão SSL Haproxy Prossiga com a conexão Site de acesso ao HTTPS

É tudo por agora! Todo aplicativo da web tem seu próprio conjunto de requisitos, você precisa projetar e configurar o balanceamento de carga para atender à sua infraestrutura de TI e requisitos do aplicativo.

Para obter mais informações sobre algumas das opções de configuração usadas neste guia e geralmente como usar Haproxy, Veja a documentação oficial da Haproxy Community Edition ou Haproxy Enterprise Version. Você pode postar quaisquer perguntas ou pensamentos através do formulário de feedback abaixo.