Поделиться через


Синхронизация времени для виртуальных машин Windows в Azure

Применимо к: ✔️ Виртуальные машины Windows ✔️ Гибкие масштабируемые наборы ✔️ Универсальные масштабируемые наборы

Синхронизация времени важна для безопасности и корреляции событий. Иногда он используется для реализации распределенных транзакций. Точность времени в нескольких компьютерных системах достигается за счет синхронизации. На синхронизацию может влиять ряд факторов, включая перезагрузки и сетевой трафик между источником времени и получающим сведения о времени компьютером.

Azure теперь поддерживается инфраструктурой под управлением Windows Server 2016. В Windows Server 2016 реализованы улучшенные алгоритмы коррекции времени и синхронизации локальных часов с временем в формате UTC. Windows Server 2016 также улучшила службу VMICTimeSync, которая управляет синхронизацией виртуальных машин с узлом в течение точного времени. Улучшения включают более точное начальное время при запуске или восстановлении виртуальной машины, а также исправление задержки прерываний для данных, предоставленных службе времени Windows (W32time).

Примечание.

Краткий обзор службы времени в Windows можно получить в этом видео.

Дополнительные сведения см. в статье Точное время в Windows Server 2016.

Обзор

Точность часов компьютера оценивается по тому, насколько близки их показания к стандартному времени в формате UTC. Время UTC определяется по международной выборке точных атомных часов, которые могут отклоняться не более чем на одну секунду за 300 лет. Однако для считывания времени UTC напрямую требуется специальное оборудование. Вместо этого со временем UTC синхронизируются серверы времени, к которым затем обращаются другие компьютеры. Таким образом достигается масштабируемость и надежность. На каждом компьютере выполняется служба синхронизации времени, которая знает, какие серверы времени следует использовать, и регулярно проверяет необходимость коррекции часов компьютера, при необходимости корректируя время.

Узлы Azure синхронизированы с внутренними серверами времени Майкрософт, которые получают время от принадлежащих Майкрософт устройств Stratum 1 с антеннами GPS. Виртуальные машины в Azure могут либо зависеть от своего узла, чтобы получать точное время (время узла), либо напрямую получать время от сервера времени, либо использовать оба эти метода в сочетании.

Взаимодействие виртуальной машины с узлом также может влиять на показания часов. Во время обслуживания с сохранением памяти виртуальные машины приостанавливаются на срок до 30 секунд. Например, до начала обслуживания время на часах виртуальной машины показывает 10:00:00 дп, и длится 28 секунд. Когда виртуальная машина возобновляет работу, ее часы по-прежнему показывают 10:00:00, то есть отстают на 28 секунд. Чтобы исправить это, служба VMICTimeSync отслеживает то, что происходит на узле, и запрашивает изменения на виртуальных машинах для компенсации.

Служба VMICTimeSync работает в режиме выборки или синхронизации и влияет только на продвижение часов вперед. В режиме выборки, для которого требуется выполнение W32time, служба VMICTimeSync опрашивает хост каждые 5 секунд и предоставляет временные образцы в W32time. Примерно каждые 30 секунд служба W32time принимает последний образец времени и использует его для влияния на часы гостя. Режим синхронизации активируется, если работа гостя была возобновлена или если часы гостя отстают более чем на 5 секунд от часов хоста. В случаях, когда служба W32time работает правильно, последний случай никогда не должен произойти.

При отсутствии синхронизации времени на часах виртуальной машины накапливались бы ошибки. Если существует только одна виртуальная машина, это может не быть значительным, если рабочая нагрузка не требует высокой точности временного хранения. Но в большинстве случаев имеется несколько взаимосвязанных виртуальных машин, которые используют время для отслеживания транзакций, поэтому оно должно быть согласовано в масштабе всего развертывания. Если время между виртуальными машинами различается, могут возникнуть следующие последствия.

  • Аутентификация завершится сбоем. Протоколы безопасности, такие как Kerberos, или технологии, зависящие от сертификатов, требуют согласования времени в системах.
  • Очень трудно выяснить, что произошло в системе, если журналы (или другие данные) не согласуются вовремя. Одно и то же событие будет представляться как произошедшее в разное время, что усложняет корреляцию.
  • Если часы не настроены правильно, расчеты выставления счетов могут быть неверными.

Лучшие результаты развертывания Windows достигаются с помощью Windows Server 2016 в качестве гостевой операционной системы, что гарантирует, что можно использовать последние улучшения синхронизации времени.

Параметры конфигурации

Существует три варианта настройки синхронизации времени для виртуальных машин Windows, размещенных в Azure:

  • Время хоста и time.windows.com. Это конфигурация по умолчанию, используемая в образах Azure Marketplace.
  • Только для хоста.
  • Используйте другой внешний сервер времени с или без использования времени узла. Для этого параметра следуйте руководству «Механизм времени для виртуальных машин Windows Active Directory в Azure».

Использовать по умолчанию

По умолчанию образы виртуальных машин ОС Windows настроены для синхронизации w32time из двух источников:

  • Поставщик NtpClient, который получает сведения из time.windows.com.
  • Служба VMICTimeSync, используемая для передачи времени хоста виртуальным машинам и для внесения исправлений после того, как виртуальная машина приостановлена для обслуживания. Узлы Azure используют устройства Stratum 1 корпорации Майкрософт для точного хранения времени.

w32time предпочитает службу времени в следующем порядке приоритета: страта, задержка корня, распространение корня, смещение времени. В большинстве случаев w32time на виртуальной машине Azure предпочтет время хоста, поскольку она оценивает и сравнивает оба источника времени.

Для компьютеров, присоединенных к домену, сам домен устанавливает иерархию синхронизации времени, но корневой сервер леса все равно должен получать время откуда-либо, и следующие соображения по-прежнему остаются актуальными.

Только для хоста

Так как time.windows.com является общедоступным NTP-сервером, синхронизация времени с ним требует отправки трафика через Интернет, различные задержки пакетов могут отрицательно повлиять на качество синхронизации времени. Удаление time.windows.com путем переключения на синхронизацию только для узлов иногда может улучшить результаты синхронизации времени.

Переключение на синхронизацию только для узлов имеет смысл, если возникают проблемы с синхронизацией времени с помощью конфигурации по умолчанию. Попробуйте использовать режим синхронизации только с хостом, чтобы узнать, улучшит ли это синхронизацию времени на виртуальной машине.

Внешний сервер времени

Если у вас есть определенные требования к синхронизации времени, также можно использовать внешние серверы времени. Внешние серверы времени могут предоставлять определенное время, которое может быть полезно для сценариев тестирования, обеспечивая единообразие времени с компьютерами, размещенными в центрах обработки данных, отличных от Майкрософт, или обрабатывать високосные секунды особым образом.

Внешние серверы можно объединить со службой VMICTimeSync и VMICTimeProvider, чтобы обеспечить результаты, аналогичные конфигурации по умолчанию.

Проверка конфигурации

Проверьте, настроен ли поставщик времени NtpClient для использования явных NTP-серверов (NTP) или синхронизации времени домена (NT5DS).

w32tm /dumpreg /subkey:Parameters | findstr /i "type"

Если виртуальная машина использует NTP, вы увидите следующие выходные данные:

Value Name                 Value Type          Value Data
Type                       REG_SZ              NTP

Чтобы узнать, какой сервер времени использует поставщик времени NtpClient, в командной строке с повышенными привилегиями введите команду:

w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"

Если виртуальная машина используется по умолчанию, выходные данные будут выглядеть следующим образом:

NtpServer                  REG_SZ              time.windows.com,0x8

Чтобы узнать, какой поставщик времени используется сейчас.

w32tm /query /source

Ниже приведены выходные данные, которые можно увидеть и что это будет означать:

  • time.windows.com — в конфигурации по умолчанию w32time будет получать время от time.windows.com. Качество синхронизации времени зависит от подключения к Интернету и влияет на задержки пакетов. Это обычные выходные данные, которые вы получите на физическом компьютере.
  • Поставщик синхронизации времени IC виртуальной машины — виртуальная машина синхронизирует время с узла. Это обычные выходные данные, которые вы получите на виртуальной машине, работающей в Azure.
  • Сервер домена — текущий компьютер находится в домене, а домен определяет иерархию синхронизации времени.
  • Другой сервер — w32time был явно настроен для получения времени от другого сервера. Качество синхронизации времени зависит от качества сервера времени.
  • Локальные часы CMOS — часы несинхронизированы. Вы можете получить эти выходные данные, если у w32time не было достаточно времени для запуска после перезагрузки или когда все настроенные источники времени недоступны.

Выберите синхронизацию времени только для хоста

Azure постоянно работает над улучшением синхронизации времени на узлах и может гарантировать, что вся инфраструктура синхронизации времени размещена в принадлежащих Microsoft центрах обработки данных. Если у вас возникли проблемы с синхронизацией времени в настройке по умолчанию, которая использует time.windows.com в качестве основного источника времени, вы можете использовать следующие команды, чтобы переключиться на синхронизацию времени только для этого устройства.

Пометьте провайдера VMIC как включенного.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\VMICTimeProvider /v Enabled /t REG_DWORD /d 1 /f

Пометьте поставщика NTPClient отключённым.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\TimeProviders\NtpClient /v Enabled /t REG_DWORD /d 0 /f

Перезапустите службу w32time.

net stop w32time && net start w32time

Виртуальные машины Windows Server 2012 и R2

Windows Server 2012 и Windows Server 2012 R2 имеют разные параметры по умолчанию для синхронизации времени. По умолчанию, служба w32time сконфигурирована так, чтобы отдавать предпочтение низкой нагрузке на службу, а не точности времени.

Если вы хотите переместить развертывания Windows Server 2012 и 2012 R2 для использования более новых значений по умолчанию, которые предпочитают точное время, можно применить следующие параметры.

Обновите интервалы опроса и обновления w32time, чтобы соответствовать параметрам Windows Server 2016.

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MinPollInterval /t REG_DWORD /d 6 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v MaxPollInterval /t REG_DWORD /d 10 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w32time\Config /v UpdateInterval /t REG_DWORD /d 100 /f
w32tm /config /update

Чтобы w32time имела возможность использовать новые интервалы опроса, необходимо пометить NtpServers как использующие их. Если серверы помечены битовой маской 0x1, это переопределит данный механизм, и w32time будет использовать SpecialPollInterval вместо неё. Убедитесь, что указанные NTP-серверы либо используют флаг 0x8, либо вообще никакого флага не имеют.

Проверьте, какие флаги используются для NTP-серверов.

w32tm /dumpreg /subkey:Parameters | findstr /i "ntpserver"

Дальнейшие действия

Ниже приведены ссылки на дополнительные материалы по синхронизации времени: