O problema
Estou tentando configurar vários web farms (para sites diferentes) seguindo oArquitetura NLB+ARR. Digamos que eu tenha 6 VMs:
- Cluster ARR+NLB de 2 VMs. Ele recebe tráfego e o encaminha para servidores de conteúdo. Regras de reescrita de URL com condições de cabeçalho de host HTTP são usadas para rotear solicitações para servidores de conteúdo corretos.
- Servidores de conteúdo do site 1: 2 VMs. Hospedagemhttp://www.meusite1.com/
- Servidores de conteúdo do site 2: 2 VMs. Hospedagemhttp://www.meusite2.com/
Tudo funciona bem, testei que tenho alta disponibilidade em ambas as camadas.
Agora, por alguma razão, o Site 2 deve funcionar em modo ativo/passivo, para que apenas 1 VM receba tráfego, enquanto a outra é para failover. De certa forma, quero algo semelhante ao modo de host único do NLB, mas para o ARR.
Como isso pode ser alcançado?
Soluções alternativas
Tentei várias abordagens indiretas para alcançar o comportamento desejado.
- Algoritmo de balanceamento de carga.Tentei definir pesos redondos e robin para 1/0. O problema é que você não pode definir 0. Deve ser pelo menos 1. Você pode definir 4 bilhões + smth / 1, mas não tenho certeza se isso garante que nenhuma solicitação aleatória vá para o segundo nó.
- Nome do host para afinidade do servidor.Nas configurações avançadas do Host Name Affinity, consigo configurar apenas 1 servidor para ser alocado no Site 2. Funciona, mas o problema é que as tabelas de roteamento não estão sincronizadas entre as 2 VMs ARR. Assim, de vez em quando o ARR1 afiniza o tráfego para um nó, enquanto o ARR2 para o outro, que não é ativo/passivo.
- Afinidade de nome de host + host único NLB.Como uma modificação da abordagem anterior, também posso mudar o NLB para o modo de host único para resolver o problema de sincronização da tabela de roteamento. O problema neste caso é que também estou desativando o balanceamento de carga ARR para o Site 1.
- Afinidade de nome de host + host único NLB + 2 endereços IP.Se eu adicionar o segundo endereço IP à solução anterior, criar 2 clusters NLB trabalhando em modos diferentes, tudo deverá funcionar bem. O problema é que não quero pagar pelo segundo IP público.
Nenhuma das soluções é perfeita.
A imagem da solução ideal
Eu realmente gostaria de saber uma maneira de colocar o ARR no modo de host único, como pode ser feito para o NLB. E sincronize o roteamento entre os nós.
Alguém sabe como fazer isso? Ou conhece abordagens alternativas?
Responder1
Encontrei uma maneira que parece funcionar, embora não completamente. Está descritoaqui. A ideia é usar o algoritmo de balanceamento de carga 'Server Variable Hash' e 'HTTP_HOST' como variável. Dessa forma, todas as instâncias do ARR mapeiam um determinado host para o mesmo servidor de conteúdo. Eu testei se eles retornam para outro servidor disponível se o mapeado não estiver funcionando.
O problema com a solução, entretanto, é que você não pode controlar em qual servidor de conteúdo um host é mapeado; isso é determinado por uma função hash. No entanto, de certa forma, está correto - se você tem medo de tornar qualquer nó ativo, como pode esperar um failover confiável? Você precisa ter certeza de todos os seus servidores de conteúdo ao mesmo tempo.
Outro problema é que você não pode usar vários nomes de host para cada site, porque provavelmente você os mapeará em servidores diferentes.