Um listener encaminha requisições de service para um grupo de servidores especificado com base nas regras de encaminhamento de tráfego configuradas. O grupo de servidores distribui o tráfego de service para os servidores de backend utilizando um algoritmo de agendamento.
Como funciona
Tipos de grupo de servidores
Tipo de grupo de servidores | Grupo de servidores padrão | Grupo de servidores vServer | Grupo de servidores primário/secundário |
Descrição do tipo | Cada instância CLB inclui um grupo de servidores padrão (exatamente um) | Criado e gerenciado por você | Criado e gerenciado por você |
Número de servidores de backend | Um ou mais | Um ou mais | Dois (um primário, um secundário) |
Recursos |
|
|
|
Cenários | Arquitetura simples onde todas as requisições são encaminhadas para o mesmo grupo de servidores de backend | Arquitetura complexa, como distribuição de requisições de service por nome de domínio ou porta | Serviços que exigem modo ativo-passivo fixo, como bancos de dados ou APIs principais |
Tipos de listener suportados | TCP/UDP/http/HTTPS | TCP/UDP/http/HTTPS | Apenas TCP/UDP |
Configuração de peso
O algoritmo de agendamento determina como o CLB distribui as requisições recebidas entre vários servidores de backend. O peso é um parâmetro usado em algoritmos ponderados para controlar a proporção de tráfego atribuída a cada servidor.
Escopo: Aplica-se apenas ao uso de um algoritmo de agendamento ponderado. Não tem efeito com o algoritmo round-robin.
Intervalo: 0–100, com valor padrão de 100.
Comportamento quando o peso é 0: O servidor para de receber novo tráfego de requisições. As conexões existentes continuam até o fechamento normal e as verificações de integridade continuam sendo executadas. Esse comportamento é comum em desligamentos graduais.
Efeito das alterações de peso: Os ajustes de peso aplicam-se apenas a novas conexões e não afetam as conexões existentes. Em cenários de conexão persistente, a redistribuição de tráfego após uma alteração de peso ocorre lentamente.
-
Proporção de distribuição de tráfego: Sob o algoritmo Weighted Round Robin (WRR), cada servidor de backend recebe tráfego proporcional ao seu peso. Por exemplo, se dois servidores tiverem pesos de 100 e 1 respectivamente (peso total: 101), o servidor com peso 1 receberá aproximadamente 1/101 (menos de 1%) de todas as requisições.
NotaQuando o grupo de servidores já possui um servidor de backend com peso alto (por exemplo, peso 100), um servidor recém-adicionado com peso baixo (por exemplo, peso 1) pode não receber tráfego visível por um período prolongado. Esse é o comportamento esperado do WRR: em condições de pouco tráfego, as poucas requisições alocadas para o servidor de peso baixo podem passar despercebidas por muito tempo.
Recomendação: Ao adicionar um novo servidor de backend, defina seu peso inicial como pelo menos 10. Após confirmar que o servidor está recebendo tráfego normalmente, ajuste o peso conforme suas necessidades de negócios.
Alta disponibilidade do service
Ative as verificações de integridade do CLB para enviar requisições periodicamente e verificar o status do servidor.
Verificação de integridade bem-sucedida: O servidor está íntegro e o CLB encaminha tráfego para ele.
Falha na verificação de integridade: O servidor não está íntegro e o CLB para de enviar novo tráfego de requisições para ele até que se recupere.
As verificações de integridade do CLB originam-se do bloco CIDR 100.64.0.0/10. Garanta que o iptables dos seus servidores de backend ou outros softwares de segurança de terceiros não bloqueiem este bloco CIDR. Caso contrário, as verificações de integridade falharão e causarão interrupção do service.
Os grupos de servidores primário/secundário dependem das verificações de integridade para failover automático:
Se o servidor primário falhar na verificação de integridade, o tráfego muda para o servidor secundário. Por padrão, o servidor secundário não passa por verificações de integridade; portanto, garanta sua disponibilidade manualmente para assegurar um failover contínuo.
O tempo de failover depende do período de tempo limite de resposta da verificação de integridade configurado. Quando o servidor primário se recupera, o tráfego retorna automaticamente para ele.
Aplicabilidade
-
Relações de associação:
Listeners e grupos de servidores são recursos com escopo definido para uma instância CLB. As informações sobre listeners e grupos de servidores não são compartilhadas entre diferentes instâncias CLB.
Um grupo de servidores pode ser vinculado a múltiplos listeners, mas um listener pode ser vinculado a apenas um grupo de servidores por vez.
Os listeners de Camada 4 do CLB não suportam o uso da mesma instância ecs como servidor de backend e cliente simultaneamente. Se necessário, use um listener de Camada 7.
-
Vinculação de servidores de backend:
-
O CLB suporta a vinculação apenas de servidores de backend da mesma conta e região.
Instâncias CLB de rede privada: Podem vincular apenas servidores de backend dentro da vpc da instância CLB.
Instâncias CLB de rede pública: Todos os servidores de backend vinculados devem pertencer à mesma vpc.
-
Todos os tipos de grupos de servidores CLB suportam a vinculação dos seguintes recursos: Elastic Compute Service (ecs), Elastic Network Interface (ENI) e Elastic Container Instance (ECI).
Apenas ENIs já vinculadas a uma instância ecs podem ser adicionadas. Tanto o endereço ip privado primário quanto os endereços ip privados auxiliares da ENI são suportados.
Quando uma instância ecs usada como servidor de backend passa por migração a quente, as conexões persistentes do CLB podem ser interrompidas. O service é retomado após a reconexão. Garanta que sua aplicação implemente um mecanismo de reconexão automática.
-
-
Modificabilidade da configuração:
Modificabilidade da configuração
Adicionar/remover grupo de servidores
Modificar porta
Modificar peso
Grupo de servidores padrão
Após criar e associar um listener, a porta não pode ser modificada
Grupo de servidores vServer
Grupo de servidores primário/secundário
A alteração da função primária/secundária não é suportada
Configure grupos de servidores
console
Grupo de servidores padrão
Não é necessária criação. Cada instância CLB inclui um grupo de servidores padrão.
-
Adicionar servidores:
-
Acesse a página CLB – Instances, clique em no ID da instância alvo, selecione a aba Default Server Group e clique em Add.
Defina Server Type e Resource Group para filtrar os recursos disponíveis.
Para adicionar uma ENI, primeiro ative o modo avançado e, em seguida, clique em no ícone de adição ao lado da instância ecs com a ENI vinculada para localizar a ENI alvo. Selecione a ENI e escolha o IP.
-
Configure a porta e o peso:
-
Configurar porta: Acesse a aba Listener, clique em Add Listener. Na página do assistente Backend Servers, defina a Port para os servidores no grupo de servidores padrão. Todos os servidores no grupo de servidores padrão sob o mesmo listener devem usar a mesma porta.
Você só pode especificar a porta ao adicionar o listener. Não é possível modificá-la posteriormente.
Configurar peso: Defina o Weight para os servidores selecionados.
-
-
Grupo de servidores vServer
Acesse a página CLB – Instances, clique em no ID da instância alvo, selecione vServer groups e clique em Create vServer Group.
-
Add servidores:
Defina Server Type e Resource Group para filtrar os recursos disponíveis.
Para adicionar uma ENI, primeiro ative o modo avançado e, em seguida, clique em no ícone de adição ao lado da instância ecs com a ENI vinculada para localizar a ENI alvo. Selecione a ENI e escolha o IP.
Configure a Port e o Weight para os servidores selecionados. Clique em Add Port para atribuir múltiplas portas diferentes ao mesmo servidor de backend.
Acesse a página CLB – Instances, clique em no ID da instância alvo, selecione Primary/Secondary Server Groups e clique em Create Primary/Secondary Server Group.
-
Add servidores:
Defina Server Type e Resource Group para filtrar os recursos disponíveis.
Para adicionar uma ENI, primeiro ative o modo avançado e, em seguida, clique em no ícone de adição ao lado da instância ecs com a ENI vinculada para localizar a ENI alvo. Selecione a ENI e escolha o IP.
Apenas dois servidores de backend podem ser adicionados.
Configure a Port para os servidores selecionados. Clique em Add Port para atribuir múltiplas portas diferentes ao mesmo servidor de backend. Após adicionar, selecione Primary Server para definir a relação primário/secundário.
Chame AddBackendServers para adicionar servidores de backend.
Chame SetBackendServers para definir os pesos dos servidores de backend.
Chame RemoveBackendServers para remover servidores de backend.
Chame CreateVServerGroup para crie um grupo de servidores vServer e adicionar servidores de backend com configurações de porta e peso.
Chame AddVServerGroupBackendServers / RemoveVServerGroupBackendServers para adicionar ou remover servidores de backend de um grupo de servidores vServer especificado.
Chame DeleteVServerGroup para exclua um grupo de servidores vServer.
Chame CreateMasterSlaveServerGroup para crie um grupo de servidores primário/secundário.
Chame DeleteMasterSlaveServerGroup para exclua um grupo de servidores primário/secundário.
Grupo de servidores padrão e grupo de servidores vServer: É possível adicionar ou remover instâncias ecs de backend a qualquer momento e alternar entre diferentes instâncias ecs. Para garantir a estabilidade do service, ative as verificações de integridade antes de realizar essas operações e garanta que pelo menos uma instância ecs íntegra permaneça no backend.
Grupo de servidores primário/secundário: Não suportado.
Implante o Global Traffic Manager acima do CLB e implante múltiplas instâncias CLB em várias regiões. Alterne entre as instâncias CLB para alcançar a vinculação entre regiões.
Use o Application Load Balancer (ALB) ou o Network Load Balancer (NLB), que suportam vinculação de backend entre regiões.
Origem: Bloco CIDR reservado da alibaba cloud
100.64.0.0/10.Segurança: Este bloco CIDR é reservado pela alibaba cloud e não pode ser alocado para outros usuários; portanto, não representa risco de segurança.
Recomendação: Garanta que o iptables dos seus servidores de backend ou outros softwares de segurança de terceiros não bloqueiem este bloco CIDR para manter a disponibilidade do service.
Motivo: A compressão Gzip está ativada na configuração do listener do CLB e o navegador do cliente suporta compressão.
Ação: Para desativá-la, desligue a compressão Gzip nas configurações do listener no console do CLB ou mude para um listener TCP.
Observação: O ecs de backend recebe muitas requisições GET de endereços ip internos com User-Agent
KeepAliveClient.Motivo: O protocolo do listener é TCP, mas o protocolo de verificação de integridade está definido como http. Quando um listener TCP usa verificações de integridade http, ele usa o método GET por padrão.
Solução: Alinhe o protocolo do listener e o protocolo de verificação de integridade (por exemplo, use ambos TCP ou ambos http).
Restrição: A porta para o grupo de servidores padrão só pode ser definida ao criar o listener, e todos os servidores de backend sob o mesmo listener devem usar a mesma porta.
Solução: Para configure portas de backend diferentes para o mesmo listener, use um grupo de servidores vServer.
Use um listener de Camada 7 do CLB (http/HTTPS).
Use uma instância NLB e desative a preservação de ip do cliente para o grupo de servidores. Consulte How can an ECS instance serve as both a backend server and a client in NLB?
Classic Load Balancer (CLB): Usa conexões http de curta duração por padrão. O CLB insere o cabeçalho
Connection: closenas requisições http. Após processar a requisição, o servidor de backend envia um pacote FIN para fechar a conexão com base neste cabeçalho. Cada fechamento entra no estado TIME-WAIT (padrão de 60 segundos), levando a um acúmulo rápido sob alta concorrência.Application Load Balancer (ALB): Suporta conexões persistentes http (keep-alive) por padrão. Uma única conexão TCP lida com múltiplas requisições, reduzindo os fechamentos de conexão e, consequentemente, as conexões TIME-WAIT.
Mude para um listener de Camada 4 (TCP) do CLB. As verificações de integridade de Camada 4 enviam um pacote RST após um handshake bem-sucedido para fechar a conexão sem entrar em TIME-WAIT.
Migre para o ALB para aproveitar seu mecanismo padrão de reutilização de conexões persistentes http.
Realize dimensionamento ou ajustes de peso fora dos horários de pico e aguarde o fechamento natural das conexões antigas.
Garanta configurações consistentes de TCP Keepalive nos servidores de backend para evitar acúmulo de conexões em alguns servidores.
Revise os logs de verificação de integridade para identificar flutuações de status.
Aumente ligeiramente o intervalo de verificação de integridade e o limiar de não integridade para reduzir falsos positivos.
Verifique se a configuração do código de resposta da verificação de integridade está correta.
Confirme se você está usando um algoritmo de agendamento ponderado (round-robin ignora pesos).
Defina os pesos de acordo com a capacidade real de processamento de cada servidor de backend.
Se a instância ecs também está vinculada a outras instâncias CLB.
Se a instância ecs fornece outros serviços diretamente. Use o comando
netstatpara verificar o status de escuta da porta.Falha na verificação de integridade: A porta do servidor de backend está inacessível ou a aplicação não está escutando na porta esperada, causando falha na verificação de integridade. No console do CLB, confirme o status de verificação de integridade do servidor e verifique a escuta da porta e o status da aplicação no servidor de backend. Se as verificações de integridade falharem, consulte How do I troubleshoot health check failures?
Peso definido como 0: Servidores com peso 0 não recebem novo tráfego de requisições. Verifique o peso do servidor no grupo de servidores e garanta que seja maior que 0. Para detalhes, consulte a seção Configuração de peso acima.
Adicionado ao grupo de servidores errado: Cada listener do CLB é vinculado a um grupo de servidores específico (padrão ou vServer). Se o novo servidor for adicionado a um grupo não vinculado ao listener alvo, ele não receberá tráfego para esse listener. Confirme o grupo de servidores realmente vinculado ao listener e adicione o servidor ao grupo correto.
iptables ou software de segurança de terceiros bloqueia o bloco CIDR de verificação de integridade: As verificações de integridade do CLB usam o bloco CIDR
100.64.0.0/10. Se o iptables ou outro software de segurança de terceiros no servidor de backend bloquear este bloco CIDR, as verificações de integridade falharão e o CLB tratará o servidor como não íntegro. Garanta que as regras relevantes não bloqueiem este bloco CIDR.Janela de verificação de integridade não atingida: Após adicionar um servidor de backend, o CLB aguarda uma verificação de integridade bem-sucedida antes de encaminhar tráfego. Aguarde brevemente e verifique se o tráfego flui normalmente.
O algoritmo de agendamento Consistent Hashing (CH) impede a alocação de tráfego: Quando um listener usa o algoritmo de agendamento consistent hashing (CH) baseado em ip de source, as requisições são atribuídas a servidores específicos com base no resultado do hash do ip de source. Após adicionar um novo servidor, apenas as requisições cujo hash do ip de source mapeia para o novo servidor são encaminhadas para ele. Se o número de clientes for pequeno ou os IPs de source estiverem concentrados, o novo servidor pode não receber tráfego por um longo período. No console do CLB, acesse a página de detalhes da instância, clique em na aba Listener e verifique o algoritmo de agendamento para o listener correspondente. Se estiver definido como Consistent Hashing (CH), considere mudar para Weighted Round Robin (WRR) ou Round Robin (RR).
Se a requisição do cliente usar http/1.1 ou http/2.0, o listener de Camada 7 acessa os servidores de backend usando http/1.1.
Se a requisição do cliente usar uma versão diferente de http/1.1 ou http/2.0, o listener de Camada 7 acessa os servidores de backend usando http/1.0.
Grupo de servidores primário/secundário
API
Grupo de servidores padrão
Grupo de servidores vServer
Grupo de servidores primário/secundário
FAQ
Posso ajustar o número de instâncias ecs enquanto a instância CLB está em execução?
As instâncias ecs de backend podem usar sistemas operacionais diferentes?
Sim, elas podem ser diferentes.
O CLB não restringe os sistemas operacionais das instâncias ecs de backend, desde que os serviços de aplicação e os dados sejam consistentes. Recomendamos usar o mesmo sistema operacional para facilitar o gerenciamento e a manutenção.
Posso usar instâncias ecs de regiões diferentes como servidores de backend?
O CLB não suporta a vinculação direta de servidores de backend entre regiões. Para implementar implantação entre regiões, use uma das seguintes soluções:
Por que há requisições frequentes de IPs começando com 100 para minha instância ecs?
Essas requisições vêm das verificações de integridade e monitoramento de disponibilidade do balanceador de carga.
Se as verificações de integridade falharem, consulte How do I troubleshoot health check failures?
Minha instância ecs não tem compressão ativada, mas as respostas http do CLB estão compactadas. Por quê?
Uma instância ecs usando http/1.0 suporta codificação de transferência fragmentada (chunked)?
Sim.
Por que minha instância ecs de backend do CLB recebe frequentemente requisições com User-Agent KeepAliveClient?
Posso modifique a porta do servidor no grupo de servidores padrão?
A modificação direta não é suportada.
O listener de Camada 4 do CLB suporta o uso da mesma instância ecs como servidor de backend e cliente?
Não. Essa configuração causa um loop.
Alternativas:
Por que meu backend do CLB tem muitas conexões TIME-WAIT, enquanto o ALB tem poucas?
O Classic Load Balancer (CLB) e o Application Load Balancer (ALB) usam mecanismos de conexão diferentes ao interagir com servidores de backend.
Para reduzir o acúmulo de TIME-WAIT, considere estas opções:
Por que o tráfego está distribuído de forma desigual entre os servidores de backend?
Causa comum | Descrição | Solução de problemas e solução |
Persistência de sessão | Com a persistência de sessão ativada, as requisições do mesmo cliente sempre vão para o mesmo servidor de backend. Com poucos clientes (por exemplo, durante testes de estresse com clientes limitados), o tráfego se concentra em servidores específicos. | Verifique se a persistência de sessão está ativada e avalie se seu service realmente a exige. |
Conexões persistentes | As conexões persistentes estabelecidas não são redistribuídas quando os pesos mudam. Em cenários de conexão persistente, o tráfego muda lentamente após ajustes de peso. | |
Falhas ou flutuações na verificação de integridade | Alguns servidores de backend falham nas verificações de integridade e não conseguem aceitar requisições, ou seu status de integridade flutua entre íntegro e não íntegro, causando distribuição instável de tráfego. | |
Baixo volume total de requisições | Verifique as métricas de monitoramento do CLB. Pequenos desequilíbrios são normais quando o volume total de requisições é baixo. | Observe a distribuição de tráfego após aumentar o volume de requisições. Se o desequilíbrio persistir sob alta carga, investigue outras causas. |
Configuração de peso inadequada | Os pesos dos servidores não correspondem à capacidade real de processamento, fazendo com que alguns servidores fiquem sobrecarregados enquanto outros permanecem ociosos. | |
Algoritmo de agendamento Consistent Hashing (CH) | Quando um listener usa o algoritmo de agendamento consistent hashing (CH) baseado em ip de source, as requisições do mesmo ip de source são sempre encaminhadas para o mesmo servidor de backend. Quando o número de clientes é pequeno ou os IPs de source estão concentrados, alguns servidores de backend podem não receber tráfego. O CH é adequado para cenários que exigem afinidade de sessão com IPs de cliente distribuídos uniformemente. Quando os IPs de source estão concentrados, considere mudar para um algoritmo de agendamento diferente. | Faça login no console do CLB, acesse a página de detalhes da instância, clique em na aba Listener, clique em no listener alvo para visualize seus detalhes e verifique se o Scheduling Algorithm está definido como Consistent Hashing (CH). Se estiver, considere mudar para Weighted Round Robin (WRR) ou Round Robin (RR) para melhorar a distribuição de tráfego. |
Como removo com segurança uma instância ecs de backend do CLB?
Remover uma instância ecs diretamente pode causar desconexões transitórias. Primeiro, defina o peso da instância ecs como 0. Aguarde a conclusão das conexões existentes antes de remover a instância. Para detalhes sobre o comportamento do peso quando definido como 0, consulte a seção Configuração de peso acima.
Se as requisições de negócios continuarem após a remoção da instância ecs, verifique o seguinte:
Por que nenhum tráfego é encaminhado para um servidor de backend recém-adicionado?
Se o CLB não encaminhar tráfego para um servidor de backend recém-adicionado, verifique o seguinte:
Qual protocolo o CLB usa para encaminhar requisições aos servidores de backend para listeners de Camada 7?
Independentemente de o listener de Camada 7 usar http ou HTTPS, o CLB sempre encaminha requisições aos servidores de backend usando o protocolo http. O mapeamento de versão http é o seguinte: