Versão TL; DR: Acontece que este foi um erro profundo na rede Broadcom no Windows Server 2008 R2. A substituição pelo hardware Intel o corrigiu. Não usamos mais o hardware Broadcom. Sempre.
Temos usado o HAProxy junto com a pulsação do projeto Linux-HA. Estamos usando duas instâncias linux para fornecer um failover. Cada servidor possui seu próprio IP público e um único IP, que é compartilhado entre os dois usando uma interface virtual (eth1: 1) no IP: 69.59.196.211
A interface virtual (eth1: 1) IP 69.59.196.211 é configurada como o gateway para os servidores Windows por trás deles e usamos ip_forwarding para rotear o tráfego.
Estamos enfrentando uma interrupção ocasional da rede em um de nossos servidores Windows atrás de nossos gateways Linux. O HAProxy detectará que o servidor está offline, o que podemos verificar remotamente ao servidor com falha e tentando executar ping no gateway:
Ping 69.59.196.211 com 32 bytes de dados: Resposta de 69.59.196.220: Host de destino inacessível.
A execução arp -a
neste servidor com falha mostra que não há entrada para o endereço do gateway (69.59.196.211):
Interface: 69.59.196.220 --- 0xa Tipo de endereço físico do endereço da Internet 69.59.196.161 00-26-88-63-c7-80 dynamic 69.59.196.210 00-15-5d-0a-3e-0e dinâmico 69.59.196.212 00-21-5e-4d-45-c9 dinâmico 69.59.196.213 00-15-5d-00-b2-0d dinâmico 69.59.196.215 00-21-5e-4d-61-1a dinâmico 69.59.196.217 00-21-5e-4d-2c-e8 dynamic 69.59.196.219 00-21-5e-4d-38-e5 dynamic 69.59.196.221 00-15-5d-00-b2-0d dynamic 69.59.196.222 00-15-5d-0a-3e-09 dynamic 69.59.196.223 estática ff-ff-ff-ff-ff-ff estática 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.252 01-00-5e-00-00-fc static 225.0.0.1 01-00-5e-00-00-01 estático
Em nossas instâncias de gateway linux, arp -a
mostra:
peak-colo-196-220.peak.org (69.59.196.220) em <incomplete> on eth1 stackoverflow.com (69.59.196.212) às 00: 21: 5e: 4d: 45: c9 [éter] no eth1 peak-colo-196-215.peak.org (69.59.196.215) às 00: 21: 5e: 4d: 61: 1a [éter] em eth1 peak-colo-196-219.peak.org (69.59.196.219) às 00: 21: 5e: 4d: 38: e5 [éter] em eth1 peak-colo-196-222.peak.org (69.59.196.222) às 00: 15: 5d: 0a: 3e: 09 [éter] em eth1 peak-colo-196-209.peak.org (69.59.196.209) às 00: 26: 88: 63: c7: 80 [éter] em eth1 peak-colo-196-217.peak.org (69.59.196.217) às 00: 21: 5e: 4d: 2c: e8 [éter] em eth1
Por que o arp definiria ocasionalmente a entrada para esse servidor com falha como <incompleto>? Deveríamos estar definindo nossas entradas arp estaticamente? Eu sempre deixei o arp sozinho, pois funciona 99% do tempo, mas neste caso parece estar falhando. Existem etapas adicionais para solução de problemas que podemos seguir para resolver esse problema?
Coisas que tentamos
Eu adicionei uma entrada arp estática para teste em um dos gateways linux que ainda não ajudou.
root@haproxy2:~# arp -a
peak-colo-196-215.peak.org (69.59.196.215) at 00:21:5e:4d:61:1a [ether] on eth1
peak-colo-196-221.peak.org (69.59.196.221) at 00:15:5d:00:b2:0d [ether] on eth1
stackoverflow.com (69.59.196.212) at 00:21:5e:4d:45:c9 [ether] on eth1
peak-colo-196-219.peak.org (69.59.196.219) at 00:21:5e:4d:38:e5 [ether] on eth1
peak-colo-196-209.peak.org (69.59.196.209) at 00:26:88:63:c7:80 [ether] on eth1
peak-colo-196-217.peak.org (69.59.196.217) at 00:21:5e:4d:2c:e8 [ether] on eth1
peak-colo-196-220.peak.org (69.59.196.220) at 00:21:5e:4d:30:8d [ether] PERM on eth1
root@haproxy2:~# arp -i eth1 -s 69.59.196.220 00:21:5e:4d:30:8d
root@haproxy2:~# ping 69.59.196.220
PING 69.59.196.220 (69.59.196.220) 56(84) bytes of data.
--- 69.59.196.220 ping statistics ---
7 packets transmitted, 0 received, 100% packet loss, time 6006ms
A reinicialização do servidor web Windows resolve esse problema temporariamente, sem outras alterações na rede, mas nossa experiência mostra que esse problema voltará.
Troca de placas de rede e switches
Percebi que a luz do link na porta do comutador para o servidor Windows com falha estava sendo executada a 100 Mb em vez de 1 Gb na interface com falha. Mudei o cabo para várias outras portas abertas e o link indicou 100Mb para cada porta que tentei. Também troquei o cabo com o mesmo resultado. Tentei alterar as propriedades da placa de rede no Windows e o servidor travou e exigiu uma redefinição após clicar em aplicar. Este servidor Windows possui duas interfaces de rede físicas, então troquei os cabos e as configurações de rede nas duas interfaces para verificar se o problema segue a interface. Se a interface pública cair novamente, saberemos que não há problema com a placa de rede.
(Também tentamos outra opção que temos à mão, sem alterações)
Alterando as versões do driver de hardware de rede
Tivemos o mesmo problema com o driver Broadcom mais recente, bem como o driver interno fornecido no Windows Server 2008 R2.
Substituindo cabos de rede
Como último esforço, lembramos que outra mudança ocorreu foi a substituição de todos os cabos de conexão entre nossos servidores / comutadores. Nós compramos dois conjuntos, um verde de 1 a 3 pés para as interfaces privadas e outro conjunto de cabos vermelhos para as interfaces públicas. Trocamos todos os cabos de patch da interface pública por uma marca diferente e executamos nossos servidores sem problemas por uma semana inteira ... aaaaaa e então o problema se repetiu.
Desabilitar o descarregamento da soma de verificação, remover o TProxy
Também tentamos desativar a descarga da soma de verificação TCP / IP no driver, sem alterações. Agora estamos retirando o TProxy e mudando para um x-forwarded-for
arranjo de rede mais tradicional sem precisar reescrever os endereços IP. Vamos ver se isso ajuda.
Alternar entre provedores de virtualização
Na hipótese de isso estar relacionado ao Hyper-V de alguma forma (nós hospedamos VMs Linux nele), mudamos para o VMWare Server. Nenhuma mudança.
Alternar modelo de host
Chegamos ao final da nossa solução de problemas e agora estamos envolvendo formalmente o suporte da Microsoft. Eles recomendaram alterar o modelo do host:
- http://en.wikipedia.org/wiki/Host_model
- http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
Fizemos isso e também recebemos alguns hotfixes de kernel não publicados que provavelmente foram lançados no 2008 R2 SP1. Sem reparo.
Substituindo o hardware da placa de rede
Por fim, a substituição do hardware de rede Broadcom pelo hardware de rede Intel corrigiu esse problema para nós. Portanto, estou inclinado a pensar que os drivers do Broadcom Windows Server 2008 R2 estão com defeito!