Простий факт полягає в тому, що точність тактової частоти всередині VM все ще дуже погана. Це походить з кількох плям, але вбивча річ у тому, що відплив часу не є постійним; коефіцієнт дрейфу змінюється від моменту до моменту. NTP - це протокол, в якому вбудована компенсація годинника, але він був розроблений за допомогою вбудованого статичного коефіцієнта дрейфу. Наприклад, якщо фізична машина втрачає 12 секунд кожні 30 днів, NTP може компенсувати це і робить це дуже добре. Але якщо ця машина може втрачати десь від 4 до 70 секунд кожні 30 днів, NTP не так добре відслідковує цей рівень змін.
Те, що робить НТП справді важким для того, щоб не відставати у середовищі ВМ, - це те, що локальний годинник, який він бачить, може змінювати свій коефіцієнт дрейфу протягом хвилини. Залежно від частоти перевірки батьківських джерел часу, це може спричинити значні зміни коефіцієнта дрейфу та призвести до виходу із синхронізації набагато частіше. Каскади часу поза синхронізацією у всій організації.
NTP для локальної мережі - це порівняно низький протокол впливу з дуже невеликим слідом пам’яті, і він може радісно реагувати на інші ваші сервери мережевої інфраструктури, як ваші DNS та DHCP-сервери. Деякі маршрутизатори також можуть забезпечувати функціональність NTP, тому ви можете розглянути це.
В ідеалі вам потрібно два окремих сервери в окремих місцях, кожен з яких синхронізується з різним набором серверів вищого шару. Було б також дуже хорошою ідеєю, щоб обидва сервери часу були налаштовані використовувати інший сервер як "одноранговий", що дозволить мінімізувати вплив на службу часу, якщо один з джерел часу за течією піде не так; відбудеться зміна прошарку, але принаймні воно не повідомить про несинхронізацію. І нарешті, будьте приємні своїм постачальникам часу за течією та налаштуйте ваші сервери дуже довго, коли час буде встановлений. Це параметр "maxpoll" у рядку "server" і потужність двох секунд між спробами синхронізації.
Якби вам абсолютно довелося використовувати для цього VM, я створив би не менше трьох таких серверів NTP. Кожен із них повинен знаходитись на іншому хості та, якщо можливо, в іншому центрі обробки даних. Як і в тому, що я щойно запропонував, їм потрібні різні джерела часу і повинні вглядатися один у одного. Потім налаштуйте всіх своїх NTP-клієнтів для використання всіх трьох як батьківських джерел. Переконайтесь, що ваші максимальні значення низькі, щоб ніколи не переходити більше півтори години між пакетами синхронізації поза мережею та 30 хвилин у мережі. Швидше за все, щонайменше одна з трьох буде синхронізована в будь-який момент часу. Для клієнтів, які можуть спілкуватися лише з одним хостом, їм доведеться просто миритися з випадковими подіями поза синхронізацією. Загалом, якість у цьому сценарії не буде такою точною, як це було б на фізичних серверах.
Якби мені довелося балуватись, я б сказав, що ваш час консенсусу в чистому середовищі ВМ був би, напевно, від 30 до 100 мс правдивим. У суто фізичному середовищі ваш час консенсусу, ймовірно, буде протягом 10 мс, як тільки час серверів буде достатньо довгим, щоб встигнути вирішити час.