Wir haben ein kleines Rechenzentrum mit ungefähr hundert Hosts, die auf 3 interne DNS-Server verweisen (Bind 9). Unser Problem tritt auf, wenn einer der internen DNS-Server nicht mehr verfügbar ist. Zu diesem Zeitpunkt arbeiten alle Clients, die auf diesen Server zeigen, sehr langsam.
Das Problem scheint zu sein, dass der Stock-Linux-Resolver nicht wirklich das Konzept des "Failovers" auf einen anderen DNS-Server hat. Sie können das Zeitlimit und die Anzahl der verwendeten Wiederholungsversuche anpassen (und die Drehung so einstellen, dass sie in der Liste angezeigt wird). Unabhängig von den Einstellungen, die Sie für unsere Dienste verwenden, können Sie jedoch eine wesentlich langsamere Leistung erzielen, wenn ein primärer DNS-Server nicht mehr verfügbar ist. Momentan ist dies für uns eine der größten Ursachen für Serviceunterbrechungen.
Meine ideale Antwort wäre so etwas wie "RTFM: Tweak /etc/resolv.conf so ...", aber wenn das eine Option ist, habe ich es nicht gesehen.
Ich habe mich gefragt, wie andere Leute mit diesem Problem umgegangen sind.
Ich kann 3 mögliche Arten von Lösungen sehen:
Verwenden Sie Linux-ha / Pacemaker und Failover-IPs (damit die DNS-IP-VIPs "immer" verfügbar sind). Leider haben wir keine gute Fechtinfrastruktur und ohne Fechten funktioniert der Schrittmacher nicht sehr gut (nach meiner Erfahrung senkt der Schrittmacher die Verfügbarkeit ohne Fechten).
Führen Sie auf jedem Knoten einen lokalen DNS-Server aus und lassen Sie die Datei resolv.conf auf localhost verweisen. Dies würde funktionieren, aber es würde uns viel mehr Dienste zum Überwachen und Verwalten geben.
Führen Sie auf jedem Knoten einen lokalen Cache aus. Leute scheinen nscd als "kaputt" zu betrachten, aber dnrd scheint die richtigen Funktionen zu haben: dns-Server werden als "hoch" oder "runter" markiert und dns-Server werden nicht "runter" verwendet.
Any-Casting scheint nur auf der IP-Routing-Ebene zu funktionieren und hängt von Routenaktualisierungen für Serverausfälle ab. Multicasting schien eine perfekte Antwort zu sein, aber Bind unterstützt kein Broadcasting oder Multicasting, und die Dokumente, die ich finden konnte, scheinen darauf hinzudeuten, dass Multicast-DNS eher auf die Erkennung und automatische Konfiguration von Diensten als auf die reguläre DNS-Auflösung abzielt .
Fehlt mir eine offensichtliche Lösung?
quelle
Antworten:
Ein paar Möglichkeiten. Beides verteilt die DNS-Last auf Ihre DNS-Server.
options rotate
in der resolv.conf. Dies minimiert die Auswirkungen eines Ausfalls des Primärservers. Wenn einer der anderen Server ausfällt, werden die Aktionen verlangsamt.Diese Optionen können mit kombiniert werden
options timeout:1 attempts:5
. Erhöhen Sie die Anzahl der Versuche, wenn Sie das Zeitlimit verringern, damit Sie mit langsamen externen Servern umgehen können.Abhängig von Ihrer Routerkonfiguration können Sie Ihre DNS-Server möglicherweise so konfigurieren, dass sie die IP-Adresse des primären DNS-Servers übernehmen, wenn dieser inaktiv ist. Dies kann mit den obigen Techniken kombiniert werden.
HINWEIS: Ich führe Jahre ohne außerplanmäßige DNS-Ausfälle aus. Wie andere angemerkt haben, würde ich daran arbeiten, die Probleme zu lösen, die zum Ausfall der DNS-Server führen. Die obigen Schritte helfen auch bei falsch konfigurierten DNS-Servern bei der Angabe nicht erreichbarer Nameserver.
quelle
Check out "man resolv.conf". Sie können der resolv.conf eine Timeout-Option hinzufügen. Der Standardwert ist 5, aber wenn Sie die folgende Datei zu resolv.conf hinzufügen, sollte sie auf 1 Sekunde reduziert werden:
quelle
Clustering-Software wie Heartbeat oder Schrittmacher / Corosync ist hier Ihr Freund. Als Beispiel haben wir Schrittmacher / Corosync wie folgt eingerichtet:
Die Produktionszeiten sind rund um die Uhr, aber wir sind der festen Überzeugung, dass jeder Server ausfallen kann, ohne die Kunden zu beeinträchtigen. Option drehen ist nur eine Problemumgehung, das würde ich nicht tun.
quelle
FWIW, dies ist die einzige praktikable Lösung, die ich für dieses Problem gefunden habe. Sie müssen den Server zwar so einschränken, dass nur localhost abgehört wird, die Benutzer haben jedoch keine DNS-Ausfälle in unserer Umgebung bemerkt.
Ein interessanter Nebeneffekt ist, dass, wenn der localhost-Server aus irgendeinem Grund ausfällt, die Standard-Resolver-Bibliotheken das Failover zum nächsten Server offenbar viel schneller als im Standardfall ausführen.
Wir machen das jetzt seit ungefähr 3 Jahren und ich habe kein einziges Problem gesehen, das mit dem Ausfall eines DNS-Servers auf localhost zusammenhängt.
quelle
Wenn ein Nameserver zur Wartung ausfällt, ist es üblich, die Zeitüberschreitungen in der SOA für diese Domäne im Voraus zu reduzieren, damit sich bei der Wartung Änderungen ergeben (z. B. Entfernen von NS-Einträgen vor der Wartung und Zurücksetzen nach der Wartung) ) schnell verbreiten. Beachten Sie, dass dies ein serverseitiger Ansatz ist - das Ändern von Resolvern ist ein clientseitiger Ansatz und ... es sei denn, Sie können mit jedem einzelnen Ihrer Clients sprechen und sie dazu bringen, diese Anpassung auf ihrem Computer vorzunehmen ... dies ist möglicherweise nicht der Fall der richtige Ansatz. Nun, ich denke, Sie haben nur hundert Clients in einem Rechenzentrum mit internen DNS-Servern angegeben, aber möchten Sie wirklich die Konfiguration von hundert Clients ändern, wenn Sie nur die Zone ändern können?
Ich würde Ihnen sagen, welche Werte in der SOA angepasst werden müssen, aber ich habe im Internet gesurft, um genau diese Informationen zu finden, als ich auf diese Frage gestoßen bin.
quelle
Vielleicht können Sie Ihre DNS-Server hinter einen Lastenausgleich stellen? Anscheinend kann LVS UDP ausgleichen. Machen Sie Ihre LB natürlich hoch verfügbar, damit es nicht nur zu einem Ausfall kommt.
quelle
Ich weiß, das mag banal klingen, aber wie wäre es mit dem Aufbau einer stabileren, ausfallsicheren DNS-Infrastruktur als dauerhafte Lösung des Problems?
quelle
Eine netzwerkzentriertere Lösung wäre die Verwendung von zwei DNS-Servern mit demselben (dedizierten) IP- und Anycast- Routing. (Ich habe diese Antwort in diesem Thread bisher nicht bemerkt, aber genau das wird hier verwendet.)
Solange beide aktiv sind, wird der nächste Server verwendet. Wenn einer ausfällt, wird der Datenverkehr für diese IP an den anderen Knoten weitergeleitet, bis er wieder verfügbar ist. Dies ist insbesondere dann sinnvoll, wenn Sie zwei oder mehr Standorte oder Rechenzentren haben.
quelle