Tenho 3 instâncias ( node-0
, node-1
, node-2
) executando 2 serviços - um é a websocket
e o outro é an API
(ambos os serviços são executados em cada instância).
Configuração do grupo-alvo :
Grupo alvo | Exemplo | Caminho de verificação de saúde |
---|---|---|
api-nó-0 | nó-0 | /algum-caminho/api/v1/ping |
api-nó-1 | nó-1 | /algum-caminho/api/v1/ping |
api-nó-2 | nó-2 | /algum-caminho/api/v1/ping |
websocket-nó-0 | nó-0 | /algum-caminho/websocket/v1/ping |
websocket-nó-1 | nó-1 | /algum-caminho/websocket/v1/ping |
websocket-nó-2 | nó-2 | /algum-caminho/websocket/v1/ping |
Ouvinte e regras :
Ouvinte HTTPS:443
Regras:
APIs
- Condição : Caminho
/some-path/api/*
- Ação : Encaminhar para o grupo alvo:
- api-nó-0 (33,33%)
- api-nó-1 (33,33%)
- api-nó-2 (33,33%)
- Adesividade: Desligado
soquete da web
- Condição : Caminho
/some-path/websocket/*
- Ação : Encaminhar para o grupo alvo:
- websocket-nó-0 (33,33%)
- websocket-nó-1 (33,33%)
- websocket-nó-2 (33,33%)
- Adesividade: Desligado
padrão
- Condição : Nenhuma outra regra se aplica
- Ação : Encaminhar para o grupo alvo:
- api-nó-0 (100%)
Atributos da verificação de integridade :
- Intervalo: 30 segundos
- Tempo limite: 5 segundos
- Limiar saudável: 2
- Limiar insalubre: 2
- Limiar saudável: 2 sucessos consecutivos em testes de saúde
- Limite não saudável: 2 falhas consecutivas na verificação de integridade
- Códigos de sucesso: 200
Atributos do balanceador de carga :
- Duração de keepalive do cliente HTTP: 3600 segundos
- Tempo limite de conexão ociosa: 60 segundos
- Cabeçalho X-Forwarded-For: Acrescentar
- Balanceamento de carga entre zonas: Ativado
PS Se precisar de mais informações sobre a configuração, avise-me.
Durante o teste normal, onde todos os grupos de destino estão saudáveis, o ALB parece estar operando conforme o esperado. O problema surge quando eu quero simular um cenário em que um dos serviços em um nó se torna insalubre, eu alterei o caminho de verificação de integridade do IE api-node-1
, ele aparece como insalubre ( Error 404
), mas o tráfego ainda está sendo enviado para ele. Confirmado por meio de logs de acesso e métricas do CloudWatch ( RequestCountPerTarget
). Eu também tentei, como uma simulação de um grupo insalubre, bloquear o acesso do ALB removendo o grupo de segurança relevante da instância. ( Error 400
)
Métodos de teste (com grupo-alvo não íntegro): usando curl (10 a 20 vezes) ou um teste de carga Grafana k6 e tráfego monitorado nos Logs de acesso e no Cloudwatch - o tráfego ainda estava sendo roteado para todas as instâncias e uma delas foi mostrada como não íntegra.
Você pode encontrar outra pergunta que discutiu esse assunto aqui .