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.

2voto

Seth Points 646

Puisque vous avez défini statiquement votre entrée arp, vos serveurs connaître où trouver la passerelle. Cependant, si votre commutateur ne sait pas où se trouve la passerelle, il ne transmettra pas vos paquets.

Il semble que vous ayez un mauvais commutateur (ou une confusion) entre vos HAproxy et vos serveurs web. Redémarrez-le.

Soit ça, soit vos serveurs HAproxy ne sont pas d'accord sur celui qui a le contrôle, et les deux répondent à des recherches arp pour .211.

Dans le même ordre d'idées, si votre commutateur est surchargé, il se peut que vos proxies HA ne puissent pas communiquer entre eux assez rapidement et qu'ils se désintègrent.

1voto

Davide Gualano Points 804

La prochaine fois que ce problème se produira, je vous suggère d'effectuer des captures de paquets sur les deux hôtes en question, afin de déterminer le trafic ARP observé par chacun d'eux.

Votre machine HAproxy aura très probablement un certain type de tcpdump installé. Pour la machine Windows, vous aurez besoin soit d'un WinPCAP application, comme Wireshark ou Moniteur réseau Microsoft .

En fait, en y réfléchissant, comme le problème semble être spécifiquement lié au protocole ARP, vous pourriez potentiellement enregistrer en continu tout le trafic ARP sur la machine HAproxy et la machine Windows en question, avec un fichier de capture continu de (à titre d'exemple) 10 Mo. Cette taille devrait être suffisante pour qu'au moment où vous détectez une panne, le fichier de capture contienne toujours le trafic ARP antérieur à la panne. (Il vaut la peine d'expérimenter en exécutant la capture pendant une heure environ, pour voir combien de données elle génère).

Exemple de syntaxe de capture pour Linux tcpdump (note, je n'ai pas de boîte Linux à portée de main pour tester ceci ; veuillez tester le comportement de -C et -W avant de les utiliser en production !)

tcpdump -C 10 -i eth1 -w /var/tmp/arp.cap -W 1 arp

Cela devrait vous donner une idée de ce qui échoue précisément. Quand une entrée ARP expire (et selon cet article Comme les nouvelles versions de Windows semblent faire vieillir les entrées "inactives" de manière très agressive, je m'attends à ce que les choses suivantes se produisent :

  1. L'hôte source envoie une requête ARP à l'hôte cible. Les demandes ARP sont généralement diffusées, mais dans le cas où un hôte rafraîchit une entrée existante, l'ARP peut être envoyé en monodiffusion.
  2. L'hôte cible répondra par une réponse ARP. Dans 99 % des cas, il s'agira d'une réponse de type unicast, mais l'hôte cible ne peut pas répondre. RFC permet les réponses de diffusion. (Voir également le RFC concernant Détection des collisions d'adresses IPv4 pour plus de détails).

Aussi simple que cela puisse paraître, il y a un tas d'autres choses qui peuvent interférer avec ce processus :

  • La demande initiale peut ne pas arriver à la cible.
  • La demande peut arriver à la cible, mais la réponse peut ne pas atteindre la source.
  • Une sorte de mécanisme de haute disponibilité peut interférer avec le comportement "normal" du protocole ARP :
    • Comment fonctionne le basculement entre les nœuds HAProxy ? Utilise-t-il une adresse MAC partagée, ou utilise-t-il le protocole ARP gratuit pour faire basculer une adresse IP entre les nœuds ?
    • Un grand nombre d'adresses MAC dans les tables ARP ci-dessus commencent par 00-15-5D, qui est apparemment enregistré par Microsoft. Utilisez-vous une forme de clustering ou autre HA sur la machine Windows en question ? Ces adresses MAC 00-15-5D sont-elles les mêmes que celles qui sont associées aux cartes réseau matérielles lorsque vous effectuez un 'ipconfig /all' sur le serveur Windows ?

Choses à vérifier si/quand cela se reproduit :

  • Regardez les captures de paquets du trafic ARP ; est-ce qu'une partie de la conversation n'a manifestement pas eu lieu ?
  • Vérifiez les tables de pontage/CAM du commutateur ; est-ce que toutes les adresses MAC en question correspondent aux ports auxquels vous vous attendez ?
  • Les autres hôtes du sous-réseau ont-ils des entrées ARP valides pour les adresses IP des hôtes Windows et HAProxy ?
  • Les entrées ARP pour la même IP cible sur plusieurs machines sources différentes se résolvent-elles à la même adresse MAC ? Par exemple, connectez-vous à quelques autres hôtes sur le sous-réseau et vérifiez que 196.211 se résout à la même adresse MAC sur les deux.

0 votes

Nous sommes certainement en train de regarder les captures de paquets maintenant.

0 votes

Malheureusement, les captures de paquets ne nous ont rien montré d'évident, et la machine sur laquelle nous avons fait les captures a un trafic réseau sensible donc nous ne pouvons pas les donner aux experts pour qu'ils les regardent.

0 votes

@Jeff : pouvez-vous fournir des captures montrant uniquement le trafic ARP ? Je serais intéressé de voir le comportement ARP, si ce n'est que cela.

0voto

Rob Charlton Points 368

Nous avons eu un problème similaire avec l'un de nos serveurs de terminaux 2008 R2 où tout le trafic sur la carte réseau s'arrêtait mais restait connecté, et les voyants de la carte réseau indiquaient les communications. Il s'agissait d'un problème permanent qui apparaissait 2 à 3 fois par semaine, mais seulement après environ 12 à 13 heures de fonctionnement (le serveur est redémarré chaque nuit).

J'ai découvert que Seriousbit Netbalancer en était la cause, après avoir essayé (par curiosité) de mettre fin au service NetbalancerService. Le trafic a alors commencé à se déplacer sur l'interface. J'ai depuis désinstallé Netbalancer.

0voto

M-Razavi Points 101

J'ai eu le même problème avec la carte mère Asus lan. Il a été résolu en installant le dernier pilote de realtek site web

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