У меня проблемы с настройкой NTP на нашем хосте и клиентах Hyper-V. Я не использую контроллер домена (почти все рекомендации даны для контроллеров домена, которые я не использую).
На всех серверах я использовал часы Windows для настройки имени клиента ntp (щелкните правой кнопкой мыши, настройте дату / время, время в Интернете, измените настройки, введите имя сервера NTP).
Похоже, это не сработало. Точнее, каждую ночь до понедельника в 01:00 время принудительно корректировалось (вызывало всевозможные проблемы, например, сбой резервной копии базы данных).
Я испортил w32tm (считал статус, конфигурацию, пытался отменить регистрацию и перерегистрировать). Я наконец получил w32tm / query / config, чтобы подтвердить, что он использовал сервер ntp:
У меня был w32tm / query / source, который сказал следующее:
Локальные часы CMOS time.windows.com, 0x9 (фактически другой хост, но не имеет значения для этого отчета) Свободно работающие системные часы VM IC Time Synchronization Provider (только для клиентов Hyper-V)
Наконец-то у меня был отчет w32tm «time.windows.com, 0x9», но позже он автоматически изменился на «Свободно работающие системные часы». Понятия не имею почему. Я полагаю, что бесплатный запуск - это не то, что мне нужно.
Полагаю, я совершенно запутался в настройке времени как на хосте Hyper-V, так и на клиенте, и мне действительно нужна помощь. Я нашел несколько руководств, но они противоречат друг другу (или просто говорят о настройке контроллера домена).
w32tm на клиенте Hyper-V говорит о конфигурации следующее:
C:\Windows\system32>w32tm /query /configuration
[Configuration]
EventLogFlags: 2 (Local)
AnnounceFlags: 10 (Local)
TimeJumpAuditOffset: 28800 (Local)
MinPollInterval: 10 (Local)
MaxPollInterval: 15 (Local)
MaxNegPhaseCorrection: 54000 (Local)
MaxPosPhaseCorrection: 54000 (Local)
MaxAllowedPhaseOffset: 1 (Local)
FrequencyCorrectRate: 4 (Local)
PollAdjustFactor: 5 (Local)
LargePhaseOffset: 50000000 (Local)
SpikeWatchPeriod: 900 (Local)
LocalClockDispersion: 10 (Local)
HoldPeriod: 5 (Local)
PhaseCorrectRate: 1 (Local)
UpdateInterval: 360000 (Local)
[TimeProviders]
NtpClient (Local)
DllName: C:\Windows\system32\w32time.DLL (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
AllowNonstandardModeCombinations: 1 (Local)
ResolvePeerBackoffMinutes: 15 (Local)
ResolvePeerBackoffMaxTimes: 7 (Local)
CompatibilityFlags: 2147483648 (Local)
EventLogFlags: 1 (Local)
LargeSampleSkew: 3 (Local)
SpecialPollInterval: 604800 (Local)
Type: NTP (Local)
NtpServer: time.windows.com,0x9 (Local)
VMICTimeProvider (Local)
DllName: C:\Windows\System32\vmictimeprovider.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)
NtpServer (Local)
DllName: C:\Windows\system32\w32time.DLL (Local)
Enabled: 0 (Local)
InputProvider: 0 (Local)
Приведенная выше конфигурация приводит к "автономным системным часам", что я считаю странным, если не сказать больше.
И Windows Time, и служба синхронизации времени Hyper-V работают.
Действующие групповые политики, нацеленные на службу времени, отсутствуют.
Предложения как исправить эту проблему?
Вот что я в итоге сделал и считаю, что это нормально:
Хост Hyper-V (физический сервер) настроен на синхронизацию с выбранными серверами времени, а каждый гость Hyper-V настроен на синхронизацию только с хостом. Приведенные ниже изменения отличаются от изменений по умолчанию.
Сначала остановите службу времени с помощью:
net stop w32time
Изменения в реестре (база HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\
):
w32time\Config\AnnounceFlags
знак равно 10
w32time\Parameters\NtpServers
знак равно 0.dk.pool.ntp.org,0x1 1.dk.pool.ntp.org,0x1 2.dk.pool.ntp.org,0x1 3.dk.pool.ntp.org,0x1
w32time\TimeProviders\NtpClient\SpecialPollInterval
знак равно 900
(15 минут)w32time\TimeProviders\NtpServer\Enabled
знак равно 1
Некоторые используют AnnounceFlags = 5, но корреляция с контроллером домена (который в данном случае не настроен) заставляет ntp-сервер не объявлять себя (наблюдение, а не факт), поэтому для AnnounceFlags установлено значение 10. (подробнее о AnnounceFlags)
0x1 на ntpservers = использовать специальный интервал опроса (вместо стандартных интервалов опроса ntp). (подробнее о 0x1, 0x2, 0x4 и 0x8). Использование SpecialPollInterval не требуется, но, похоже, рекомендуется (возможно, в основном для гостей, а не для хостов). Если вы решите не использовать SpecialPollInterval, вы должны вместо этого ограничить MinPollInterval и MaxPollInterval. Их значения по умолчанию - 10 (1024 секунды) и 15 (32768 секунд); Я предлагаю вместо этого 6 (64 секунды) и 10 (1024 секунды)).
Убедитесь, что служба времени запускается, когда сервер подключен к сети:
sc triggerinfo w32time start/networkon stop/networkoff
По умолчанию служба времени запускается (и останавливается) с помощью контроллера домена (которого нет в этой настройке). Если вы забудете об этом шаге, ваш сервер времени будет останавливаться при каждой загрузке (вскоре после его автоматического запуска). Эту проблему было трудно отследить.
И снова запустим сервис:
net start w32time
Теперь хост будет опрашивать один из серверов времени ntp каждые 15 минут и предлагать использовать его в качестве сервера ntp для других клиентов. У меня есть брандмауэр udp: 123, чтобы вход разрешался только гостям.
Серверу может потребоваться до 15 минут (SpecialPollInterval), пока он не объявит о своих возможностях в качестве надежного сервера времени миру (гостям). Это означает, что гости могут оставаться в автономном режиме в течение 15-20 минут после запуска службы.
Гости дрейфуют (намного) больше, чем ведущие (также по сравнению друг с другом), и для них требуется относительно короткий интервал опроса. Из-за этого использование удаленных серверов ntp не идеально, и поскольку у нас есть надежный сервер ntp (только что настроенный), мы собираемся использовать его (и только это). Все гости могут получить доступ к хосту через виртуальную сеть.
Убедитесь, что служба интеграции времени Hyper-V установлена и работает. При такой настройке он будет использоваться при загрузке виртуального сервера, а также при выходе из режима сохранения. Он не будет использоваться в качестве источника времени.
Остановите службу времени с помощью:
net stop w32time
Внесите необходимые изменения в реестр (базовый HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\
):
w32time\Config\AnnounceFlags
знак равно 10
w32time\Parameters\NtpServers
знак равно 192.168.0.100,0x9
w32time\TimeProviders\NtpClient\SpecialPollInterval
знак равно 300
(5 минут)w32time\TimeProviders\NtpServer\Enabled
знак равно 0
w32time\TimeProviders\VMICTimeProvider\Enabled
знак равно 0
Убедитесь, что служба времени запускается, когда сервер подключен к сети:
sc triggerinfo w32time start/networkon stop/networkoff
И снова запустим сервис:
net start w32time
При такой настройке время должно хорошо контролироваться как хозяином, так и гостями.
У вас есть два варианта для гостей Hyper-v: включить синхронизацию времени и синхронизацию с хостом (который, в свою очередь, может синхронизироваться с сервером ntp), или подключить каждого гостя напрямую к NTP.
Для синхронизации с хостом перейдите в диспетчер Hyper-V, в разделе «Службы интеграции» убедитесь, что установлен флажок «Синхронизация времени». Убедитесь, что гостевые службы интеграции установлены (возможно, удалите и переустановите их на этом этапе), и сбросить w32time
Microsoft не рекомендует отключать синхронизацию времени, но это может вызвать ваши проблемы, поэтому я бы попробовал. Перейдите в диспетчер Hyper-V и отключите синхронизацию времени. Затем настройте w32time, как любой автономный физический хост. Опять же, после всей этой гадости, вероятно, лучше сначала сбросить w32time.
Блог Microsoft имеет довольно хорошее описание того, как синхронизация времени работает в Hyper-V. Я бы прочитал это, если вы еще не