TL; DR-Version: Es stellte sich heraus, dass dies ein tiefer Broadcom-Netzwerkfehler in Windows Server 2008 R2 war. Das Ersetzen durch Intel-Hardware wurde behoben. Wir verwenden keine Broadcom-Hardware mehr. Je.
Wir haben HAProxy zusammen mit Heartbeat aus dem Linux-HA-Projekt verwendet. Wir verwenden zwei Linux-Instanzen, um ein Failover bereitzustellen. Jeder Server verfügt über eine eigene öffentliche IP-Adresse und eine einzelne IP-Adresse, die über eine virtuelle Schnittstelle (eth1: 1) unter IP: 69.59.196.211 von beiden geteilt wird
Die virtuelle Schnittstelle (eth1: 1) IP 69.59.196.211 ist als Gateway für die Windows-Server dahinter konfiguriert, und wir verwenden ip_forwarding, um den Datenverkehr weiterzuleiten.
Es kommt gelegentlich zu einem Netzwerkausfall auf einem unserer Windows-Server hinter unseren Linux-Gateways. HAProxy erkennt, dass der Server offline ist. Dies können wir überprüfen, indem wir eine Remoteverbindung zum ausgefallenen Server herstellen und versuchen, das Gateway per Ping zu erreichen:
Ping 69.59.196.211 mit 32 Datenbytes: Antwort von 69.59.196.220: Zielhost nicht erreichbar.
Die Ausführung arp -a
auf diesem ausgefallenen Server zeigt, dass für die Gateway-Adresse (69.59.196.211) kein Eintrag vorhanden ist :
Schnittstelle: 69.59.196.220 --- 0xa Internetadresse Typ der physischen Adresse 69.59.196.161 00-26-88-63-c7-80 dynamic 69.59.196.210 00-15-5d-0a-3e-0e dynamisch 69.59.196.212 00-21-5e-4d-45-c9 dynamisch 69.59.196.213 00-15-5d-00-b2-0d dynamic 69.59.196.215 00-21-5e-4d-61-1a dynamisch 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 dynamisch 69.59.196.223 ff-ff-ff-ff-ff-ff statisch 224.0.0.22 01-00-5e-00-00-16 statisch 224.0.0.252 01-00-5e-00-00-fc statisch 225.0.0.1 01-00-5e-00-00-01 statisch
Auf unseren Linux-Gateway-Instanzen arp -a
zeigt:
peak-colo-196-220.peak.org (69.59.196.220) bei <incomplete> auf eth1 stackoverflow.com (69.59.196.212) um 00: 21: 5e: 4d: 45: c9 [ether] auf eth1 peak-colo-196-215.peak.org (69.59.196.215) um 00: 21: 5e: 4d: 61: 1a [ether] auf eth1 peak-colo-196-219.peak.org (69.59.196.219) um 00: 21: 5e: 4d: 38: e5 [ether] auf eth1 peak-colo-196-222.peak.org (69.59.196.222) um 00: 15: 5d: 0a: 3e: 09 [ether] auf 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) um 00: 21: 5e: 4d: 2c: e8 [ether] auf eth1
Warum hat arp den Eintrag für diesen ausgefallenen Server gelegentlich als <unvollständig> festgelegt? Sollen wir unsere Arp-Einträge statisch definieren? Ich habe arp immer alleine gelassen, da es 99% der Zeit funktioniert, aber in diesem einen Fall scheint es zu scheitern. Gibt es zusätzliche Schritte zur Fehlerbehebung, mit denen wir dieses Problem beheben können?
DINGE, DIE WIR VERSUCHT HABEN
Ich habe einen statischen Arp-Eintrag zum Testen auf einem der Linux-Gateways hinzugefügt, der immer noch nicht geholfen hat.
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
Ein Neustart des Windows-Webservers behebt dieses Problem vorübergehend, ohne dass Änderungen am Netzwerk vorgenommen werden. Unsere Erfahrung zeigt jedoch, dass dieses Problem erneut auftritt.
Austausch von Netzwerkkarten und Switches
Ich bemerkte, dass die Verbindungsleuchte am Port des Switches für den ausgefallenen Windows-Server auf der ausgefallenen Schnittstelle mit 100 MB anstelle von 1 GB lief. Ich habe das Kabel auf mehrere andere offene Ports verschoben, und der Link zeigte 100 MB für jeden Port an, den ich ausprobiert habe. Mit dem gleichen Ergebnis habe ich auch das Kabel getauscht. Ich habe versucht, die Eigenschaften der Netzwerkkarte in Windows zu ändern, und der Server wurde gesperrt. Nach dem Klicken auf Übernehmen war ein Hard-Reset erforderlich. Dieser Windows-Server verfügt über zwei physische Netzwerkschnittstellen. Daher habe ich die Kabel und Netzwerkeinstellungen der beiden Schnittstellen vertauscht, um festzustellen, ob das Problem auf die Schnittstelle zurückzuführen ist. Wenn die öffentliche Schnittstelle wieder ausfällt, wissen wir, dass es kein Problem mit der Netzwerkkarte gibt.
(Wir haben auch versucht, einen anderen Schalter zur Hand zu haben, keine Änderung)
Ändern der Netzwerkhardwaretreiberversionen
Wir hatten das gleiche Problem mit dem neuesten Broadcom-Treiber sowie dem in Windows Server 2008 R2 integrierten Treiber.
Netzwerkkabel ersetzen
Als letzte Anstrengung haben wir uns daran erinnert, dass eine weitere Änderung darin bestand, alle Patchkabel zwischen unseren Servern / Switches auszutauschen. Wir hatten zwei Sets gekauft, eines mit einer Länge von 1 - 3 Fuß für die privaten Schnittstellen und ein weiteres Set mit roten Kabeln für die öffentlichen Schnittstellen. Wir haben alle öffentlichen Schnittstellen-Patchkabel gegen andere Marken ausgetauscht und unsere Server eine Woche lang ohne Probleme betrieben ... und dann trat das Problem erneut auf.
Deaktivieren Sie die Prüfsummenverschiebung und entfernen Sie TProxy
Wir haben auch versucht, das TCP / IP-Prüfsummen-Offload im Treiber zu deaktivieren, keine Änderung. Wir ziehen jetzt TProxy heraus und gehen zu einer traditionelleren x-forwarded-for
Netzwerkanordnung über, ohne dass die IP-Adresse neu geschrieben werden muss. Mal sehen, ob das hilft.
Wechseln Sie den Virtualisierungsanbieter
Da dies auf irgendeine Weise mit Hyper-V zu tun hatte (wir hosten Linux-VMs darauf), sind wir auf VMWare Server umgestiegen. Keine Änderung.
Host-Modell wechseln
Wir haben das Ende unserer Problembehandlung erreicht und beziehen jetzt offiziell den Microsoft-Support ein. Sie empfahlen, das Host-Modell zu ändern:
- http://en.wikipedia.org/wiki/Host_model
- http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
Wir haben das getan und wir haben auch einige unveröffentlichte Kernel-Hotfixes bekommen, die vermutlich in 2008 R2 SP1 eingeführt wurden. Keine Reparatur.
Ersetzen der Netzwerkkartenhardware
Letztendlich hat das Ersetzen der Broadcom-Netzwerkhardware durch Intel-Netzwerkhardware dieses Problem für uns behoben. Daher neige ich zu der Annahme, dass die Broadcom Windows Server 2008 R2-Treiber fehlerhaft sind!