Le simple fait est que la précision de l'horloge dans une machine virtuelle est toujours très mauvaise. Cela vient de quelques endroits, mais ce qui tue, c'est que la dérive temporelle n'est pas constante; le facteur de dérive change d'instant en instant. NTP est un protocole qui intègre une compensation d'horloge, mais il a été conçu avec un facteur de dérive statique intégré. Par exemple, si une machine physique perd 12 secondes tous les 30 jours, NTP peut compenser cela et le fait très bien. Mais si cette machine peut perdre de 4 à 70 secondes tous les 30 jours, NTP n'est pas si bon pour suivre ce niveau de changement.
Ce qui rend vraiment difficile pour NTP de suivre dans un environnement VM, c'est que l'horloge locale qu'il voit peut changer son facteur de dérive en une minute. Selon la fréquence à laquelle il vérifie ses sources de temps parent, il peut provoquer des changements majeurs de facteur de dérive et entraîner une désynchronisation beaucoup plus fréquente. Le temps hors synchronisation tombe en cascade dans toute votre organisation.
Le NTP pour un réseau local est un protocole à impact relativement faible avec une très petite empreinte mémoire, et peut se greffer avec plaisir sur vos autres serveurs d'infrastructure réseau comme vos serveurs DNS et DHCP. Certains routeurs peuvent également fournir des fonctionnalités NTP, vous pouvez donc y réfléchir.
Idéalement, vous voulez deux serveurs distincts dans des emplacements distincts qui se synchronisent chacun avec un ensemble différent de serveurs de couche supérieure. Ce serait également une très bonne idée que les deux serveurs de temps ont été configurés pour utiliser l'autre serveur en tant que «pair», ce qui minimisera l'impact sur le service de temps si l'une des sources de temps en amont tournait mal; il y aura un changement de strate mais au moins il ne signalera pas de désynchronisation. Et enfin, soyez gentil avec vos fournisseurs de temps en amont et configurez vos serveurs pour passer très longtemps entre les sondages une fois que le temps est bien établi. Il s'agit du paramètre 'maxpoll' sur la ligne 'serveur', et c'est une puissance de deux en secondes entre les tentatives de synchronisation.
Si vous deviez absolument utiliser des machines virtuelles pour cela, je configurerais pas moins de trois de ces serveurs NTP. Chacun doit se trouver sur un hôte différent, et si possible dans un centre de données différent. Comme pour ce que je viens de suggérer, ils ont besoin de différentes sources de temps et doivent se comparer. Configurez ensuite tous vos clients NTP pour utiliser les trois en tant que sources parent. Assurez-vous que vos valeurs maxpoll sont suffisamment faibles pour ne jamais dépasser une heure et demie entre les paquets de synchronisation hors réseau et 30 minutes sur le réseau. Les chances sont bonnes, au moins l'un des trois sera synchronisé à tout moment. Pour les clients qui ne peuvent parler qu'à un seul hôte, ils n'auront qu'à supporter l'événement occasionnel hors synchronisation. Dans l'ensemble, la qualité du temps dans ce scénario ne serait pas aussi exacte qu'avec des serveurs physiques.
Si je devais me garer, je dirais que votre temps de consensus dans l'environnement pur-VM serait probablement dans, oh, 30 à 100 ms de vrai. Dans un environnement purement physique, votre temps de consensus serait probablement dans les 10 ms une fois que les serveurs de temps auraient été suffisamment longs pour que le temps se stabilise.