TL;DR version: Turns out this was a deep Broadcom networking bug in Windows Server 2008 R2. Replacing with Intel hardware fixed it. We don't use Broadcom hardware any more. Ever.
Estamos usando HAProxy junto com heartbeat do projeto Linux-HA. Estamos usando duas instâncias do Linux para fornecer um failover. Cada servidor tem seu próprio IP público e um único IP que é compartilhado entre os dois usando uma interface virtual (eth1: 1) no endereço 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 de rede ocasional em um dos nossos servidores Windows atrás de nossos gateways Linux. HAProxy detectará que o servidor está off-line, o que podemos verificar remotando para o servidor com falha e tentando executar o ping no gateway:
Pinging 69.59.196.211 with 32 bytes of data:
Reply from 69.59.196.220: Destination host unreachable.
A execução de 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
Internet Address Physical Address Type
69.59.196.161 00-26-88-63-c7-80 dynamic
69.59.196.210 00-15-5d-0a-3e-0e dynamic
69.59.196.212 00-21-5e-4d-45-c9 dynamic
69.59.196.213 00-15-5d-00-b2-0d dynamic
69.59.196.215 00-21-5e-4d-61-1a dynamic
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 ff-ff-ff-ff-ff-ff static
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 static
Em nossas instâncias de gateway do Linux, arp -a
mostra:
peak-colo-196-220.peak.org (69.59.196.220) at <incomplete> on eth1
stackoverflow.com (69.59.196.212) at 00:21:5e:4d:45:c9 [ether] on eth1
peak-colo-196-215.peak.org (69.59.196.215) at 00:21:5e:4d:61:1a [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-222.peak.org (69.59.196.222) at 00:15:5d:0a:3e:09 [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
Por que arp ocasionalmente definiria a entrada para esse servidor com falha como < incompleto >? Devemos definir nossas entradas arp estaticamente? Eu sempre deixei o arp sozinho, já que ele funciona 99% do tempo, mas neste caso, parece estar falhando. Há outras etapas de solução de problemas que podemos ajudar a resolver esse problema?
COISAS QUE TENHAMOS
Eu adicionei uma entrada de arp estática para testar em um dos gateways do 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 da web do windows soluciona esse problema temporariamente sem outras alterações na rede, mas nossa experiência mostra que esse problema retornará.
Troca de cartões de rede e comutadores
Notei que a luz de link na porta do switch do servidor com falha do Windows estava em execução 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 eu tentei. Eu 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 reinicialização a frio após clicar em aplicar. Esse servidor Windows possui duas interfaces de rede físicas, por isso troquei os cabos e as configurações de rede nas duas interfaces para ver se o problema segue a interface. Se a interface pública cair novamente, saberemos que não é um problema com a placa de rede.
(Também tentamos outro interruptor que temos à mão, sem alteração)
Alterando as versões do driver de hardware de rede
Tivemos o mesmo problema com o driver Broadcom mais recente, bem como com o driver interno fornecido no Windows Server 2008 R2.
Substituição de cabos de rede
Como último esforço, lembramos que outra mudança que ocorreu foi a substituição de todos os patch cords entre nossos servidores / switch. Nós tínhamos comprado dois conjuntos, um verde de comprimentos de 1ft - 3ft para as interfaces privadas e outro conjunto de cabos vermelhos para as interfaces públicas. Nós trocamos todos os cabos de patch de interface pública por uma marca diferente e rodamos nossos servidores sem problemas por uma semana inteira ... aaaaae então o problema ocorreu novamente.
Desative o descarregamento da soma de verificação, remova o TProxy
Também tentamos desabilitar o descarregamento da soma de verificação TCP / IP no driver, sem alteração. Estamos agora retirando o TProxy e mudando para um arranjo de rede x-forwarded-for
mais tradicional, sem qualquer reescrita de endereços IP sofisticados. Vamos ver se isso ajuda.
Alternar provedores de virtualização
Na chance de isso estar relacionado ao Hyper-V de alguma forma (nós hospedamos VMs Linux nele), nós mudamos para o VMWare Server. Nenhuma mudança.
Alternar modelo de host
Chegamos ao final da nossa corda de solução de problemas e agora envolvemos formalmente o suporte da Microsoft. Eles recomendaram a alteração do modelo de host:
Fizemos isso e também recebemos alguns hotfixes de kernel não publicados que provavelmente foram lançados no 2008 R2 SP1. Nenhuma correção.
Substituindo o hardware da placa de rede
Por fim, substituir o hardware de rede da Broadcom pelo hardware de rede da 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!
link