Blog Agility

Lbaas (Load Balancing as a Service) no OpenStack

Lbaas (Load Balancing as a Service) no OpenStack

Por Paulo Elias Jr

Uma das vantagens de se trabalhar em nuvens que entregam infraestrutura como serviço é a facilidade de se configurar itens básicos de rede como regras de firewall, VPNs e acesso às redes externas. Um outro exemplo disso é a utilização de balanceadores de carga entre duas máquinas, também chamadas de instâncias. No mundo físico, a configuração deste item exige software e/ou hardware adicional e muitas vezes é superdimensionado devido as grandes capacidades de entrega de equipamentos dedicados. Só que muitas vezes, uma solução simples nos atende para pequenos ambientes que também precisam de balanceamento de carga. Neste artigo, vamos exibir como é simples realizar a configuração de balanceamento de carga entre duas instâncias no OpenStack.

Antes de tudo, é necessário que o agente neutron-lbaas-agent esteja instalado junto ao Neutron. É ele que realizará todos os procedimentos de monitoramento e balanceamento do pool que criaremos. Para verificar se já possui o agente instalado, acesse o Controller Node como administrador (utilizando o script com as variáveis de ambiente apropriadas) e execute o comando neutron agent-list

2015_11_Lbaas_no_OpenStack_01  figura 01

Caso o comando não retorne nenhuma informação, você pode realizar a instalação e configuração de acordo com a versão da sua cloud em https://wiki.openstack.org/wiki/Neutron/LBaaS/HowToRun. Também vamos utilizar o HAProxy como driver específico para balanceamento do conteúdo HTTP nas instâncias. Entretanto, esta implementação é bastante comum e dificilmente encontraremos ambientes sem esses agentes.

Configurar balanceamento de carga envolve seis curtas tarefas:

  • Criar as instâncias que serão balenceadas
  • Criar um Pool de Balanceamento
  • Criar um Health Monitor
  • Associar o Health Monitor ao Pool
  • Criar um VIP para o Pool
  • Associar um IP Flutuante ao Pool

Tarefa 1: Criar as Instâncias

Neste passo, configuramos duas instâncias e alocamos um IP flutuante para cada uma. Importante ressaltar que as instâncias devem ter acesso a uma rede externa por meio de um router e devem existir regras liberando o acesso à porta 80/TCP, conforme exibido abaixo.

2015_11_Lbaas_no_OpenStack_02
figura 02

Em seguida, instalamos nelas o Apache com uma webpage simples, apenas para identificar os servidores e facilitar a visualização do balanceamento de carga em funcionamento.

2015_11_Lbaas_no_OpenStack_03
figura 03

  1. Criar um Pool de balanceamento

Nota: Todos os comandos devem ser executados no Controller Node.

Para criar o pool de balanceamento, precisamos identificar a rede onde as instâncias estão conectadas. Esta informação será utilizada na criação do pool.

Execute o comando
neutron net-list
e copie o ID da rede interna do seu projeto, no nosso caso 192.168.1.0/24

2015_11_Lbaas_no_OpenStack_04  figura 04

Agora, crie o pool com o comando:

neutron lbpoolcreate –lbmethod ROUND_ROBIN –name Pool_Webserver –description “Pool WebServers Producao” –protocol  HTTP –subnet-id  <Id da rede> provider haproxy

Detalhando:

  • –lbmethod: especifica qual o método para balanceamento utilizado, neste caso, Round Robin.
  • –name, indica o nome do pool.
  • –description, uma descrição do pool
  • –protocol, protocolo que será balanceado, no caso HTTP.
  • –subnet-id, id da rede onde as instâncias balanceadas estão.
  • –provider, componente responsável pelo balanceamento, no caso, o HAProxy, conforme descrito acima.

2015_11_Lbaas_no_OpenStack_05
figura 05

Para verificar o estado do pool, execute o comando:
neutron lb-pool-list

2015_11_Lbaas_no_OpenStack_06
figura 06

O próximo passo é adicionar membros ao pool de balanceamento. Neste passo, vamos declarar que os dois servidores que criamos pertencem ao pool recém criado com os comandos:

neutron lb-member-create –address  <endereço_ip_SRV1> –protocol-port  80 Pool_Webserver

neutron lb-member-create –address  <endereço_ip_SRV2> –protocol-port 80 Pool_Webserver

Detalhando:

  • –address, indica o ip do membro
  • –protocol-port, porta de acesso onde o membro escutará conexões

Dica: Podemos obter os IPs com o comando nova list | grep <nome da instância>

2015_11_Lbaas_no_OpenStack_07
figura 07

Com os IPs em mãos, vamos criar os membros.

2015_11_Lbaas_no_OpenStack_08
figura 08

Para verificar se os membros estão ok, insira o comando neutron lb-member-list

2015_11_Lbaas_no_OpenStack_09
figura 09


Tarefa 3: Criar um Health Monitor

Nosso próximo passo é criar um Health Monitor, responsável por monitorar o estado dos membros e identificar se algum deles está com problemas, impedindo o redirecionamento de conexões a ele. O Health Monitor será vinculado ao pool que criamos anteriormente.

É possível criar o HealthMonitor com o seguinte comando:

neutron lb-healthmonitor-create –delay 3 –type HTTP –maxretries 3 –timeout 3

Detalhando:

  • –delay, indica de quanto em quanto tempo o monitor enviará mensagens ao membro para verificar seu estado, no caso, de 3 em 3 segundos.
  • –type, HTTP, indica o monitor de integridade utilizado, componente orientado à conexão que faz análises específicas no membro
  • –max-retries, indica o numero máximo de falhas admitidas pelo monitor antes de declarar um membro como inativo
  • –timeout, define o tempo máximo em que uma conexão deve ser estabelecida para que seja considerada como bem-sucedida, levando-a a expirar caso ultrapasse este intervalo.

Com as informações acima, vamos definir todas as métricas de tempo para 3 segundos e criar o monitor.

2015_11_Lbaas_no_OpenStack_10  figura 10

Nota: Copie o Id do Health Monitor.

Tarefa 4: Associar o Health Monitor ao Pool

Com o ID em mãos, execute o comando abaixo, que relaciona o monitor ao pool “Pool_Webserver”.

neutron lb-healthmonitor-associate <ID_do_HEALTHMONITOR > Pool_Webserver

2015_11_Lbaas_no_OpenStack_11
figura 11

Tarefa 5: Criar um VIP para o Pool

Nosso penúltimo passo é criar o VIP para o balanceador de carga. Para criar o VIP, precisamos de um IP para tráfego na rede interna e um ip flutuante para acesso dos usuários na rede externa.

Vamos primeiro criar o VIP com o endereço interno, utilizando o ID da rede interna, obtido por meio do comando neutron net-list. Para criar o VIP, utilize o comando abaixo.

neutron lb-vip-create –name  VIPWEB –protocol-port  80 –protocol HTTP –subnet-id <SUBNET_ID>   Pool_WebServer

Detalhando:

  • –name, define o nome do VIP
  • –protocol-port, define a porta onde o VIP escutará as conexões, no nosso caso 80 (HTTP)
  • –subnet-id, define o endereço da rede onde o VIP será alocado.

Executando o comando…

2015_11_Lbaas_no_OpenStack_12
figura 12

Tarefa 6: Associar um IP Flutuante ao Pool

Nosso último passo será associar um ip flutuante ao VIP. Esta configuração especificamente é feita por meio do Horizon. Efetue login pelo seu browser favorito ao projeto no qual está sendo criado a nova estrutura de balanceamento.

2015_11_Lbaas_no_OpenStack_13
figura 13

Dica, aproveite o acesso para verificar as suas cotas de IPs flutuantes. Você só precisará de mais um.

2015_11_Lbaas_no_OpenStack_14
figura 14

Em seguida, navegue até Computação > Acesso e Segurança > IPs Flutuantes e em seguida, clique em Alocar IP para Projeto.

2015_11_Lbaas_no_OpenStack_15
figura 15

Selecione a rede correta (mesma rede pública na qual os clientes acessarão sua aplicação. Não confundir com o IP interno dos servidores) e clique em Alocar IP.

2015_11_Lbaas_no_OpenStack_16  figura 16

De volta à tela principal, identifique o IP não associado e clique em Associar.

2015_11_Lbaas_no_OpenStack_17
figura 17

Em “Porta”, selecione o VIP e clique em Associar.

2015_11_Lbaas_no_OpenStack_18
figura 18

Terminamos com as configurações. Agora vamos aos testes!

Em qualquer navegador, acesse http://ip_do_vip. Pressione Ctrl+F5 algumas vezes para verificar a alternância entre os servidores web.

2015_11_Lbaas_no_OpenStack_19
figura 19

Um outro teste que pode ser realizado é executando repetidamente o comando wget –O – http://ip_do_vip em qualquer máquina que tenha acesso ao VIP. Verifique os itens destacados abaixo que diferenciam um servidor do outro.

2015_11_Lbaas_no_OpenStack_20
figura 20

Tendo resultados semelhantes a estes, seu balanceamento está configurado apropriadamente!

Load Balancing como serviço é apenas uma das vantagens de se trabalhar no modelo de Infraestrutura como serviço. Ainda é possível realizar a integração deste componente com appliances físicos como o F5 Big-IP para utilizar os recursos avançados da plataforma do fabricante na sua nuvem, garantindo a disponibilidade e mantendo baixos os custos de gestão e manutenção, itens que só SDN (Software-Defined Network) podem oferecer nessa nova geração de serviços de TI. Até a próxima.