TL; versione DR: si è scoperto che si trattava di un profondo bug di rete Broadcom in Windows Server 2008 R2. La sostituzione con hardware Intel l'ha risolto. Non utilizziamo più l'hardware Broadcom. Mai.
Abbiamo usato HAProxy insieme al battito cardiaco del progetto Linux-HA. Stiamo utilizzando due istanze di Linux per fornire un failover. Ogni server ha il proprio IP pubblico e un singolo IP condiviso tra i due tramite un'interfaccia virtuale (eth1: 1) su IP: 69.59.196.211
L'interfaccia virtuale (eth1: 1) IP 69.59.196.211 è configurata come gateway per i server Windows dietro di loro e usiamo ip_forwarding per instradare il traffico.
Stiamo vivendo un'interruzione di rete occasionale su uno dei nostri server Windows dietro i nostri gateway Linux. HAProxy rileverà che il server non è in linea, cosa che possiamo verificare remotando al server fallito e tentando di eseguire il ping del gateway:
Pinging 69.59.196.211 con 32 byte di dati: Risposta del 69.59.196.220: Host di destinazione non raggiungibile.
L'esecuzione arp -a
su questo server guasto indica che non esiste alcuna voce per l'indirizzo gateway (69.59.196.211):
Interfaccia: 69.59.196.220 --- 0xa Indirizzo Internet Tipo di indirizzo fisico 69.59.196.161 00-26-88-63-c7-80 dinamico 69.59.196.210 00-15-5d-0a-3e-0e dinamico 69.59.196.212 00-21-5e-4d-45-c9 dinamico 69.59.196.213 00-15-5d-00-b2-0d dinamico 69.59.196.215 00-21-5e-4d-61-1a dinamico 69.59.196.217 00-21-5e-4d-2c-e8 dinamico 69.59.196.219 00-21-5e-4d-38-e5 dinamico 69.59.196.221 00-15-5d-00-b2-0d dinamico 69.59.196.222 00-15-5d-0a-3e-09 dinamico 69.59.196.223 ff-ff-ff-ff-ff-ff statico 224.0.0.22 01-00-5e-00-00-16 statico 224.0.0.252 01-00-5e-00-00-fc statico 225.0.0.1 01-00-5e-00-00-01 statico
Sul nostro gateway linux le istanze arp -a
mostrano:
peak-colo-196-220.peak.org (69.59.196.220) a <incomplete> su eth1 stackoverflow.com (69.59.196.212) alle 00: 21: 5e: 4d: 45: c9 [etere] su eth1 peak-colo-196-215.peak.org (69.59.196.215) alle 00: 21: 5e: 4d: 61: 1a [etere] su eth1 peak-colo-196-219.peak.org (69.59.196.219) alle 00: 21: 5e: 4d: 38: e5 [etere] su eth1 peak-colo-196-222.peak.org (69.59.196.222) alle 00: 15: 5d: 0a: 3e: 09 [etere] su eth1 peak-colo-196-209.peak.org (69.59.196.209) alle 00: 26: 88: 63: c7: 80 [etere] su eth1 peak-colo-196-217.peak.org (69.59.196.217) alle 00: 21: 5e: 4d: 2c: e8 [etere] su eth1
Perché arp occasionalmente imposta la voce per questo server guasto su <incomplete>? Dovremmo definire staticamente le nostre voci arp? Ho sempre lasciato l'arp da solo poiché funziona il 99% delle volte, ma in questo caso sembra fallire. Ci sono ulteriori passaggi per la risoluzione dei problemi che possiamo prendere per aiutare a risolvere questo problema?
COSE CHE ABBIAMO PROVATO
Ho aggiunto una voce arp statica per i test su uno dei gateway Linux che ancora non ha aiutato.
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
Il riavvio del server Web Windows risolve temporaneamente questo problema senza altre modifiche alla rete, ma la nostra esperienza mostra che questo problema tornerà.
Scambio di schede di rete e switch
Ho notato che la spia di collegamento sulla porta dello switch per il server Windows non funzionante funzionava a 100 Mb anziché a 1 GB sull'interfaccia non riuscita. Ho spostato il cavo in diverse altre porte aperte e il collegamento indicava 100 Mb per ciascuna porta che ho provato. Ho anche scambiato il cavo con lo stesso risultato. Ho provato a modificare le proprietà della scheda di rete in Windows e il server si è bloccato e ho richiesto un hard reset dopo aver fatto clic su Applica. Questo server Windows ha due interfacce di rete fisiche, quindi ho scambiato i cavi e le impostazioni di rete sulle due interfacce per vedere se il problema segue l'interfaccia. Se l'interfaccia pubblica si interrompe, sapremo che non si tratta di un problema con la scheda di rete.
(Abbiamo anche provato un altro interruttore che abbiamo a portata di mano, nessun cambiamento)
Modifica delle versioni del driver hardware di rete
Abbiamo riscontrato lo stesso problema con l'ultimo driver Broadcom e con il driver integrato fornito in Windows Server 2008 R2.
Sostituzione dei cavi di rete
Come ultimo disperato tentativo, ci siamo ricordati di un altro cambiamento che è avvenuto nella sostituzione di tutti i cavi patch tra i nostri server / switch. Avevamo acquistato due set, uno verde di lunghezza 1ft - 3ft per le interfacce private e un altro set di cavi rossi per le interfacce pubbliche. Abbiamo sostituito tutti i cavi patch dell'interfaccia pubblica con un marchio diverso e abbiamo gestito i nostri server senza problemi per un'intera settimana ... aaaaae il problema si è ripresentato.
Disabilita il checksum offload, rimuovi TProxy
Abbiamo anche provato a disabilitare l'offload del checksum TCP / IP nel driver, nessuna modifica. Ora stiamo estraendo TProxy e ci spostiamo in una x-forwarded-for
disposizione di rete più tradizionale senza alcuna riscrittura sofisticata dell'indirizzo IP. Vedremo se questo aiuta.
Cambia provider di virtualizzazione
Per caso questo era in qualche modo correlato a Hyper-V (su di esso ospitiamo VM Linux), siamo passati a VMWare Server. Nessun cambiamento.
Cambia modello host
Abbiamo raggiunto la fine della nostra corda per la risoluzione dei problemi e ora stiamo formalmente coinvolgendo il supporto Microsoft. Hanno raccomandato di cambiare il modello host:
- http://en.wikipedia.org/wiki/Host_model
- http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
Lo abbiamo fatto e abbiamo anche ottenuto alcuni hotfix del kernel non pubblicati che sono stati presumibilmente implementati in R2 SP1 2008. Nessuna correzione.
Sostituzione dell'hardware della scheda di rete
Alla fine, la sostituzione dell'hardware di rete Broadcom con l'hardware di rete Intel ha risolto questo problema per noi. Quindi sono propenso a pensare che i driver Broadcom Windows Server 2008 R2 siano in errore!