web-dev-qa-db-fra.com

Éviter les délais d'attente DNS lorsqu'un serveur DNS échoue

Nous avons un petit centre de données avec une centaine d'hôtes pointant sur 3 serveurs DNS internes (BIND 9). Notre problème vient lorsque l'un des serveurs DNS internes devient indisponible. À ce moment-là, tous les clients qui pointent sur ce serveur commencent à effectuer très lentement.

Le problème semble être que le résolveur de stock Linux n'a pas vraiment le concept d'échec de "défaillant" à un serveur DNS différent. Vous pouvez ajuster le délai d'attente et le nombre de tentatives qu'il utilise (et définissez la rotation de sorte qu'il fonctionnera via la liste), mais peu importe les paramètres que l'on utilise nos services effectuer beaucoup plus lentement si un serveur DNS principal devient indisponible. Pour le moment, il s'agit de l'une des plus grandes sources de perturbations de service pour nous.

Ma réponse idéale serait quelque chose comme "RTFM: tweak /etc/resolv.conf comme ceci ...", mais si c'est une option que je ne l'ai pas vue.

Je me demandais comment les autres personnes ont géré ce problème?

Je peux voir 3 types de solutions possibles:

  • Utilisez Linux-Ha/Pacemaker et Basculer IPS (afin que les VIP DNS IP sont "toujours" disponibles). Hélas, nous n'avons pas de bonne infrastructure d'escrime, et sans escrime cardiaque ne fonctionne pas très bien (dans mon expérience, le stimulateur de stimulateur réduit la disponibilité sans clôture).

  • Exécutez un serveur DNS local sur chaque nœud et avez le point resolv.conf sur localhost. Cela fonctionnerait, mais cela nous donnerait beaucoup plus de services à surveiller et à gérer.

  • Exécutez un cache local sur chaque noeud. Les gens semblent considérer NSCD "cassé", mais DNRD semble avoir la fonction de bonne fonctionnalité: il marque les serveurs DNS comme haut ou bas, et n'utilisera pas de serveurs DNS 'Down'.

N'importe quel casting semble fonctionner uniquement au niveau de routage IP et dépend des mises à jour des itinéraires pour l'échec du serveur. Multi-casting semblait être une réponse parfaite, mais la liaison ne supporte pas la radiodiffusion ou la multi-moulage, et les documents que je pouvais trouver semblent suggérer que MultiCast DNS est plus destiné à la découverte de services et à la configuration automatique plutôt que la résolution du DNS régulière plutôt que la résolution de DNS régulière .

Est-ce que je manque une solution évidente?

18
Neil Katin

Quelques options. Les deux distribueront la charge DNS sur vos serveurs DNS.

  • Essayez d'utiliser options rotate dans resolv.conf. Cela minimisera l'impact du serveur principal étant en baisse. Si l'un des autres serveurs est en panne, il ralentira les actions.
  • Utilisez une commande de noms de noms différente sur différents clients. Cela permettra à certains clients de courir normalement si le serveur DNS principal est en panne. Cela diffuse l'impact d'un serveur DNS hors service autour.

Ces options peuvent être combinées avec options timeout:1 attempts:5. Augmentez les tentatives si vous réduisez le délai d'attente afin que vous puissiez gérer des serveurs externes lents.

Selon votre configuration de routeur, vous pourrez peut-être configurer vos serveurs DNS pour prendre en charge l'adresse IP du serveur DNS principal lorsqu'il est en panne. Cela peut être combiné avec les techniques ci-dessus.

Remarque: je cours des années sans pannes DNS non planifiées. Comme d'autres l'ont noté, je travaillerais à la résolution des problèmes causant les serveurs DNS à échouer. Les étapes ci-dessus, aident également avec des serveurs DNS mal configurés avec spécifiant des serveurs de noms inaccessibles.

15
BillThor

Découvrez "l'homme resolv.conf". Vous pouvez ajouter une option de délai d'attente au resolv.conf. La valeur par défaut est 5, mais l'ajout de ce qui suit à resolv.conf doit l'amener à 1 seconde:

options Timeout: 1

4
Niall Donegan

Le logiciel de clustering tel que Heartbeat ou Pacemaker/Corosync est votre ami ici. En tant qu'exmple, nous avons mis en place Pacemaker/Corosync comme suit:

  • Associer chaque serveur avec un autre
  • Par paire ont 2 vips DNS, généralement un sur chaque
  • Devrait soit lier ou le serveur échouer, le VIP se déplace à l'autre serveur dans les millisecondes

Les heures de production sont 24x7, mais nous croyons fermement qu'il devrait être possible pour chaque serveur d'échec sans impact sur les clients. L'option Tourner est simplement une solution de contournement, je ne ferais pas cela.

3
Dennis Kaarsemaker

Exécutez un serveur DNS local sur chaque nœud et avez le point resolv.conf sur localhost. Cela fonctionnerait, mais cela nous donnerait beaucoup plus de services à surveiller et à gérer.

FWIW, c'est la seule solution réalisable que j'ai trouvée pour ce problème. Vous devez restreindre le serveur pour écouter uniquement sur localhost, mais il a complètement éliminé les utilisateurs qui remarquent les pannes DNS dans notre environnement.

Un effet secondaire intéressant est que si le serveur localhost diminue pour une raison quelconque, les bibliothèques de résolution standard semblent gérer le basculement au serveur suivant beaucoup plus rapidement que dans le cas standard.

Nous l'avons fait pendant environ 3 ans maintenant et je n'ai pas vu un seul problème pouvant être lié à l'échec/la panne d'un serveur DNS exécutant sur localhost.

Si un serveur de noms est en train de réduire la maintenance, il s'agit de procédure normale de réduire les délais d'attente dans SOA pour ce domaine à l'avance, de sorte que lorsque la maintenance se produise, des modifications (comme supprimer =NS enregistrements avant la maintenance et les repasse après la maintenance) se propager rapidement. Notez qu'il s'agit d'une approche côté serveur - changeant des résolvers est une approche côté client et ... à moins que vous ne puissiez parler à chacun et chacun de vos clients et les amener à faire ce réglage sur leur machine ... pourrait ne pas être la bonne approche. Eh bien, je suppose que vous avez dit seulement une centaine de clients dans un centre de données utilisant des serveurs DNS internes, mais vraiment Vous souhaitez modifier la configuration sur cent clients lorsque vous pouvez simplement changer la zone?

Je vous dirais quelles valeurs dans le SOA = ajuster, mais je surfais sur le Web pour savoir que les informations exactes lorsque je rencontrais sur cette question.

2
Brenda J. Butler

Peut-être que vous pouvez mettre vos serveurs DNS derrière un équilibreur de charge? Apparemment, LVS peut équilibrer UDP. Évidemment, rendez votre LB hautement disponible, donc ce n'est pas un seul point d'échec.

1
rxvt

Je sais que cela pourrait sembler trier, mais que diriez-vous de construire une infrastructure DNS plus stable et résiliente comme une solution permanente au problème.

0
joeqwerty

Une solution plus centrée sur le réseau utiliserait deux serveurs DNS avec la même adresse IP (dédiée) et Anycast Routage. (Je n'ai pas remarqué cette réponse dans ce fil jusqu'à présent, mais c'est ce qui est utilisé ici.)

Tant que les deux sont en hausse, le serveur le plus proche est utilisé. Si l'on tombe en panne, la circulation de cette adresse IP sera acheminée vers l'autre nœud jusqu'à ce qu'elle ne renverse. Cela a particulièrement de sens si vous avez deux ou plusieurs emplacements ou centres de données.

0
Axel Beckert