HAProxy - Verificação de integridade de vários microservices para um servidor

1

Temos dois servidores da web que queremos balancear. Cada servidor tem um aplicativo da web principal que é atingido pelo público. Cada servidor também possui um número de microsserviços dependentes que são usados internamente pelo aplicativo principal.

Queremos que o balanceador de carga exclua o servidor se algum desses microsserviços do servidor for detectado como inativo.

http://server1/mainApp
http://server1/microservice1
http://server1/microservice2

http://server1/mainApp
http://server2/microservice1
http://server2/microservice2

Então, se http://server2/microservice2 cair, queremos server1 para veicular todo o tráfego. Ou se http://server1/microservice1 cair, queremos servidor2 para o tráfego do servidor.

Este tipo de lógica é alcançável no HAproxy? ou existe outra tecnologia que possa fazer isso por nós?

obrigado!

    
por DrGecko 26.08.2015 / 13:36

2 respostas

1

O HAproxy não possui funcionalidades incorporadas para verificações de saúde complexas como esta.

Dito isto, o que você pode fazer é escrever uma página rápida e suja nos backends (ou no LB se for mais fácil / melhor), que executa requisições GET em todos os microservices e retorna um dado código de status ou string para um dado resultado; 200, e 'OK' se estiverem todos bem, 503 e "FAILED" caso contrário.

Eu escrevi uma página .NET semelhante para verificar se um determinado serviço está sendo executado no sistema, porque o IIS estava sempre retornando 200, mesmo que o serviço de backup não estivesse em execução.

Como você só tem 3 microservices, ele deve funcionar bem, mas não tanto se você tiver 10 ou centenas.

    
por 26.08.2015 / 15:44
1

Você pode usar tcp-check . Em uma seção de back-end, adicione algo assim:

option tcp-check
tcp-check connect
tcp-check send GET\ /\mainApp\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)
tcp-check connect
tcp-check send GET\ /\microservice1\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)

Veja: link

    
por 26.08.2015 / 18:26