Назад | Перейти на главную страницу

Нужно ли мне запускать сервер NTP на каждой виртуальной машине?

Не могли гости как-то унаследовать системное время хоста?

Кажется бессмысленным запускать один и тот же демон для получения одинаковых результатов на одной и той же машине несколько раз, но я не нашел ничего, связанного со временем, при чтении статей о KVM или Xen. Насколько я понимаю, гость получает время хоста при загрузке, но затем оно может разойтись. Это правильно ?

В идеальном мире ваши гости виртуальных машин будут идеально проводить время или, по крайней мере, так же идеально, как предоставляет хост. К сожалению, мы живем не в идеальном мире.

Основываясь на моем опыте работы практически со всеми гипервизорами, известными человеку, Я всегда запускаю NTP-клиент на виртуальных машинах без исключения. Моя обычная установка - это ntpd с параметром -g или ntpdate, запускаемый прямо перед ним для старых систем, чтобы смещать часы (которые могут быть далеко не синхронизированными при загрузке системы).

KVM имеет почти идеальную настройку, с ее паравиртуализированные часы реального времени; гости с соответствующим драйвером (по крайней мере, все последние Linux) будут следить за временем так же, как и хост. Но все же здесь что-то идет не так: например, на хосте может не работать NTP, на хосте может быть неправильный часовой пояс, часы хоста могут быть просто неправильными и т. Д.

VMware и Hyper-V находятся посередине. У каждого есть инструмент, предназначенный для запуска на гостевой машине, который периодически синхронизирует часы с хостом, но, опять же, это уязвимо для любых существующих проблем с часами хоста.

Гости на моем тестовом сервере Hyper-V также проявляли странное поведение: даже с интеграционными службами время гостевых часов смещалось быстрее 500 ppm, что мешало работе ntpd (он считает часы безумными, если они идут быстрее, чем это). Мне пришлось переключить этих гостей на хрония, который позволяет это значение быть отрегулированным.

Xen - худший в этом отношении; оно имеет абсолютно никакой синхронизации и запуск NTP в гостях в значительной степени требуется. (Мне сказали, что в самых последних версиях Xen есть какая-то синхронизация, но я лично еще не работал с ней.)

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

При этом запуск клиентов NTP на ваших виртуальных машинах в значительной степени требуется, если вам нужны даже полуточные часы. NB: если вы запускаете виртуальные машины Windows, получите сторонний клиент NTP, который постоянно регулирует часы; плохая отговорка для клиента, который идет с Windows, только регулирует часы раз в неделю, что совершенно нелепо.

Это верно. Следует отметить, что время не только «может уходить», но воля уходят в сторону из-за того, что интервалы между прерываниями таймера (на которых часто основывается хронометраж в ОС) растягиваются и сжимаются так, как считает нужным гипервизор.

Обычно используемый обходной путь на большинстве платформ виртуализации (службы интеграции Hyper-V, инструменты VMWare) - это запуск на гостевой системе демона, который периодически синхронизирует часы с хостом виртуальной машины. Как отметил Хауке в комментарии к вашему вопросу, KVM дополнительно предоставляет паравиртуализированные часы, для работы которых потребуется соответствующий драйвер, загруженный в гостевую ОС.

Further reading:

Хронометраж в виртуальных машинах VMWare (vmware.com)
KVM-синхронизация гостевых часов (s19n.net)

Я бы рекомендовал использовать NTP, потому что он хорошо известен и существует уже давно. Настроить часы нетривиально. NTP решил эту проблему.

В официальная линия VMware - использовать один механизм, с предпочтением NTP потому что он более мелкий и требует меньших шагов для настройки времени. Внутреннее решение VMware требует больших шагов. Когда вы бежите, они оба могут драться друг с другом. Когда внутреннее решение VMware сделало большой шаг, а затем NTP скорректировал его и немного отступил.

На практике, однако, мы запускаем оба одновременно, и я пока не заметил проблемы.

$ ntpq   
ntpq> peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
something.org  172.2.1.5          2 u   57   64  377    1.597   -2.409   5.952


$  vmware-toolbox-cmd  timesync status
Enabled


$ vmware-toolbox-cmd help timesync
timesync: functions for controlling time synchronization on the guest OS
Usage: vmware-toolbox-cmd timesync <subcommand>

Subcommands:
  enable: enable time synchronization
  disable: disable time synchronization
  status: print the time synchronization status