Perché NTP si sincronizza con LOCAL anziché con il server remoto?


11

Quindi, sto provando a eseguire il debug della mia attuale configurazione NTP e ho scoperto che l'offset dal mio singolo server configurato è di oltre 3 secondi e non si sta adeguando. L'asterisco su LOCAL (0) nell'output ntpq sembra indicare che il sistema si sta sincronizzando felicemente con se stesso piuttosto che con il server 10.130.33.201 (che è un altro box Linux sul nostro sistema con cui vogliamo che tutto si sincronizzi).

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

E questo è il mio file ntp.conf. Scritto da qualcun altro, quindi non sono sicuro al 100% che tutto sia corretto.

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

Ho letto di burst e iburst e minpoll / maxpoll, quindi mi rendo conto che quelli potrebbero non essere necessari, ma non penso che ciò abbia a che fare con il mio problema attuale.

Inoltre, a causa del modo in cui è distribuito, quel file di configurazione richiederà molto lavoro per cambiare, quindi spero che non ci sia nulla che debba davvero essere cambiato. Spero che questo sia un caso in cui non capisco come funziona NTP.


MODIFICARE -

Quindi, sembra che questo sia un duplicato di questa domanda , ma non credo che quel poster abbia una risposta sufficiente, quindi vorrei ancora sapere perché l'ora locale è preferita al server. Inoltre, come da una delle risposte di seguito, ho provato a utilizzare la preferparola chiave sulla riga del server della configurazione e riavviare, ma ciò non sembra aver avuto effetto.

Se rimuovo tutte le righe "locali" nella configurazione come suggerisce la risposta all'altra domanda, cosa accadrà se il server non è raggiungibile? L'NTP muore o continua a provare?


MODIFICA IMPORTANTE -

Ok, normalmente, 10.130.33.201 (Il "server") non ha accesso a Internet e non ha una fonte di tempo GPS da usare. La parte importante è che tutti i dispositivi sul sistema hanno lo stesso orario del server, indipendentemente dalla correttezza di tale orario.

Quindi, solo per vedere cosa sarebbe successo, ho aggiunto uno dei server del pool NTP al file di configurazione del server in modo da ottenere tempo da lì piuttosto che ottenere da locale. Ora ottiene correttamente l'ora dal time server NTP.

Dopo averlo fatto, i client ora si sincronizzano con il server piuttosto che preferiscono LOCAL (0)

 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

NUOVA DOMANDA - Quando il mio server utilizza local (esempio originale che è stato fornito), sembra che i client stiano dicendo "Oh, 10.130.33.201 sta usando LOCAL (0). Hmm, ho anche un server LOCAL (0) - - Lo userò direttamente invece di ottenere le stesse informazioni tramite 10.130.33.201 ".

È così? Stanno cercando di andare "direttamente alla fonte" che è erroneamente LOCALE (0)? Ho bisogno che il mio server ottenga il tempo da LOCAL (0) e ho bisogno che i client ottengano il tempo dal server. In questo momento la rimozione del server "locale" dai file di configurazione del client è l'unica opzione, ma vorrei capire perché ciò sta accadendo e, se possibile, evitare di cambiare le loro configurazioni (la modifica della configurazione sarà molto impegnativa a causa di il nostro ambiente...).

Inoltre, questo sembra un altro duplicato senza una buona risposta.


Inoltre, se si dispone dell'accesso di rete sempre attivo al 10.130.33.201, prendere in considerazione la rimozione della sorgente di clock locale.
Aaron Copley il

Risposte:


9

Con un solo server NTP configurato, l'algoritmo non è del tutto sicuro di chi fidarsi. Anche se lo strato è più basso con l'host remoto, scommetto che l'algoritmo ritiene che l'ora locale sia più affidabile.

Prova a utilizzare la preferparola chiave con la tua serverdichiarazione per impostarla come fonte di tempo preferenziale.


MODIFICARE -

Quindi, sembra che questo sia un duplicato di questa domanda, ma non credo che quel poster abbia una risposta sufficiente, quindi vorrei ancora sapere perché l'ora locale è preferita al server.

Per una risposta davvero sufficiente, stai scavando nelle viscere di un algoritmo molto complesso. La documentazione non è nemmeno troppo specifica, ma sono sicuro che ci sia un white paper o specifiche là fuori.

Se rimuovo tutte le righe "locali" nella configurazione come suggerisce la risposta all'altra domanda, cosa accadrà se il server non è raggiungibile? L'NTP muore o continua a provare?

Il demone NTP non muore o si arresta, ma termina la sincronizzazione dopo che non riesce a raggiungere il server remoto. Questo è il motivo per cui le migliori pratiche suggeriranno un minimo di tre server remoti e non utilizzare l'LCL a meno che non si sia disconnessi dalla rete. Vengono suggeriti tre server perché quando ce ne sono solo due e non sono d'accordo, quale sceglierà? Il terzo server dovrebbe aiutare l'algoritmo a eliminare il server fasullo.

Infine, ho appena notato che non si definisce a driftfile. Questo potrebbe aiutare?


Fare la differenza tra i due strati (ums?) Influenza tutto ciò? Avere il server inferiore a 9 sarebbe di aiuto?
JPhi1618,

Potrebbe. Devo ammettere che non conosco molto bene gli interni dell'algoritmo stesso. Tuttavia, l'unico caso in cui dovresti fondere lo strato è con l'orologio locale. Non posso raccomandare di confondere un server remoto come soluzione. NTP dovrebbe essere attendibile per determinare la migliore fonte con interferenze minime. Ti capita di avere un caso in cui devi dare una piccola spinta.
Aaron Copley il

Grazie per i suggerimenti C'era un file di drift, ma non era stato creato, quindi ho rimosso per vedere cosa sarebbe successo. La rimozione della linea locale la sincronizza con il server, quindi è qualcosa. Dici che ntpd "chiuderà il tempo di sincronizzazione dopo che non è riuscito a raggiungere il server remoto", ma ricomincerà dopo che il server è stato raggiunto? Voglio solo essere al sicuro in caso di un'interruzione temporanea della rete.
JPhi1618,

No, non ricomincerà. Si arrende e basta. Questo è fastidioso ed è stato un vero toccasana anche per me. Ora sappiamo riavviare NTP se la connettività di rete è andata persa. È probabile che il tuo file di drift non venga creato perché ntp non dispone delle autorizzazioni per il percorso. Ricontrolla quello.
Aaron Copley il

7

Mi sembra che l'intervallo di offset (differenza tra l'ora del sistema e quella dell'host NTP) sia troppo diverso per essere impostato correttamente da NTP.

Il mio consiglio,

 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

Non dovresti avere problemi dopo.


2
Se la macchina risulta essere una macchina virtuale o presenta qualche altra condizione che le provoca un tempo gravemente rotto, è possibile impostare l' tinker panic 0opzione ntp per forzare NTP ad accettare eventuali offset. Ma utilizzalo solo con i server NTP, sei certo che non restituirà mai un brutto momento.
Zoredache,

Ok, ho pensato che doveva essere più di 1000 secondi prima che fosse un problema, e poi ho pensato che il server sarebbe stato elencato con un segno #? Non è così? Lo "scostamento" è in secondi o millisecondi?
JPhi1618,

In questo momento non si sincronizzerà con 10.130.33.201 perché l'offset è troppo alto, ma ciò non risolverà il fatto che sta andando alla deriva abbastanza in primo luogo che LCL sta diventando più desiderabile. Penso che questo, un file di lavoro funzionante, e preferfarebbe il trucco.
Aaron Copley il

Potresti spiegare perché l'offset è troppo alto? È meno di 1000 (molto meno) e non c'è # segno. Inoltre, ho verificato il tempo effettivo su entrambi i sistemi e sono distanti circa 4 secondi.
JPhi1618,

+/- 1000 ms ... non +/- 1000 s . Sono a -3742 ms .
Aaron Copley,

2

Lo strato di 10.130.33.201 come server LOCAL è 9, il che rende lo strato locale calcolato da questo (9 + 1 = 10) in concorrenza con il server LOCAL locale allo strato 10. Poiché lo strato LOCAL locale non ha ritardi di rete o jitter, esso potrebbe apparire leggermente migliore su ntpd rispetto a quello remoto.

Se si desidera che questa configurazione funzioni, impostare il server LOCAL "principale" su uno strato inferiore a 9. Non troppo basso se si desidera un tempo tracciabile su un server strato 1 preferito.


Grazie. Lo controllerò appena posso. Sembra promettente.
JPhi1618,

Bene, sembra che in precedenza ho provato a ridurre lo strato del server LOCAL 10.130.33.201. Attualmente è impostato su 5, il client lo vede come 6, ma preferisce comunque il proprio LOCAL che ha uno strato di 10. Questa configurazione è in atto da giorni.
JPhi1618,

2

So che è vecchio, ma penso che tu abbia ragione. Nessuno mostra alcun modo per eseguire il debug dei problemi di ntpd. Si scopre che è fattibile.

Penso che tu fossi sulla buona strada quando sospettavi che l'uso di LOCAL (0) localmente e sul server upstream potesse essere un problema.

Sicuramente era su un'isola temporale di 4 server con cui ho avuto un problema simile. Questi erano tutti impostati per essere pari tra loro, quindi probabilmente un problema diverso dal tuo.

Innanzitutto, esiste un modo migliore di gestire le isole temporali chiamato modalità orfana supportato con le versioni ntpd degli ultimi anni:

Modalità orfana su doc.ntp.org

Inizialmente tutti e 4 i server avevano lo stesso strato di 10 e preferivano il loro orologio locale. L'ho risolto e comunque hanno preferito il loro orologio locale (lo strato sembra essere comunque importante).

Ho usato il comando ntpq pe (peer), come, rv per avere un'idea di ciò che stava accadendo. È necessario utilizzare rv (readvar) sul numero dell'associazione per il server per scaricare le informazioni. pe e as sembrano essere ordinati in base allo stesso indice in modo da poter ottenere il numero come in quel modo. come ha un campo chiamato condizione che può mostrare il valore rifiutato se non gli piace il server.

Nell'uscita camper c'è un campo chiamato flash. Se tutto va bene, questo sarà zero. Altrimenti si tratta di una maschera di bit (visualizzata in esadecimale) dei problemi. Possono essere cercati qui:

decodifiche interne ntpd

Il problema che ho avuto è stato 0800 peer_loop. Si è scoperto che il refid dell'orologio è importante. Vedere LOCAL (0) sia sull'orologio locale che dal server remoto aveva ntpd pensando che ci fosse un loop. David Mills lo conferma nei post su comp.protocols.time "Come evitare loop in NTP" (ho raggiunto il mio limite di 2 link, scusate!)

L'uso dell'argomento refid per eseguire il fudge per impostare il refid univoco non ha funzionato: viene comunque visualizzato come LOCAL (0) sul destinatario.

Quello che sembrava funzionare era usare numeri di istanza univoci per il driver locale. 127.127.1. [0-3]. Usa lo stesso ID sia sul server che sulla linea di protezione. Quando l'ho fatto, i server si sono generalmente sincronizzati con il server stratum più basso che di solito utilizzava il suo orologio locale. Tuttavia, occasionalmente ha tentato di utilizzare uno degli altri server che lo utilizzava come sorgente. Tuttavia i tempi si sono sincronizzati e sembrano rimanere così.

Probabilmente è troppo tardi per aiutare, ma lo offro per mostrare che NTP è suscettibile di logica e risoluzione dei problemi. Ho impiegato ore a raggiungere la risposta per tentativi ed errori e poi ho trovato i documenti in seguito.


-1

Utilizzare iburst per forzare il server a inviare la richiesta NTP all'NTS desiderato anche se una richiesta fallisce


Questo ha bisogno di una spiegazione migliore.
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.