Warum wird NTP eher mit LOCAL als mit dem Remote-Server synchronisiert?

11

Ich versuche also, mein aktuelles NTP-Setup zu debuggen, und habe festgestellt, dass der Versatz von meinem einzelnen konfigurierten Server mehr als 3 Sekunden beträgt und nicht angepasst wird. Das Sternchen auf LOCAL (0) in der ntpq-Ausgabe scheint darauf hinzudeuten, dass das System problemlos mit sich selbst synchronisiert und nicht mit dem Server 10.130.33.201 (einer weiteren Linux-Box auf unserem System, mit der alles synchronisiert werden soll).

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.130.33.201   LOCAL(0)         9 u   49   64  377    0.242  -3742.2   1.049
*LOCAL(0)        .LOCL.          10 l    2   64  377    0.000    0.000   0.001

Und das ist meine ntp.conf-Datei. Geschrieben von jemand anderem, daher bin ich mir nicht 100% sicher, ob alles korrekt ist.

server 10.130.33.201 burst iburst minpoll 4 maxpoll 11
driftfile /mnt/active/etc/ntp.drift

restrict -4 default  nomodify nopeer notrap
restrict -6 default  ignore

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

Ich habe über Burst und Iburst und Minpoll / Maxpoll gelesen, daher ist mir klar, dass diese möglicherweise nicht benötigt werden, aber ich denke, das hat nichts mit meiner aktuellen Ausgabe zu tun.

Aufgrund der Bereitstellung dieser Konfigurationsdatei ist viel Arbeit erforderlich, um sie zu ändern. Daher hoffe ich, dass nichts wirklich geändert werden muss. Ich hoffe, dass ich nicht verstehe, wie NTP funktioniert.


BEARBEITEN -

Es sieht also so aus, als wäre dies ein Duplikat dieser Frage , aber ich glaube nicht, dass das Poster eine ausreichende Antwort erhalten hat. Daher möchte ich immer noch wissen, warum die Ortszeit dem Server vorgezogen wird. Gemäß einer der folgenden Antworten habe ich versucht, das preferSchlüsselwort in der Serverzeile der Konfiguration zu verwenden und neu zu starten, aber das scheint keine Auswirkungen gehabt zu haben.

Wenn ich alle "lokalen" Zeilen in der Konfiguration entferne, wie aus der Antwort auf die andere Frage hervorgeht, was passiert, wenn der Server nicht erreichbar ist? Stirbt NTP oder versucht es einfach weiter?


WICHTIGE BEARBEITUNG -

Ok, normalerweise hat 10.130.33.201 (Der "Server") keinen Zugang zum Internet und verfügt nicht über eine GPS-Zeitquelle. Der wichtige Teil ist, dass alle Geräte im System dieselbe Zeit wie der Server haben, unabhängig davon, wie korrekt diese Zeit tatsächlich ist.

Um zu sehen, was passieren würde, habe ich einen der NTP-Poolserver zur Konfigurationsdatei des Servers hinzugefügt, damit dort Zeit und nicht Zeit von lokal kommt. Es wird jetzt korrekt Zeit vom NTP-Zeitserver abgerufen.

Danach synchronisieren sich die Clients jetzt mit dem Server, anstatt LOCAL (0) zu bevorzugen.

 ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.130.33.201   38.229.71.1      3 u   58   64  377    0.216  715621.   1.001
 LOCAL(0)        .LOCL.          10 l   18   64  377    0.000    0.000   0.001

NEUE FRAGE - Wenn mein Server lokal verwendet (ursprüngliches Beispiel), scheinen die Clients zu sagen: "Oh, 10.130.33.201 verwendet LOCAL (0). Hmm, ich habe auch einen LOCAL (0) -Server - - Ich werde das einfach direkt verwenden, anstatt die gleichen Informationen über 10.130.33.201 zu erhalten. "

Ist das der Fall? Versuchen sie, "direkt zur Quelle" zu gelangen, die fälschlicherweise LOCAL (0) ist? Ich brauche meinen Server, um Zeit von LOCAL (0) zu bekommen, und ich brauche die Clients, um Zeit vom Server zu bekommen. Im Moment ist das Entfernen des "lokalen" Servers aus den Client-Konfigurationsdateien die einzige Option, aber ich möchte verstehen, warum dies geschieht, und wenn möglich, vermeiden Sie es, ihre Konfigurationen zu ändern (Konfigurationsänderungen werden aufgrund dessen eine Menge Arbeit bedeuten unsere Umwelt...).

Auch dies sieht aus wie ein weiteres Duplikat ohne eine gute Antwort.

JPhi1618
quelle
Wenn Sie immer einen Netzwerkzugriff auf 10.130.33.201 haben, sollten Sie die lokale Taktquelle entfernen.
Aaron Copley

Antworten:

9

Da nur ein NTP-Server konfiguriert ist, ist der Algorithmus nicht ganz sicher, wem er vertrauen soll. Obwohl die Schicht mit dem Remote-Host niedriger ist, hält der Algorithmus die Ortszeit für vertrauenswürdiger.

Versuchen Sie, das preferSchlüsselwort mit Ihrer serverAnweisung zu verwenden, um dies als bevorzugte Zeitquelle festzulegen.


BEARBEITEN -

Es sieht also so aus, als wäre dies ein Duplikat dieser Frage, aber ich glaube nicht, dass das Poster eine ausreichende Antwort erhalten hat. Daher möchte ich immer noch wissen, warum die Ortszeit dem Server vorgezogen wird.

Für eine wirklich ausreichende Antwort werden Sie sich in die Eingeweide eines sehr komplexen Algorithmus vertiefen. Die Dokumentation wird nicht einmal zu spezifisch, aber ich bin sicher, dass es da draußen ein Whitepaper oder eine Spezifikation gibt.

Wenn ich alle "lokalen" Zeilen in der Konfiguration entferne, wie aus der Antwort auf die andere Frage hervorgeht, was passiert, wenn der Server nicht erreichbar ist? Stirbt NTP oder versucht es einfach weiter?

Der NTP-Dämon stirbt nicht oder stoppt nicht, beendet jedoch die Synchronisierungszeit, nachdem er den Remoteserver nicht erreicht hat. Aus diesem Grund empfehlen Best Practices, mindestens drei Remote-Server zu verwenden und die LCL nur dann zu verwenden, wenn Sie vom Netzwerk getrennt sind. Es werden drei Server vorgeschlagen, denn wenn es nur zwei gibt und sie nicht übereinstimmen, welchen wird es wählen? Der dritte Server sollte dem Algorithmus helfen, den gefälschten Server zu beseitigen.

Zuletzt ist mir gerade aufgefallen, dass Sie a nicht definieren driftfile. Das könnte helfen?

Aaron Copley
quelle
Beeinflusst dies überhaupt den Unterschied zwischen den beiden Schichten (ums?)? Würde es helfen, wenn der Server unter 9 liegt?
JPhi1618
Es könnte. Zugegeben, ich weiß nicht viel über die Interna des Algorithmus selbst. Der einzige Fall, in dem Sie die Schicht fummeln sollten, ist die lokale Uhr. Ich kann nicht empfehlen, dass Sie einen Remote-Server als Fix fummeln. NTP sollte vertraut werden, um die beste Quelle mit minimalen Interferenzen zu ermitteln. Sie haben zufällig einen Fall, in dem Sie einen kleinen Schub geben müssen.
Aaron Copley
Danke für die Vorschläge. Es gab eine Driftdatei, aber sie wurde nicht erstellt, also entfernte ich sie, um zu sehen, was passieren würde. Durch das Entfernen der lokalen Leitung wird die Synchronisierung mit dem Server durchgeführt. Sie sagen, dass ntpd "die Synchronisierungszeit beendet, nachdem es den Remote-Server nicht erreicht hat", aber wird es erneut gestartet, nachdem der Server erreicht wurde? Ich möchte nur im Falle einer vorübergehenden Netzwerkunterbrechung sicher sein.
JPhi1618
Nein, es wird nicht wieder gestartet. Es gibt einfach auf. Das ist ärgerlich und war auch für mich ein Haken. Wir wissen jetzt, dass NTP neu gestartet werden muss, wenn die Netzwerkverbindung unterbrochen wurde. Ihre Driftdatei wird wahrscheinlich nicht erstellt, da ntp keine Berechtigungen für den Pfad hat. Überprüfen Sie das noch einmal.
Aaron Copley
7

Mir scheint, dass das Intervall des Versatzes (Unterschied zwischen Ihrer Systemzeit und der der NTP-Hostzeit) zu unterschiedlich ist, als dass NTP es richtig einstellen könnte.

Mein Vorschlag,

 1. Stop the NTP service
 2. As root ntpdate -bs 10.130.33.201 to reset your time to something close
 3. Start the NTP service

Danach sollten Sie keine Probleme mehr haben.

mdpc
quelle
2
Wenn es sich bei dem Computer zufällig um eine VM handelt oder eine andere Bedingung vorliegt, die zu einer schwerwiegenden Unterbrechung der Zeit führt, können Sie die tinker panic 0Option ntp festlegen , um NTP zu zwingen, Offsets zu akzeptieren. Verwenden Sie dies jedoch nur mit NTP-Servern, von denen Sie sicher sind, dass sie niemals eine schlechte Zeit zurückgeben.
Zoredache
Ok, ich dachte, dass es mehr als 1000 Sekunden dauern muss, bevor das ein Problem ist, und dann dachte ich, dass der Server mit einem # -Zeichen aufgeführt wird? Ist das nicht der Fall? Ist "Offset" in Sekunden oder Millisekunden?
JPhi1618
Es wird momentan nicht mit 10.130.33.201 synchronisiert, da der Offset zu hoch ist. Dies behebt jedoch nicht die Tatsache, dass es in erster Linie so weit driftet, dass LCL wünschenswerter wird. Ich denke, dies ist eine funktionierende Driftdatei und preferwürde den Trick machen.
Aaron Copley
Können Sie erklären, warum der Offset zu hoch ist? Es ist weniger als 1000 (viel weniger) und es gibt kein # -Zeichen. Außerdem habe ich die tatsächliche Zeit auf beiden Systemen überprüft und sie sind ungefähr 4 Sekunden voneinander entfernt.
JPhi1618
+/- 1000 ms ... nicht +/- 1000 s . Es ist bei -3742 ms .
Aaron Copley
2

Die Schicht von 10.130.33.201 als LOCAL-Server ist 9, wodurch die daraus berechnete lokale Schicht (9 + 1 = 10) mit der lokalen LOCAL-Server in Schicht 10 konkurriert. Da die lokale LOCAL-Schicht keine Netzwerkverzögerungen oder Jitter aufweist, ist dies der Fall sieht für ntpd möglicherweise etwas besser aus als für die Remote-Version.

Wenn diese Konfiguration funktionieren soll, setzen Sie den 'Master'-LOCAL-Server auf eine Schicht unter 9. Nicht zu niedrig, wenn eine auf einen Schicht 1-Server zurückführbare Zeit bevorzugt werden soll.

Koos van den Hout
quelle
Vielen Dank. Ich werde das so schnell wie möglich überprüfen. Sieht vielversprechend aus.
JPhi1618
Nun, es sieht so aus, als hätte ich zuvor versucht, die Schicht des 10.130.33.201 LOCAL-Servers zu senken. Derzeit ist es auf 5 gesetzt, der Client sieht es als 6 an, bevorzugt aber immer noch sein eigenes LOCAL mit einer Schicht von 10. Diese Konfiguration ist seit Tagen vorhanden.
JPhi1618
2

Ich weiß, das ist alt, aber ich denke, Sie haben Recht. Niemand zeigt eine Möglichkeit, ntpd-Probleme zu debuggen. Es stellt sich heraus, dass es machbar ist.

Ich denke, Sie waren auf dem richtigen Weg, als Sie vermuteten, dass die Verwendung von LOCAL (0) lokal und auf dem Upstream-Server ein Problem sein könnte.

Es war sicherlich auf einer Zeitinsel mit 4 Servern, mit denen ich ein ähnliches Problem hatte. Diese waren alle darauf ausgelegt, Gleichaltrige zu sein, also möglicherweise ein anderes Problem als das Ihre.

Zunächst gibt es jedoch eine bessere Möglichkeit, mit Zeitinseln umzugehen, die als Orphan-Modus bezeichnet wird und von ntpd-Versionen der letzten Jahre unterstützt wird:

Orphan-Modus auf doc.ntp.org

Anfangs hatten alle 4 Server die gleiche Schicht von 10 und bevorzugten ihre lokale Uhr. Ich habe das behoben und trotzdem bevorzugten sie ihre lokale Uhr (die Schicht scheint jedoch wichtig zu sein).

Ich habe den Befehl ntpq pe (peer), as, rv verwendet, um einen Überblick über das Geschehen zu bekommen. Sie müssen rv (readvar) für die Zuordnungsnummer verwenden, damit der Server die Informationen speichert. pe und as scheinen nach demselben Index sortiert zu sein, sodass Sie auf diese Weise die as-Nummer erhalten können. as hat ein Feld namens Bedingung, das möglicherweise den Wert "Zurückweisen" anzeigt, wenn der Server nicht gefällt.

In der RV-Ausgabe befindet sich ein Feld namens Flash. Wenn alles in Ordnung ist, ist dies Null. Wenn nicht, handelt es sich um eine Bitmaske (hexadezimal angezeigt) der Probleme. Sie können hier nachgeschlagen werden:

ntpd interne Dekodierungen

Das Problem, das ich hatte, war 0800 peer_loop. Es stellte sich heraus, dass das Refid der Uhr wichtig ist. Als LOCAL (0) sowohl auf der lokalen Uhr als auch vom Remote-Server aus angezeigt wurde, dachte ntpd, dass es eine Schleife gab. David Mills bestätigt, dass in Beiträgen auf comp.protocols.time 'So vermeiden Sie Schleifen in NTP' (Ich habe mein Limit von 2 Links erreicht, sorry!)

Die Verwendung des refid-Arguments zum Fudge zum Festlegen einer eindeutigen refid hat nicht funktioniert - es wird beim Empfänger weiterhin als LOCAL (0) angezeigt.

Was zu funktionieren schien, war die Verwendung eindeutiger Instanznummern für den lokalen Treiber. 127.127.1. [0-3]. Verwenden Sie für Server und Fudge Line dieselbe ID. Als ich dies tat, synchronisierten sich die Server im Allgemeinen mit dem Server mit der niedrigsten Schicht, der normalerweise seine lokale Uhr verwendete. Es wurde jedoch gelegentlich versucht, einen der anderen Server zu verwenden, die ihn als Quelle verwendeten. Die Zeiten wurden jedoch synchronisiert und scheinen so zu bleiben.

Wahrscheinlich viel zu spät, um zu helfen, aber ich biete es an, um zu zeigen, dass NTP für Logik und Fehlerbehebung geeignet ist. Ich habe Stunden gebraucht, um die Antwort durch Ausprobieren zu erreichen, und dann die Dokumente später gefunden.

klw14
quelle
-1

Verwenden Sie iburst, um den Server zu zwingen, die NTP-Anforderung an das gewünschte NTS zu senden, selbst wenn eine Anforderung fehlschlägt

Tempteh
quelle
Dies bedarf einer besseren Erklärung.
Sven