HA-Proxy – Load Balancer, Network Load Balancer Extraordinaire…

Olá a todos,

Hoje vamos abordar em muito high level o mundo dos Network Load Balancers!
Neste post iremos dar uma vista de olhos profunda ao que é um Network Load Balancer, com um foco especial no HAProxy (community edition), e vamos aprender como configurar um ambiente simples de balanceamento de carga com dois servidores web e por que é uma ferramenta essencial para utilização no nosso homelab ou empresa.

GitHub - haproxy/haproxy: HAProxy Load Balancer's development branch (mirror of git.haproxy.org)

O que é um Network Load Balancer?

Antes de avançarmos, é importante ter noção do que é um Network Load Balancer e por que é uma parte crucial da infraestrutura de redes e servidores.
Numa linguagem simples, um Network Load Balancer é uma técnica/processo que distribui o tráfego de rede entre vários servidores para evitar sobrecargas e garantir a disponibilidade contínua dos serviços.
Imaginemos uma pista de corrida onde vários corredores estão a competir. O objetivo é manter o equilíbrio e garantir que nenhum dos corredores fique sobrecarregado. O Network Load Balancer faz exatamente isso para os servidores.

How to Setup High-Availability Load Balancer with 'HAProxy' to Control Web Server Traffic

Por que é necessário um Load Balancer?

Aqui está a pergunta do milhão de euros: Por que precisamos de um Load Balancer? A resposta é simples. À medida que os serviços web e tcp based se tornam mais populares e as cargas de tráfego aumentam, os servidores podem e irão ficar sobrecarregados.
Isto irá causar downtime, diminuição da velocidade e, em última análise, a uma má experiência do end user. Um Load Balancer atua como um gestor de tráfego inteligente que distribui as solicitações dos utilizadores por vários servidores na mesma pool, garantindo antes que todos estejam a funcionar com eficiência e sem problemas.

Tipos de Load Balancers

Existem diferentes tipos de Load Balancers, mas vamos concentrar-nos nos NLB. Este tipo de Load Balancer opera no nível de rede (camada 4) e é responsável por distribuir o tráfego com base em informações como endereços IP de origem e destino, portas e protocolos. Isto torna-o altamente eficaz na gestão de tráfego, garantindo que as solicitações sejam direcionadas para os servidores apropriados.

HAProxy: A Ferramenta de Network Load Balancing

Agora que compreendemos a importância de um Network Load Balancer e o que faz, vamos dar uma vista de olhos numa  das mais populares e poderosas ferramentas para o faz acontecer – o HAProxy. O HAProxy é um Load Balancer opensource que é amplamente utilizado por profissionais de TI em todo o mundo. É conhecido pela sua escalabilidade, desempenho e flexibilidade.

Características do HAProxy:

  1. Balanceamento de Carga: O HAProxy distribui o tráfego de entrada por vários servidores de destino, garantindo uma distribuição equitativa das solicitações.
  2. Proxy TCP e HTTP/HTTPS: Suporta tanto o tráfego TCP quanto o HTTP/HTTPS, tornando-o adequado para uma ampla gama de aplicações e serviços.
  3. Monitorização de Servidores: O HAProxy pode monitorizar continuamente a disponibilidade dos servidores e retirá-los da rota se estiverem inativos.
  4. SSL Termination ou SSL Offload: Oferece suporte a terminação SSL, o que é vital para encriptar e desencriptar trafego ssl, deixando o load de o fazer em outro sitio que não o nosso servidor aplicacional.
  5. Configuração Flexível: A configuração do HAProxy é altamente personalizável, o que permite adaptá-lo às necessidades específicas do noss ambiente.

Vamos então meter a mão na massa?

Instalação do HAProxy

Antes de começarmos a configurar o HAProxy, precisamos instalá-lo. No sistema baseado em Debian (como o Ubuntu), podemos instalar o HAProxy com o seguinte comando:

sudo apt-get install haproxy

Para sistemas baseados em Red Hat (como o CentOS), utilizemos este comando:

sudo yum install haproxy

Configuração Simples do HAProxy

Iremos agora ver uma configuração simples do HAProxy para balanceamento de carga entre dois servidores web. Imaginemos que temos dois servidores web em execução, e queremos distribuir o tráfego entre eles de forma eficiente. O HAProxy torna este processo simples.

1. Edição do Ficheiro de Configuração

O primeiro passo é editar o ficheiro de configuração do HAProxy. Normalmente, este ficheiro encontra-se em `/etc/haproxy/haproxy.cfg`. Utiliza o teu editor de texto favorito para abrir o ficheiro de configuração:

sudo nano /etc/haproxy/haproxy.cfg

2. Adicionar a Configuração do Backend

No ficheiro de configuração, adiciona a configuração do backend. Aqui, vais especificar os servidores web de destino e as regras de balanceamento de carga. Por exemplo:

backend meus_servidores
balance roundrobin
server servidor1 192.168.1.101:80 check
server servidor2 192.168.1.102:80 check

Nota:

– `backend meus_servidores`: Este é o nome do backend que estamos a definir.

– `balance roundrobin`: Aqui, estamos a definir o algoritmo de balanceamento de carga. O “roundrobin” distribuirá as solicitações de forma equitativa.

– `server servidor1 192.168.1.101:80 check`: Define o primeiro servidor de destino e as suas informações. O `check` indica que o HAProxy deve monitorizar a disponibilidade deste servidor.

– `server servidor2 192.168.1.102:80 check`: De forma semelhante, define o segundo servidor de destino.

3. Configurar o Frontend

Agora, precisamos configurar o frontend, que lida com as solicitações dos clientes. Adiciona as seguintes linhas:

frontend meu_frontend
bind *:80
default_backend meus_servidores

– `frontend meu_frontend`: Especifica o nome do frontend.

– `bind *:80`: Indica que o HAProxy deve escutar todas as solicitações na porta 80.

– `default_backend meus_servidores`: Encaminha as solicitações para o backend que definimos anteriormente.

4. Guardar e Sair

Após adicionar a configuração, guarda o ficheiro e sai do editor de texto.

5. Reiniciar o HAProxy

Para aplicar as alterações, será necessário reiniciar o serviço HAProxy:

sudo service haproxy restart

E pronto! Agora temos um ambiente de balanceamento de carga simples e funcional usando o HAProxy. Quando os utilizadores acederem ao nosso serviço na porta 80, o HAProxy distribuirá as solicitações pelos servidores `servidor1` e `servidor2` de forma equitativa, garantindo que nenhum deles fique sobrecarregado.

E qual a importância do Network Load Balancer no nosso Homelab ou PME?

Podem estar a questionarem-se por que devemos configurar um Network Load Balancer no nosso homelab ou em serviços que disponibilizamos para a nossa PME, uma vez que não temos uma infraestrutura tão vasta quanto uma grande empresa.
Existem várias razões pelas quais esta é uma ideia fantástica, especialmente se estivermos a aprender sobre redes e servidores.

1. Aprender Praticando.

Configurar e gerir e saber qual o comportamento de um Network Load Balancer é uma habilidade muito valiosa para qualquer administrador de sistemas ou network admin. Ter a oportunidade de configurar um ambiente de balanceamento de carga no nosso homelab permite-te-nos ganhar experiência e compreender como as coisas funcionam na prática.

2. Redundância e Disponibilidade

Mesmo no nosso homelab, é importante garantir a disponibilidade dos serviços que estamos a disponibilizar. Se estamos a hospedar um site pessoal, um servidor de jogos, ou qualquer outra aplicação, um Load Balancer pode ajudar a garantir que os teus serviços estejam sempre acessíveis, mesmo se um servidor falhar.

3. Escalabilidade

À medida que a nossa experiência e conhecimento crescem, podemos expandir a nossa infraestrutura. Configurar um Load Balancer desde o início permite-te-nos preparar o terreno mental e prático para futuras expansões. À medida que adicionas mais servidores, o Load Balancer irá garantir que o tráfego seja distribuído de forma eficaz.

4. Laboratórios e Experiencias.

O nosso homelab é um ambiente seguro para experimentar e testar configurações e cenários. Ao ter um Load Balancer no nosso homelab, podemos brincar com diferentes configurações, experimentar novos algoritmos de balanceamento de carga e aprender com os resultados.

E chegamos ao fim de um post super simples sobre um componente tanto usado e tantas vezes ignorado que está lá.
Um Network Load Balancer, como o HAProxy, é uma ferramenta poderosa que desempenha um papel vital na gestão do tráfego de rede e na garantia da disponibilidade dos serviços. Com a sua configuração simples e flexibilidade, o HAProxy é uma escolha sólida para implementar o balanceamento de carga. A sua utilização no nosso homelab não só melhora a disponibilidade e a redundância dos serviços por nós prestados, mas também nos oferece uma oportunidade valiosa de aprendizagem prática.

Portanto, não hesitem em dar uma chance ao Network Load Balancer, explorar o HAProxy e começar a equilibrar o tráfego no nosso próprio ambiente de testes. Irão ganhar um conjunto de habilidades valiosas e melhorar a robustez da nossa infraestrutura – tudo enquanto te divertes a aprender.

Se tiverem alguma duvida ou reparo, sabem onde me encontrar. Até ao próximo post!

Um abraço e Festas Felizes.
Nuno