TL; DR версия: Оказывается, это была серьезная ошибка сети Broadcom в Windows Server 2008 R2. Замена аппаратным обеспечением Intel исправила это. Мы больше не используем оборудование Broadcom. Когда-либо.
Мы использовали HAProxy вместе с пульсом из проекта Linux-HA. Мы используем два экземпляра Linux для обеспечения отработки отказа. Каждый сервер имеет свой собственный общедоступный IP-адрес и один IP-адрес, который используется двумя виртуальными интерфейсами (eth1: 1) по IP-адресу: 69.59.196.211.
Виртуальный интерфейс (eth1: 1) IP 69.59.196.211 настроен как шлюз для оконных серверов позади них, и мы используем ip_forwarding для маршрутизации трафика.
Мы иногда испытываем перебои в работе сети на одном из наших серверов Windows за нашими шлюзами Linux. HAProxy обнаружит, что сервер находится в автономном режиме, что мы можем проверить, установив удаленный сервер и попытавшись пропинговать шлюз:
Пинг 69.59.196.211 с 32 байтами данных: Ответ от 69.59.196.220: узел назначения недоступен.
Работа arp -a
на этом отказавшем сервере показывает, что для адреса шлюза нет записи (69.59.196.211):
Интерфейс: 69.59.196.220 --- 0xa Тип физического адреса интернет-адреса 69.59.196.161 00-26-88-63-c7-80 динамический 69.59.196.210 00-15-5d-0a-3e-0e динамический 69.59.196.212 00-21-5e-4d-45-c9 динамический 69.59.196.213 00-15-5d-00-b2-0d динамический 69.59.196.215 00-21-5e-4d-61-1a динамический 69.59.196.217 00-21-5e-4d-2c-e8 динамический 69.59.196.219 00-21-5e-4d-38-e5 динамический 69.59.196.221 00-15-5d-00-b2-0d динамический 69.59.196.222 00-15-5d-0a-3e-09 динамический 69.59.196.223 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 статический 224.0.0.252 01-00-5e-00-00-fc статический 225.0.0.1 01-00-5e-00-00-01 статический
На наших экземплярах шлюза Linux arp -a
показано:
peak-colo-196-220.peak.org (69.59.196.220) на <не завершено> на eth1 stackoverflow.com (69.59.196.212) в 00: 21: 5e: 4d: 45: c9 [эфир] на eth1 peak-colo-196-215.peak.org (69.59.196.215) в 00:21: 5e: 4d: 61: 1a [эфир] на eth1 peak-colo-196-219.peak.org (69.59.196.219) в 00: 21: 5e: 4d: 38: e5 [эфир] на eth1 peak-colo-196-222.peak.org (69.59.196.222) в 00:15: 5d: 0a: 3e: 09 [эфир] на eth1 peak-colo-196-209.peak.org (69.59.196.209) в 00: 26: 88: 63: c7: 80 [эфир] на eth1 peak-colo-196-217.peak.org (69.59.196.217) в 00:21: 5e: 4d: 2c: e8 [эфир] на eth1
Почему arp иногда устанавливает запись для этого отказавшего сервера как <incomplete>? Должны ли мы определять наши записи arp статически? Я всегда оставляю arp в покое, так как он работает в 99% случаев, но в этом случае он, похоже, дает сбой. Есть ли какие-либо дополнительные меры по устранению неполадок, которые мы можем предпринять, чтобы решить эту проблему?
Вещи, которые мы испытали
Я добавил статическую запись arp для тестирования на одном из шлюзов linux, который все еще не помог.
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
Перезагрузка веб-сервера Windows временно решает эту проблему без каких-либо других изменений в сети, но наш опыт показывает, что эта проблема вернется.
Обмен сетевых карт и коммутаторов
Я заметил, что индикатор соединения на порту коммутатора для отказавшего сервера Windows работал на 100 МБ вместо 1 ГБ на отказавшем интерфейсе. Я переместил кабель к нескольким другим открытым портам, и ссылка указала 100 МБ для каждого порта, который я попробовал. Я также поменял местами кабель с тем же результатом. Я попытался изменить свойства сетевой карты в Windows, и сервер заблокировался, и после нажатия кнопки «Применить» потребовалась полная перезагрузка. Этот сервер Windows имеет два физических сетевых интерфейса, поэтому я поменял местами кабели и настройки сети на этих двух интерфейсах, чтобы увидеть, следует ли проблема за интерфейсом. Если общедоступный интерфейс снова выйдет из строя, мы будем знать, что это не проблема с сетевой картой.
(Мы также попробовали другой переключатель, который у нас есть, без изменений)
Изменение версий драйверов сетевого оборудования
У нас была та же проблема с последним драйвером Broadcom, а также со встроенным драйвером, который поставляется в Windows Server 2008 R2.
Замена сетевых кабелей
В качестве последнего усилия мы вспомнили еще одно изменение, произошедшее с заменой всех коммутационных шнуров между нашими серверами / коммутатором. Мы купили два комплекта: один зеленый длиной 1–3 фута для частных интерфейсов и другой комплект красных кабелей для открытых интерфейсов. Мы заменили все соединительные кабели общедоступного интерфейса другой марки и без проблем работали на наших серверах целую неделю ... ааааа, а затем проблема возобновилась.
Отключить разгрузку контрольной суммы, удалить TProxy
Мы также попытались отключить разгрузку контрольной суммы TCP / IP в драйвере, без изменений. Сейчас мы вытаскиваем TProxy и переходим к более традиционному x-forwarded-for
сетевому соглашению без какой-либо сложной перезаписи IP-адреса. Посмотрим, поможет ли это.
Переключить провайдеров виртуализации
В случае, если это каким-то образом связано с Hyper-V (на нем мы размещаем виртуальные машины Linux), мы переключились на VMWare Server. Без изменений.
Переключить модель хоста
Мы достигли конца нашей цепочки устранения неполадок и теперь формально привлекаем поддержку Microsoft. Они рекомендовали изменить модель хоста:
- http://en.wikipedia.org/wiki/Host_model
- http://technet.microsoft.com/en-us/magazine/2007.09.cableguy.aspx
Мы сделали это, и мы также получили некоторые неопубликованные исправления ядра, которые предположительно были добавлены в 2008 R2 SP1. Не исправить.
Замена оборудования сетевой карты
В конечном счете, замена сетевого оборудования Broadcom сетевым оборудованием Intel решила эту проблему для нас. Поэтому я склонен думать, что виноваты драйверы Broadcom для Windows Server 2008 R2!