Prostym faktem jest to, że dokładność zegara w maszynie wirtualnej jest nadal bardzo zła. Wynika to z kilku miejsc, ale zabójcą jest to, że przesunięcie czasu nie jest stałe; współczynnik dryfu zmienia się z chwili na chwilę. NTP to protokół z wbudowaną kompensacją zegara, ale został zaprojektowany z wbudowanym współczynnikiem dryfu statycznego. Na przykład, jeśli fizyczna maszyna traci 12 sekund co 30 dni, NTP może to zrekompensować i robi to bardzo dobrze. Ale jeśli ta maszyna może stracić od 4 do 70 sekund co 30 dni, NTP nie jest tak dobry w śledzeniu tego poziomu zmian.
To, co naprawdę utrudnia NTP nadążanie w środowisku VM, polega na tym, że widziany przez niego lokalny zegar może zmienić współczynnik dryfu w ciągu minuty. W zależności od częstotliwości, która sprawdza źródła czasu nadrzędnego, może powodować poważne zmiany współczynnika znoszenia i powodować znacznie częstszą synchronizację. Niezsynchronizowane kaskady czasowe w całej organizacji.
Protokół NTP dla sieci lokalnej jest protokołem o stosunkowo niewielkim wpływie na środowisko i ma bardzo małą pamięć, i może z radością korzystać z innych serwerów infrastruktury sieci, takich jak serwery DNS i DHCP. Niektóre routery mogą również zapewniać funkcjonalność NTP, więc warto się temu przyjrzeć.
Idealnie potrzebujesz dwóch oddzielnych serwerów w oddzielnych lokalizacjach, z których każdy synchronizuje się z innym zestawem serwerów wyższej warstwy. Byłoby również bardzo dobrym pomysłem, aby oba serwery czasu były skonfigurowane do używania drugiego serwera jako „elementu równorzędnego”, co zminimalizuje wpływ na obsługę czasu, gdyby jedno z wcześniejszych źródeł czasu nie działało; nastąpi zmiana warstwy, ale przynajmniej nie zgłosi braku synchronizacji. I na koniec, bądź miły dla swoich dostawców czasu upstream i skonfiguruj swoje serwery, aby pracowały bardzo długo między ankietami, gdy czas będzie dobrze ustalony. Jest to parametr „maxpoll” w wierszu „serwer” i stanowi on potęgę dwóch sekund między próbami synchronizacji.
Jeśli musiałbyś do tego bezwzględnie używać maszyn wirtualnych, skonfigurowałbym nie mniej niż trzy takie serwery NTP. Każdy z nich musi znajdować się na innym hoście, a jeśli to możliwe, w innym centrum danych. Podobnie jak w przypadku tego, co właśnie zasugerowałem, potrzebują różnych źródeł czasu i powinni zerknąć ze sobą. Następnie skonfiguruj wszystkich swoich klientów NTP, aby korzystali ze wszystkich trzech jako źródeł nadrzędnych. Upewnij się, że twoje maksymalne wartości są wystarczająco niskie, aby nigdy nie przekraczać półtorej godziny między pakietami synchronizacji poza siecią i 30 minut w sieci. Szanse są dobre, przynajmniej jedna z trzech będzie zsynchronizowana w dowolnym momencie. W przypadku klientów, którzy mogą rozmawiać tylko z jednym hostem czasu, będą musieli po prostu wytrzymać sporadyczne zdarzenie niezsynchronizowane. Ogólnie rzecz biorąc, jakość czasu w tym scenariuszu nie byłaby tak dokładna, jak w przypadku serwerów fizycznych.
Gdybym musiał zaparkować piłkę, powiedziałbym, że twój czas na osiągnięcie konsensusu w środowisku opartym na czystych maszynach wirtualnych prawdopodobnie mieściłby się w granicach, och, od 30 do 100 ms prawdy. W czysto fizycznym środowisku twój czas konsensusu prawdopodobnie wynosiłby 10 ms, gdy serwery czasu były wystarczająco długie, aby czas się ustabilizował.