32 votes

L'adaptateur réseau de Windows Server 2008 R2 cesse de fonctionner et nécessite un redémarrage brutal.

Version TL;DR : Il s'est avéré qu'il s'agissait d'un bogue profond du réseau Broadcom dans Windows Server 2008 R2. Le remplacement par du matériel Intel a permis de le résoudre. Nous n'utilisons plus de matériel Broadcom. Jamais.

Nous avons utilisé HAProxy ainsi que battement de cœur du projet Linux-HA. Nous utilisons deux instances linux pour fournir un basculement. Chaque serveur a sa propre IP publique et une seule IP qui est partagée entre les deux en utilisant une interface virtuelle (eth1:1) à l'IP : 69.59.196.211.

L'interface virtuelle (eth1:1) IP 69.59.196.211 est configurée comme la passerelle pour les serveurs Windows derrière eux et nous utilisons ip_forwarding pour router le trafic.

Nous rencontrons une panne de réseau occasionnelle sur l'un de nos serveurs Windows derrière nos passerelles linux. HAProxy détecte que le serveur est hors ligne, ce que nous pouvons vérifier en nous connectant à distance au serveur défaillant et en tentant d'envoyer un ping à la passerelle :

Pinging 69.59.196.211 with 32 bytes of data:
Reply from 69.59.196.220: Destination host unreachable.

Running arp -a sur ce serveur en panne montre que il n'y a pas d'entrée pour l'adresse de la passerelle (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

Sur nos instances de passerelle linux arp -a montre :

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

Pourquoi arp définit-il occasionnellement l'entrée de ce serveur défaillant comme <incomplete> ? Devrions-nous définir nos entrées arp de manière statique ? J'ai toujours laissé arp tranquille car il fonctionne 99% du temps, mais dans ce cas précis, il semble échouer. Y a-t-il d'autres mesures de dépannage que nous pouvons prendre pour résoudre ce problème ?

LES CHOSES QUE NOUS AVONS ESSAYÉES

J'ai ajouté une entrée arp statique pour le test sur l'une des passerelles linux, mais cela n'a toujours pas aidé.

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

Le redémarrage du serveur web Windows résout temporairement ce problème sans autre modification du réseau, mais notre expérience montre que ce problème reviendra.

Remplacement des cartes réseau et des commutateurs

J'ai remarqué que le voyant de liaison sur le port du commutateur pour le serveur Windows en panne fonctionnait à 100Mb au lieu de 1Gb sur l'interface en panne. J'ai déplacé le câble vers plusieurs autres ports ouverts et le lien indiquait 100Mb pour chaque port que j'ai essayé. J'ai également échangé le câble avec le même résultat. J'ai essayé de modifier les propriétés de la carte réseau dans Windows, mais le serveur s'est bloqué et a dû être réinitialisé après avoir cliqué sur Appliquer. Ce serveur Windows a deux interfaces réseau physiques, j'ai donc échangé les câbles et les paramètres réseau sur les deux interfaces pour voir si le problème suit l'interface. Si l'interface publique se bloque à nouveau, nous saurons qu'il ne s'agit pas d'un problème de carte réseau.

(Nous avons également essayé un autre interrupteur que nous avons sous la main, aucun changement).

Modification des versions des pilotes de matériel réseau

Nous avons rencontré le même problème avec le dernier pilote Broadcom, ainsi qu'avec le pilote intégré fourni avec Windows Server 2008 R2.

Remplacement des câbles réseau

Dans un dernier effort, nous nous sommes souvenus d'un autre changement qui s'est produit : le remplacement de tous les cordons de raccordement entre nos serveurs et nos commutateurs. Nous avions acheté deux jeux, un vert de longueurs 1ft - 3ft pour les interfaces privées et un autre jeu de câbles rouges pour les interfaces publiques. Nous avons remplacé tous les câbles de l'interface publique par des câbles de marque différente et nos serveurs ont fonctionné sans problème pendant une semaine entière... et puis le problème est réapparu.

Désactiver le déchargement de la somme de contrôle, supprimer TProxy

Nous avons également essayé de désactiver le déchargement de la somme de contrôle TCP/IP dans le pilote, sans changement. Nous sommes en train de retirer TProxy et de passer à un système plus traditionnel, le x-forwarded-for sans réécriture fantaisiste de l'adresse IP. Nous verrons si cela aide.

Prestataires de services de virtualisation des commutateurs

Dans l'éventualité où cela serait lié à Hyper-V d'une manière ou d'une autre (nous hébergeons des VM Linux sur ce système), nous sommes passés à VMWare Server. Aucun changement.

Modèle de commutateur hôte

Nous sommes arrivés au bout de notre rouleau de dépannage et nous faisons maintenant officiellement appel à l'assistance de Microsoft. Ils ont recommandé de changer le modèle d'hôte :

C'est ce que nous avons fait, et nous avons également obtenu quelques correctifs non publiés du noyau qui ont probablement été intégrés dans 2008 R2 SP1. Aucun correctif.

Remplacement du matériel de la carte réseau

Finalement, le remplacement du matériel réseau Broadcom par du matériel réseau Intel a permis de résoudre ce problème. Je suis donc enclin à penser que les pilotes Broadcom de Windows Server 2008 R2 sont en cause !

http://blog.serverfault.com/post/broadcom-die-mutha/

0 votes

Il convient également de noter que nous utilisons également TProxy (proxy transparent) pour renvoyer l'adresse IP réelle du trafic entrant par HAProxy. blog.loadbalancer.org/

0 votes

2 votes

Ne faites jamais confiance aux paramètres automatiques dans un environnement de production. Réglez la vitesse sur ce qu'elle doit être, et mettez un moniteur dessus pour être sûr.

7voto

De http://linux-ip.net/html/ether-arp.html :

Si aucune entrée de cache ARP n'existe pour une IP de destination demandée, le noyau génère des requêtes ARP mcast_solicit jusqu'à ce qu'il reçoive une réponse. Pendant cette période de recherche, l'entrée du cache ARP sera listée dans un état incomplet. Si la recherche n'aboutit pas après le nombre spécifié de requêtes ARP, l'entrée du cache ARP sera listée dans un état d'échec. Si la recherche aboutit, le noyau enregistre la réponse dans le cache ARP et réinitialise les temporisateurs de confirmation et de mise à jour.

Il semble que votre boîtier passerelle ne répond pas (ou répond trop lentement) aux requêtes ARP de votre boîtier passerelle. Est-ce que cela <incomplete> éventuellement passer à <failed> ? Quel matériel réseau avez-vous entre le serveur et la passerelle ? Est-il possible que les demandes de diffusion ARP soient filtrées ou bloquées quelque part entre les deux hôtes ?

5voto

Max Clark Points 51

Cela signifie que vous avez envoyé une requête à l'adresse, que l'IP a un enregistrement PTR (d'où le nom) mais que rien n'a répondu de la machine en question. Le plus souvent, cela est dû à un masque de sous-réseau mal défini ou, dans le cas d'IP liées à une interface de bouclage, à une interface eth.

Qu'est-ce que 196.220 ? Quelle est sa relation avec 196.211 ? Je suppose que .220 est l'un des hôtes HA Proxy. Qu'est-ce qui apparaît lorsque vous exécutez ifconfig -a et arp -a sur cet hôte ?

0 votes

Si cela se produit de manière intermittente, cela me fait penser qu'il ne s'agit pas d'un masque de sous-réseau mal défini (ce qui, il est vrai, est souvent la cause de l'échec des machines à répondre aux requêtes ARP).

0 votes

Le post me semble assez clair. L'adresse IP .211 est une IP virtuelle partagée par les instances HAProxy. L'adresse IP .220 est attribuée à une machine Windows qui, périodiquement, perd sa capacité à communiquer avec l'adresse IP .211 (comme on peut le voir dans la ligne "Interface :" de la sortie ARP citée dans le post).

0 votes

196.220 est l'ip du serveur Windows défaillant - 196.211 est l'ip virtuelle pour les interfaces haproxy.

4voto

Evan Anderson Points 140581

Comme le dit Max Clark, le <incomplete> signifie simplement que 69.59.196.211 a envoyé une requête ARP à 69.59.196.220 et n'a pas encore reçu de réponse. (Au pays de Windows, vous verrez cela comme un mappage ARP vers "00-00-00-00-00-00"... Il me semble étrange, BTW, que vous ne voyez pas un tel mappage ARP sur 69.59.196.220 pour 69.59.196.211.)

J'ai tendance à ne pas aimer utiliser les entrées ARP statiques car, d'après mon expérience, ARP a généralement toujours fait son travail.

Si c'était moi, je reniflerais l'interface Ethernet appropriée sur la machine Windows "défaillante" (69.59.196.220) pour observer son ARP'ing pour 69.59.196.211, et pour observer comment / si elle répond aux demandes ARP de 69.59.196.211. J'envisagerais également de renifler la machine passerelle pour ARP uniquement ( tcpdump -i interface-name arp ) pour voir à quoi ressemble le trafic ARP du côté de la machine Linux.

Je sais, d'après le blog que vous avez un réseau back-end et un réseau front-end. Pendant ces pannes, le serveur Windows "défaillant" (69.59.196.220) a-t-il des problèmes de communication avec les autres machines du réseau frontal, ou a-t-il seulement des problèmes de communication avec sa passerelle ? Je suis curieux de savoir si vous vous adressez à la machine défaillante par le biais du réseau frontal ou du réseau dorsal lorsque vous la prenez sur le fait.

Que faites-vous pour "résoudre" le problème lorsqu'il se produit ?

Editar:

Je vois dans votre mise à jour que vous redémarrez la machine Windows "défaillante" pour résoudre le problème. Avant de faire cela la prochaine fois, pouvez-vous vérifier que la machine Windows est capable de "parler" sur son interface frontale ? En outre, prenez une copie de la table de routage de la machine Windows ( route print ) lors d'un échec, également. (J'essaie de vérifier si la carte réseau / le pilote ne se déchaîne pas sur la machine Windows, en fait).

0 votes

Lorsque ce problème se produit, nous pouvons redémarrer le serveur web défaillant (196.220) et il fonctionnera - notre expérience a montré que dans les 24 heures, il tombera à nouveau en panne.

1 votes

Il serait intéressant de savoir si le serveur a pu parler, du tout, sur la NIC attachée au segment avec la machine .211 (qui, d'après ce que j'ai compris de votre mise à jour, est maintenant échangée avec le segment back-end). Mon instinct me dit que la cause principale de ce problème sera une carte réseau détraquée, mais nous verrons bien...

1 votes

Lorsque cela se produit, la machine ne peut absolument pas parler sur la NIC frontale (publique). du tout . La carte réseau arrière (privée) n'est pas affectée. J'ai toujours pensé que c'était le pilote de la carte réseau qui devenait fou, mais la question est "pourquoi" ? (également : cela se produit avec le dernier pilote Broadcom ainsi qu'avec le pilote Wink28 R2 par défaut) Je vais vérifier les journaux d'événements après le redémarrage, ce qui prend plus de 10 minutes car il faut d'abord qu'il fasse un écran bleu dans le cadre de l'arrêt. Je les ai effacés avant.

2voto

Drew Points 331

Ce document montre les différents états (tableau 2.1). Incomplet signifie qu'il a envoyé une première requête ARP (vraisemblablement après un stale, un delay, une sonde) mais n'a pas encore reçu de réponse.

2voto

DarthNoodles Points 912

La raison pour laquelle l'ARP statique sur le nœud haproxy n'est pas utile est que votre serveur web ne sait toujours pas comment retourner à la passerelle.

L'ARP statique sur le serveur web empêche vos serveurs web de changer de passerelle lorsque l'un des noeuds haproxy tombe en panne -- je suppose que l'interface virtuelle partage la même adresse MAC que l'eth1 du noeud haproxy, donc vous devez coder en dur l'une des deux passerelles dans chaque serveur web.

Avez-vous installé un logiciel de sécurité sur le serveur web défaillant ? J'ai passé une longue nuit avec un serveur Windows 2008 sur lequel était installé Symantec Endpoint Security - il installe un code de filtrage dans la pile réseau qui l'empêche de voir les paquets ARP de la passerelle. La solution (fournie par Microsoft) consiste à supprimer l'entrée de registre qui charge la DLL.

L'autre fois que ce problème s'est produit, la suppression de l'ensemble de la carte réseau du gestionnaire de périphériques et la réinstallation ont semblé aider.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X