Il semplice fatto è che la precisione dell'orologio all'interno di una VM è ancora molto negativa. Questo viene da alcuni punti, ma la cosa killer è che la deriva del tempo non è costante; il fattore di deriva cambia di momento in momento. NTP è un protocollo con al suo interno una compensazione dell'orologio, ma è stato progettato con un fattore di deriva statico incorporato. Ad esempio, se una macchina fisica perde 12 secondi ogni 30 giorni, NTP può compensare ciò e lo fa molto bene. Ma se quella macchina può perdere da 4 a 70 secondi ogni 30 giorni, NTP non è così bravo a rintracciare quel livello di cambiamento.
Ciò che rende davvero difficile per NTP tenere il passo in un ambiente VM è che l'orologio locale che vede può cambiare il suo fattore di deriva nel corso di un minuto. A seconda della frequenza con cui sta controllando le fonti temporali dei genitori, può causare importanti variazioni del fattore di deriva e causare una fuori sincronizzazione molto più frequente. Il tempo fuori sincrono si diffonde in tutta l'organizzazione.
L'NTP per una rete locale è un protocollo a impatto relativamente basso con un ingombro di memoria molto ridotto e può essere felicemente trasferito su altri server dell'infrastruttura di rete come i server DNS e DHCP. Alcuni router possono anche fornire funzionalità NTP, quindi potresti voler esaminare questo.
Idealmente, vuoi due server separati in posizioni separate che si sincronizzino con un diverso set di server di livello superiore. Sarebbe anche un'ottima idea che entrambi i time-server siano stati configurati per utilizzare l'altro server come un "peer", il che ridurrà al minimo l'impatto sul time-service nel caso in cui una delle sorgenti del tempo a monte vada male; ci sarà un cambio di strato ma almeno non verrà segnalato fuori sincrono. E infine, sii gentile con i tuoi provider di servizi a monte e configura i tuoi server in modo che passino molto tempo tra i sondaggi una volta stabilito il tempo. Questo è il parametro 'maxpoll' sulla linea 'server', ed è una potenza di due in secondi tra i tentativi di sincronizzazione.
Se dovessi assolutamente usare le VM per questo, configurerei non meno di tre di questi server NTP. Ognuno di questi deve trovarsi su un host diverso e, se possibile, in un data center diverso. Come per quello che ho appena suggerito, hanno bisogno di diverse fonti di tempo e dovrebbero scrutare l'un l'altro. Quindi configurare tutti i client NTP per utilizzare tutti e tre come origini padre. Assicurati che i tuoi valori di maxpoll siano abbastanza bassi da non passare mai più di un'ora e mezza tra i pacchetti di sincronizzazione fuori rete e 30 minuti in rete. È probabile che almeno uno dei tre sia sincronizzato in un dato momento. Per i clienti che possono parlare con un solo host di tempo, dovranno semplicemente sopportare l'evento occasionale non sincronizzato. Nel complesso, la qualità del tempo in questo scenario non sarebbe esatta come nei server fisici.
Se dovessi parcheggiare a palla, direi che il tuo tempo di consenso nell'ambiente della VM pura sarebbe probabilmente entro, da 30 a 100 ms di valore reale. In un ambiente puramente fisico, il tuo tempo di consenso sarebbe probabilmente entro 10 ms una volta che i server fossero stati abbastanza a lungo da consentire al tempo di stabilizzarsi.