Tutorial para iniciantes do HAProxy

Tutorial Para Iniciantes Do Haproxy



À medida que seu aplicativo é dimensionado, surge a necessidade de adicionar mais servidores para lidar com mais tráfego. Quanto mais tráfego seu aplicativo receber, maiores serão as chances de enfrentar um tempo de inatividade quando o servidor estiver sobrecarregado. No entanto, existem ferramentas como o HAProxy que permitem definir como o tráfego é tratado para equilibrar a carga no seu servidor. A ideia é garantir que nenhum servidor fique sobrecarregado. O High Availability Proxy é um software de código aberto projetado para oferecer um balanceamento de carga confiável enquanto atua como um proxy reverso para aplicativos TCP/HTTP.

O HAProxy trabalha para reduzir a sobrecarga de qualquer servidor e consegue isso distribuindo um tráfego para garantir que não haja sobrecarga do servidor, mas que outros servidores estejam disponíveis. Uma plataforma como o Instagram tem um tráfego massivo devido às solicitações enviadas por segundo, daí a necessidade de utilizar o HAProxy para definir o frontend, backend e listeners dos servidores para evitar sobrecarga.

Por que usar HAProxy

Antes de aprender sobre a instalação e configuração do HAProxy, você deve entender por que precisamos dele, graças aos recursos que ele oferece. A seguir estão os principais recursos do HAProxy:







  1. Balanceamento de carga - Com o HAProxy, você pode distribuir confortavelmente o tráfego entre diferentes servidores para evitar sobrecarregar um único servidor. Dessa forma, seu aplicativo não enfrentará problemas de inatividade e você terá capacidade de resposta, confiabilidade e disponibilidade mais rápidas.
  2. Registro e monitoramento – Você obterá logs de monitoramento detalhados de seus servidores para ajudar na solução de problemas. Além disso, o HAProxy possui uma página de estatísticas onde você pode obter análises de desempenho em tempo real para seu balanceador de carga.
  3. Verificações de saúde – Até mesmo seus servidores exigem uma verificação de integridade para determinar seu status. O HAProxy executa frequentemente verificações de integridade para saber o status do seu servidor e aumentar sua confiabilidade. Se um servidor não íntegro for detectado, ele redirecionará o tráfego para outro servidor.
  4. Proxy reverso – Uma forma de aumentar a segurança é ocultar a estrutura interna. Felizmente, o HAProxy permite receber o tráfego dos clientes e encaminhá-los para os servidores apropriados. Dessa forma, sua estrutura interna fica escondida dos olhos do hacker.
  5. ACLs (listas de controle de acesso) – Com o HAProxy, você pode definir como o roteamento do tráfego deve ocorrer usando vários critérios, como caminhos, cabeçalhos e endereços IP. Assim, fica mais fácil definir uma lógica de roteamento customizada para o seu tráfego.
  6. Rescisão SSL – Por padrão, o SSL/TLS é descarregado pelos servidores back-end, o que causa um desempenho reduzido. Porém, com o HAProxy, o encerramento do SSL/TLS ocorre no balanceador de carga, descarregando a tarefa nos servidores backend.

Instalando HAProxy

Até agora, definimos o que é o HAProxy e discutimos os recursos que ele oferece para ajudá-lo a entender por que você precisa dele para seu aplicativo. A próxima etapa é entender como começar a instalá-lo em seu sistema.



Se você estiver executando os sistemas Ubuntu ou Debian, o HAProxy pode ser instalado a partir do gerenciador de pacotes APT. Execute o seguinte comando:



$ sudo atualização apt
$ sudo apto instalar haproxy

Da mesma forma, se você estiver usando sistemas baseados em RHEL ou CentOS, o HAProxy estará disponível no gerenciador de pacotes “yum”. Execute os seguintes comandos:





$ sudo yum atualização
$ sudo yum install haproxy

No nosso caso, estamos usando Ubuntu. Assim, temos nosso comando da seguinte forma:



Podemos então verificar sua versão para verificar se conseguimos instalar o HAProxy com sucesso.

$ haproxy --versão

Como configurar o HAProxy

Com o HAProxy instalado, agora você pode abrir seu arquivo de configuração ( / etc/haproxy/haproxy.cfg) e defina as configurações que deseja usar para seu balanceador de carga.

Abra o arquivo de configuração usando um editor como nano ou vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Você obtém um arquivo de configuração como este a seguir:

No arquivo de configuração, você notará que ele vem com duas seções principais:

  1. global – É a primeira seção do arquivo e seus valores não devem ser alterados. Ele contém as configurações do processo que definem como o HAProxy funciona. Por exemplo, ele define os detalhes de registro e grupos ou usuários que podem executar as funções HAProxy. Observe que neste arquivo de configuração você só pode ter uma seção global e seus valores devem permanecer inalterados.
  1. padrões – Esta seção contém os valores padrão para os nós. Por exemplo, você pode adicionar os tempos limite ou o modo operacional para seu HAProxy nesta seção. Além disso, é possível ter várias seções de padrões em seu arquivo de configuração HAProxy.

Aqui está um exemplo de seção “Padrões”:

Na imagem fornecida, o modo define como o seu HAProxy tratará as solicitações recebidas. Você pode definir o modo como HTTP ou TCP. Quanto ao tempo limite, especifica quanto tempo o HAProxy deve esperar. Por exemplo, o tempo limite de conexão é o tempo de espera antes que uma conexão de back-end seja feita. O tempo limite do cliente é quanto tempo o HAProxy deve esperar até que um cliente envie os dados. O timeout server é o tempo de espera até que o servidor apropriado envie os dados que serão encaminhados ao cliente. A maneira como você define os valores padrão é muito importante para melhorar o tempo de resposta do seu aplicativo.

Existem mais três seções que você deve definir para que seu balanceador de carga funcione conforme o esperado.

  1. front-end - Esta seção contém os endereços IP que você deseja que seus clientes usem para estabelecer a conexão.
  2. Processo interno - Ele mostra os pools de servidores que tratam das solicitações conforme definido na seção frontend.
  3. ouvir - É usado sucessivamente quando você deseja rotear um grupo de servidores específico. Esta seção combina as tarefas de frontend e backend.

Vamos dar um exemplo

Para este exemplo, definimos o frontend para usar o localhost com uma porta específica. Em seguida, vinculamos-no ao backend que executa o host local e, em seguida, executamos um servidor Python para testar se tudo funciona conforme o esperado para o balanceamento de carga. Siga as etapas fornecidas.

Etapa 1: configurando a seção de padrões

Na seção “Padrões”, definimos os valores a serem compartilhados entre os nós. Para o nosso caso, definimos o modo como HTTP e definimos os tempos limite para o cliente e o servidor. Você pode ajustar o tempo para atender às suas necessidades.

Lembre-se que todas essas edições estão na configuração do HAProxy localizada em “/etc/haproxy/haproxy.cfg”. Depois que a seção de padrões estiver configurada, vamos definir o frontend.

Etapa 2: configurando a seção Frontend

Na seção frontend definimos como queremos que o aplicativo ou site seja acessado pelos clientes online. Fornecemos os endereços IP do aplicativo. Mas neste caso trabalhamos com o localhost. Portanto, nosso endereço IP é o endereço substituto 127.0.0.1 e queremos aceitar as conexões via porta 80.

Você deve adicionar a palavra-chave “bind” que atua como ouvinte do endereço IP na porta especificada. O endereço IP e a porta que você define são usados ​​pelo balanceador de carga para aceitar as solicitações recebidas.

Após adicionar as linhas anteriores em seu arquivo de configuração, devemos reiniciar o “haproxy.service” com o seguinte comando:

$ sudo systemctl reiniciar haproxy

Neste ponto, podemos tentar enviar as solicitações para o nosso site usando o comando “curl”. Execute o comando e adicione o endereço IP de destino.

$ curl

Como ainda não definimos como será o backend do nosso HAProxy, obtemos um erro 503 conforme mostrado a seguir. Embora o balanceador de carga tenha conseguido receber as solicitações, nenhum servidor está disponível para lidar com isso, daí o erro.

Etapa 3: configurando o back-end

A seção backend é onde definimos os servidores que irão lidar com quaisquer solicitações recebidas. O balanceador de carga consulta esta seção para saber como deve distribuir as solicitações recebidas para garantir que nenhum servidor fique sobrecarregado.

O erro 503 que recebemos anteriormente ocorreu porque não tínhamos nenhum back-end para lidar com as solicitações. Vamos começar definindo “default_backend” para lidar com as solicitações. Você o define na seção frontend. Nós o chamamos de “linux_backend” para este caso.

Em seguida, crie uma seção de backend que tenha o mesmo nome daquela definida na seção de frontend. Você deve então usar a palavra-chave “servidor” seguida do nome do seu servidor e seu endereço IP. A imagem a seguir mostra que definimos o servidor “linuxhint1” usando IP 127.0.0.1 e porta 8001:

Você pode ter um pool de servidores backend, mas definimos apenas um para este caso. Certifique-se de salvar o arquivo. Devemos reiniciar novamente o serviço HAProxy.

Para testar o balanceador de carga HAProxy criado, criamos um servidor web usando Python3 para vincular as portas de back-end usando o endereço IP que especificamos. Executamos o comando da seguinte forma:

$ python3 -m http.servidor 8001 --bind 127.0.0.1

Certifique-se de substituir os valores para corresponder ao seu endereço IP e à porta que deseja vincular. Observe como o servidor web é criado e escuta todas as solicitações recebidas.

Em outro terminal, vamos usar o comando “curl” para enviar uma solicitação ao servidor.

$ curl

Ao contrário de como obtivemos o erro 503 anteriormente, que mostra que nenhum servidor está disponível para lidar com a solicitação, desta vez obtemos uma saída que confirma que nosso balanceador de carga HAProxy está funcionando.

Se você voltar ao terminal anterior onde criamos o servidor web, verá que obtemos uma saída de sucesso 200 que confirma que o HAProxy recebeu a solicitação e a tratou enviando-a para o servidor definido em nossa seção backend.

É assim que você pode definir um HAProxy simples para seu site ou aplicativo.

Trabalhando com regras

Antes de encerrarmos este tutorial HAProxy para iniciantes, vamos falar rapidamente sobre como você pode definir as regras para orientar como as solicitações serão tratadas pelo balanceador de carga.

Seguindo os mesmos passos de antes, vamos deixar nossa seção padrão intacta e definir diferentes endereços IP na seção frontend. Vinculamos o mesmo endereço IP, mas aceitamos conexões de portas diferentes.

Além disso, temos o nosso “default_backend” e outro “use_backend” que é um pool diferente de servidores que utilizaremos dependendo da porta de onde vêm as solicitações. Na configuração a seguir, todas as solicitações via porta 81 são tratadas pelos servidores no “Linux2_backend”. Quaisquer outras solicitações são tratadas pelo “default_backend”.

Em seguida, criamos as seções de backend conforme definido no frontend. Observe que para cada back-end, temos um servidor diferente que especificamos para usar para lidar com as solicitações.

Reinicie rapidamente o serviço HAProxy.

Vamos criar o servidor web usando Python3 e vincular as solicitações na porta 8002, que é o servidor backend alternativo.

Ao enviar solicitações para ele, especificamos a porta como 81 para acionar o balanceador de carga para enviar as solicitações para o servidor alternativo que não é o padrão.

Verificando novamente nosso servidor web, podemos ver que ele consegue receber e tratar as solicitações e dá uma resposta 200 (sucesso).

É assim que você pode definir as regras para orientar como seu balanceador de carga receberá e tratará as solicitações.

Conclusão

HAProxy é uma solução ideal para balanceamento de carga para aplicações TCP/HTTP. Depois de instalado, você pode editar confortavelmente o arquivo de configuração para definir os padrões, front-end e seções de back-end para orientar como seu balanceador de carga funcionará. Esta postagem é um guia para iniciantes no HAProxy. Começou definindo o HAProxy e seus recursos. A seguir, aprofundou-se no entendimento de como configurar o HAProxy e concluiu dando um exemplo de como usar o HAProxy como balanceador de carga.