ntpd против systemd-timesyncd - Как добиться надежной синхронизации NTP?


31

Когда я запрашиваю статус демона NTP с помощью команды, ntpdc -c sysinfoя получаю следующий вывод:

system peer:          0.0.0.0
system peer mode:     unspec
leap indicator:       11
stratum:              16
precision:            -20
root distance:        0.00000 s
root dispersion:      12.77106 s
reference ID:         [73.78.73.84]
reference time:       00000000.00000000  Thu, Feb  7 2036  7:28:16.000
system flags:         auth monitor ntp kernel stats
jitter:               0.000000 s
stability:            0.000 ppm
broadcastdelay:       0.000000 s
authdelay:            0.000000 s

Это указывает на сбой синхронизации NTP. Однако системное время с точностью до 1 секунды. Когда я запускал свою систему без сетевого подключения в течение того же периода, что и сейчас, системное время отклонялось на ~ 10 с.

Такое поведение предполагает, что система имеет другой способ синхронизации времени. Я понял, что есть также systemd-timesyncd.service(с файлом конфигурации в /etc/systemd/timesyncd.conf) и timedatectl statusдает мне правильное время:

      Local time: Thu 2016-08-25 10:55:23 CEST
  Universal time: Thu 2016-08-25 08:55:23 UTC
        RTC time: Thu 2016-08-25 08:55:22
       Time zone: Europe/Berlin (CEST, +0200)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2016-03-27 01:59:59 CET
                  Sun 2016-03-27 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2016-10-30 02:59:59 CEST
                  Sun 2016-10-30 02:00:00 CET

Итак, мой вопрос: в чем разница между этими двумя механизмами? Один из них устарел? Могут ли они использоваться параллельно? Какой следует доверять, когда я хочу запросить статус синхронизации NTP?

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


2
Я обнаружил, что Fedora на самом деле использует chrony : настройка NTP с помощью chrony Suite
David Tonhofer

Ответы:


19

systemd-timesyncd - это, по сути, небольшая клиентская реализация NTP, более или менее связанная с более новыми выпусками systemd. Он более легкий, чем полноценный ntpd, но поддерживает только синхронизацию времени - то есть он не может выступать в качестве NTP-сервера для других машин. Он предназначен для замены ntpd для клиентов.

Не следует использовать оба параллельно, так как теоретически они могут выбирать разные серверы времени, которые имеют небольшую задержку между ними, что приводит к тому, что ваши системные часы периодически «нервничают».

Чтобы получить статус, вам, к сожалению, нужно использовать, ntpdcесли вы используете ntpd и timedatectlесли вы используете timesyncd, я не знаю ни одной утилиты, которая могла бы читать оба.


Тогда как это возможно, что в одной системе синхронизация ntpd не выполняется, а в другой она успешна (обе системы работают под управлением systemd-timesyncd параллельно). Я совершенно уверен, что это не связано с проблемой брандмауэра, так как я проверил соответствующие настройки. Прямо сейчас у меня осталось два результата, и я склонен доверять успешному, однако у меня есть сомнения, поскольку оба клиента реализуют один и тот же протокол NTP, но один не работает. На самом деле я ожидал бы, что они оба будут работать.
a_guest

1
ntpd и timesyncd используют разные настройки. Вы установили один и тот же сервер времени для обоих?
maxf

Вы можете использовать Timesyncd для синхронизации времени с GPS, как с NTP?
Бакалоло

Systemd-timesyncd - это клиент SNTP, который менее точен, чем NTP. Читатели не должны вводить себя в заблуждение, полагая, что systemd-timesyncd - это легкий NTP-клиент.
Филипп Коуллинг

14

systemd-timesyncd не применяет часовую дисциплину: часы не обучены и не скомпенсированы, а смещение внутренних часов с течением времени не уменьшается. Он имеет элементарную логику для настройки интервала опроса, но без дисциплины хост будет заканчиваться неравномерным временем навсегда, так как systemd-timesyncd толкает или тянет с любым интервалом, который, по его мнению, требует краткосрочный дрейф. Он также не может оценить качество удаленного источника времени. Вы вряд ли получите точность, превышающую 100 мс. Этого достаточно для простых конечных пользовательских устройств, таких как ноутбуки, но это может определенно вызвать проблемы для распределенных систем, которые требуют большей точности времени.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.