Wersja TL; DR: Okazuje się, że był to głęboki błąd sieci Broadcom w Windows Server 2008 R2. Zastąpienie sprzętem Intel naprawiło to. Nie używamy już sprzętu Broadcom. Zawsze.
Używamy HAProxy wraz z pulsu z projektu Linux-HA. Używamy dwóch instancji Linuksa, aby zapewnić przełączenie awaryjne. Każdy serwer ma własny publiczny adres IP i pojedynczy adres IP, który jest dzielony między nimi za pomocą interfejsu wirtualnego (eth1: 1) pod adresem IP: 69.59.196.211
Interfejs wirtualny (eth1: 1) IP 69.59.196.211 jest skonfigurowany jako brama dla serwerów Windows za nimi i używamy ip_forwarding do kierowania ruchem.
Od czasu do czasu mamy do czynienia z awarią sieci na jednym z naszych serwerów Windows za bramami Linuksa. HAProxy wykryje, że serwer jest w trybie offline, co możemy zweryfikować, przesyłając go na uszkodzony serwer i próbując wysłać polecenie ping do bramy
Pinging 69.59.196.211 z 32 bajtami danych: Odpowiedź od 69.59.196.220: Host docelowy jest nieosiągalny.
Uruchomienie arp -a
na tym uszkodzonym serwerze pokazuje, że nie ma wpisu adresu bramy (69.59.196.211):
Interfejs: 69.59.196.220 --- 0xa Typ adresu fizycznego adresu internetowego 69.59.196.161 00-26-88-63-c7-80 dynamiczny 69.59.196.210 00-15-5d-0a-3e-0e dynamiczny 69.59.196.212 00-21-5e-4d-45-c9 dynamic 69.59.196.213 00-15-5d-00-b2-0d dynamiczny 69.59.196.215 00-21-5e-4d-61-1a dynamiczny 69.59.196.217 00-21-5e-4d-2c-e8 dynamiczny 69.59.196.219 00-21-5e-4d-38-e5 dynamiczny 69.59.196.221 00-15-5d-00-b2-0d dynamiczny 69.59.196.222 00-15-5d-0a-3e-09 dynamiczny 69.59.196.223 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 statyczny 224.0.0.252 01-00-5e-00-00-fc statyczny 225.0.0.1 01-00-5e-00-00-01 statyczny
Na naszych instancjach bramy linux arp -a
pokazuje:
peak-colo-196-220.peak.org (69.59.196.220) w <incomplete> na eth1 stackoverflow.com (69.59.196.212) o 00: 21: 5e: 4d: 45: c9 [eter] na eth1 peak-colo-196-215.peak.org (69.59.196.215) o 00: 21: 5e: 4d: 61: 1a [eter] na eth1 peak-colo-196-219.peak.org (69.59.196.219) o 00: 21: 5e: 4d: 38: e5 [eter] na eth1 peak-colo-196-222.peak.org (69.59.196.222) o 00: 15: 5d: 0a: 3e: 09 [eter] na eth1 peak-colo-196-209.peak.org (69.59.196.209) o 00: 26: 88: 63: c7: 80 [eter] na eth1 peak-colo-196-217.peak.org (69.59.196.217) o 00: 21: 5e: 4d: 2c: e8 [eter] na eth1
Dlaczego arp czasami ustawia wpis dla tego serwera, który uległ awarii, jako <kompletny>? Czy powinniśmy definiować nasze wpisy arp statycznie? Zawsze zostawiałem arp w spokoju, ponieważ działa 99% czasu, ale w tym jednym przypadku wydaje się, że zawodzi. Czy są jakieś dodatkowe kroki rozwiązywania problemów, które możemy podjąć, aby rozwiązać ten problem?
Rzeczy, które próbowaliśmy
Dodałem statyczny wpis arp do testowania na jednej z bram Linuksa, co wciąż nie pomogło.
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
Ponowne uruchomienie serwera systemu Windows tymczasowo rozwiązuje ten problem bez żadnych innych zmian w sieci, ale z naszego doświadczenia wynika, że problem ten powróci.
Zamiana kart sieciowych i przełączników
Zauważyłem, że lampka łącza na porcie przełącznika dla uszkodzonego serwera Windows działała z prędkością 100 Mb zamiast 1 Gb na uszkodzonym interfejsie. Przeniosłem kabel do kilku innych otwartych portów, a łącze wskazało 100 Mb dla każdego portu, którego próbowałem. Zamieniłem też kabel z tym samym rezultatem. Próbowałem zmienić właściwości karty sieciowej w systemie Windows, a serwer został zamknięty i wymagałem twardego resetu po kliknięciu przycisku Zastosuj. Ten serwer Windows ma dwa fizyczne interfejsy sieciowe, więc zamieniłem kable i ustawienia sieciowe na dwóch interfejsach, aby sprawdzić, czy problem występuje po interfejsie. Jeśli interfejs publiczny ponownie się zawiesi, będziemy wiedzieć, że nie jest to problem z kartą sieciową.
(Wypróbowaliśmy też inny przełącznik, który mamy pod ręką, bez zmian)
Zmiana wersji sterowników sprzętu sieciowego
Mamy ten sam problem z najnowszym sterownikiem Broadcom, a także z wbudowanym sterownikiem, który jest dostarczany z systemem Windows Server 2008 R2.
Wymiana kabli sieciowych
Jako ostatni wysiłek przywołaliśmy kolejną zmianę, która nastąpiła, to wymiana wszystkich kabli połączeniowych między naszymi serwerami / przełącznikami. Kupiliśmy dwa zestawy, jeden zielony o długości 1 stopy - 3 stopy dla interfejsów prywatnych i drugi zestaw czerwonych kabli dla interfejsów publicznych. Wymieniliśmy wszystkie kable z interfejsem publicznym innej marki i przez cały tydzień bez problemu prowadziliśmy nasze serwery ... aaaaaa, a potem problem się powtórzył.
Wyłącz odciążanie sumy kontrolnej, usuń TProxy
Próbowaliśmy również wyłączyć odciążanie sumy kontrolnej TCP / IP w sterowniku, bez zmian. Wyciągamy teraz TProxy i przechodzimy do bardziej tradycyjnego x-forwarded-for
układu sieci bez żadnego fantazyjnego przepisywania adresu IP. Zobaczymy, czy to pomoże.
Przełącz dostawców wirtualizacji
Przy okazji było to w jakiś sposób związane z Hyper-V (obsługujemy na nim maszyny wirtualne z systemem Linux), przeszliśmy na serwer VMWare. Brak zmiany.
Zmień model hosta
Dotarliśmy do końca naszej liny do rozwiązywania problemów i teraz formalnie angażujemy wsparcie Microsoft. Zalecili zmianę modelu hosta:
- http://en.wikipedia.org/wiki/Host_model
- http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
Zrobiliśmy to, a także otrzymaliśmy kilka niepublikowanych poprawek jądra, które prawdopodobnie zostały wprowadzone do wersji R2 z dodatkiem SP1 2008. Bez naprawy.
Wymiana sprzętu karty sieciowej
Ostatecznie zastąpienie sprzętu sieciowego Broadcom sprzętem sieciowym Intel rozwiązało ten problem. Dlatego jestem skłonny myśleć, że to wina sterowników Broadcom Windows Server 2008 R2!