У меня на сервере работает ntpd. Это все настройки по умолчанию, за исключением того, что я закомментировал его способность быть сервером для других машин:
# restrict -4 default kod notrap nomodify nopeer noquery
# restrict -6 default kod notrap nomodify nopeer noquery
restrict default ignore
Если я сбегу ntpdate -q ntp.ubuntu.com
, Мне сказали, что часы моей машины отстают на 7 секунд.
В чем дело? Как я могу диагностировать, что происходит, есть ли журнал, который я могу включить?
подробнее # 1
# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
91.189.94.4 193.79.237.14 2 u 30 64 7 108.518 -0.136 0.361
подробнее # 2
Вот как это выглядело, когда я задал вопрос:
# ntpdate -q ntp.ubuntu.com
server 91.189.94.4, stratum 2, offset 7.191308, delay 0.13310
10 Jan 20:38:09 ntpdate[31055]: step time server 91.189.94.4 offset 7.191308 sec
И вот как это выглядит сейчас, после нескольких перезапусков ntpd (я предполагаю, что это исправило это):
# ntpdate -q ntp.ubuntu.com
server 91.189.94.4, stratum 2, offset 0.000112, delay 0.13164
10 Jan 20:47:03 ntpdate[31419]: adjust time server 91.189.94.4 offset 0.000112 sec
подробнее # 3
Я удалил ntp, установил openntpd и запустил /usr/sbin/ntpd -d
, и я вижу такой результат:
reply from 64.73.32.134: offset 6.715003 delay 0.041152, next query 30s
reply from 208.53.158.34: offset 6.700224 delay 0.036263, next query 31s
adjusting local clock by 6.734120s
reply from 72.18.205.156: offset 6.708575 delay 0.035885, next query 30s
reply from 64.73.32.134: offset 6.701463 delay 0.044199, next query 33s
Что для меня довольно ясно указывает на то, что я не могу установить время на своем сервере (хотя с обычным ntp оно, кажется, иногда обновляется ...).
подробнее # 4
Мой провайдер VPS говорит:
Последние версии ядер не должны привязывать вашу систему к часам нашего dom0, на всякий случай вы можете установить xen.independent_wallclock = 1 в sysctl.conf.
Что, как я полагаю, все еще не решает проблему того, что VPS требует наличия ЦП для правильных расчетов времени.
Вы можете включить вход в ntpd, добавив это в ntp.conf:
logfile /var/log/ntpd.log
Источник: Руководство по ntp
Если выключить ntpd, можно ли обновить часы из командной строки? Если вы запустите команду ntpdate и получите такую ошибку:
# ntpdate ntp.ubuntu.com
10 Jan 23:47:57 ntpdate[26284]: Can't adjust the time of day: Operation not permitted
Это означает, что вы, вероятно, используете VPS, и в этом случае вы не можете изменить системные часы - это можно сделать только на хост-машине.
Хорошо, ребята, с тех пор, как я задал этот вопрос, я переустановил ntp с конфигурацией поставщика по умолчанию (Ubuntu 10.0.4) и дал ему поработать несколько дней. На момент написания этой статьи ntpdate -q ntp.ubuntu.com
показывает, что мое время является точным с точностью до 0,000216 секунд. Итак, проблемы, которые у меня были, должны были быть связаны с моей настроенной конфигурацией (где я пытался сделать невозможным для внешних хостов запрашивать мой сервер, что я уже делаю с помощью своего брандмауэра, поэтому я не слишком беспокоюсь). Вот полный файл ntp.conf Ubuntu 10.0.4 без комментариев:
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server ntp.ubuntu.com
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
Я приветствую отзывы о том, как можно улучшить эту конфигурацию.
Я также обратился к своему провайдеру VPS с просьбой дать подробную рекомендацию о том, что лучше всего делать. Я указал им на этот поток и некоторую другую документацию, указывающую, что, возможно, выделение ресурсов ЦП вызовет проблемы с синхронизацией. Вот что они сказали:
Последние версии ядер не должны привязывать вашу систему к часам нашего dom0, на всякий случай вы можете установить xen.independent_wallclock = 1 в sysctl.conf. Это гарантирует, что экземпляр сервера не следит за часами на хост-сервере.
и:
Я думаю, вы неправильно понимаете, в какой степени эта проблема влияет на клиентов NTP в виртуализированной среде. По моему опыту работы с виртуализированной системой на хосте Xen (такой как наша установка в Rackspace Cloud) неточность, унаследованная из-за отсутствия выделенных системных часов для обработки прерываний, составляет доли секунды даже в сильно загруженных системах. Эта небольшая неточность легко устраняется NTP, даже если он настроен только на обновление времени серверов один раз в день (или даже реже).
То, что я обнаружил в прошлом, когда использовал ntpd вместо openntpd:
Вам нужно разрешить доступ к localhost, чтобы ntpd запускался правильно и действительно делал что-то
restrict 127.0.0.1
restrict ::1
Хотя вы можете использовать имена хостов для правил сервера, открытие резервных дыр для взаимодействия с этими серверами означает использование restrict
для которого требуются IP-адреса, поэтому мне все равно пришлось использовать IP-адреса для всего.
Вы не упоминаете об использовании restrict
чтобы открыть доступ к вашим серверам. Это проблема. Попробуйте такие блоки, как следующие:
# ntp.xs4all.nl
server 194.109.22.18
restrict 194.109.22.18
Для ntpd требуется несколько пиров или серверов, поскольку он пытается использовать голосование по правилам большинства для борьбы с плохим субъектом. Таким образом, минимум 4, чтобы иметь возможность иметь большинство при потере одного, предпочтительно 5.
Чтобы заблокировать доступ по умолчанию, я мог бы использовать:
restrict default notrust nomodify
чтобы по-прежнему иметь возможность запрашивать, но в итоге я использовал restrict default ignore
как вы это делаете, когда ntpd 4.2 изменил значение notrust
. вздох
Если вы не обслуживаете других, то вам, вероятно, не нужна вся мощь обычного ntpd, и вам следует подумать о openntpd
вместо. Написанный командой OpenBSD, это гораздо более минимальная реализация, использующая разделение привилегий и гораздо более простой файл конфигурации. Предполагается, что он не будет обеспечивать такое точное время, как ntpd, но его вполне достаточно для обычного сервера или рабочей станции.
В одном из ваших комментариев говорится, что вы работаете на виртуальном хосте. В этом случае вы, вероятно, не добьетесь большого успеха, потому что чувство времени вашего виртуального хоста будет зависеть как от реального хоста, на котором он работает, так и от того, насколько он занят в целом.
В зависимости от используемой виртуализации виртуальный хост может не получать стабильную долю прерываний в заданный период времени. Это заставит часы работать быстрее или медленнее, чем на самом деле. Поскольку ntp пытается измерить изменения, исходя из предположения, что ваши часы имеют фиксированную скорость, быстрее или медленнее, чем в остальном мире, это ускорение и замедление даст ntp припадки, и он, вероятно, в конечном итоге просто откажется, с результатом который ntp -np
показывает серверы времени, которые ntp посчитал неподходящими.
Лучше всего, если это так, вероятно, это грубая сила rdate -s $server
время от времени (например, каждые шесть часов), чтобы поворачивать часы за нос, чтобы они не слишком рассинхронизировались. Но мелкая точность, вероятно, недостижима.
В reach 7
в выводе ntpq указано, что вы позволяете ntpd работать только около 4 минут. 7 - это двоичный файл 111, что означает, что сервер был достигнут уже 3 раза. ntp обращается каждые 64 секунды (poll
значение) и ждал уже 30 секунд (when
значение) с момента последнего контакта.
В offset -0.136
указывает, что система уже синхронизирована. Только ntpd еще не пометил сервер как источник. Просто дайте ему больше времени, и появится маленькая звездочка.
Итак, на самом деле ваш ntpd синхронизировался. Но ntpd обычно не синхронизируется одним большим скачком (как ntpdate), а пытается медленно корректировать время и обеспечивает стабильное время в течение нескольких циклов.
PS: Я в курсе, что вопрос очень старый. Но проблема вневременная. И все остальные ответы вводят в заблуждение ИМХО. VMWare даже рекомендует использовать ntpd для синхронизации времени.
Я обнаружил, что моя система выключена, и был озадачен, почему часы HW не синхронизируются с системными часами при чистом завершении работы. Кажется, в sysconfig есть параметр NTP, который нужно отредактировать, чтобы это произошло.
В /etc/sysconfig/ntpd
:
# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no
Я установил это на yes
. Конечно, сначала убедитесь, что у вас есть надежный NTP-сервер и ваши системные часы надежны.
Я знал, что это все - мой перекос составлял 47 секунд, и мои часы HW также отставали на 47 секунд. Бинго! Моей первой подсказкой были сбои Kerberos, обнаруженные в журналах. Kerberos и многие NAS просто не будут работать, если разброс часов слишком велик.
Хорошего дня!
если вы используете vhost на vmware, прочтите следующую статью .. она должна вам помочь http://www.vmware.com/files/pdf/Timekeeping-In-VirtualMachines.pdf
Хай ..
Взгляните на эту ссылку, чтобы узнать, может ли она помочь в решении вашей проблемы:
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:Ch24: _The_NTP_Server
вы можете разместить содержимое вашего файла ntpd.conf, вывод команд отладки, таких как ntpq -p
И проверьте дату / время?
И проверьте это также, запустите ntpdate и запустите ntpd, синхронизируется ли время?
с наилучшими пожеланиями