Вопрос или проблема
Когда я запрашиваю статус демона NTP с помощью ntpdc -c sysinfo
, я получаю следующий вывод:
системный пир: 0.0.0.0
режим системного пира: unspec
индикатор скачков: 11
страта: 16
точность: -20
корневое расстояние: 0.00000 s
корневая дисперсия: 12.77106 s
идентификатор ссылки: [73.78.73.84]
время ссылки: 00000000.00000000 Чт, 7 фев 2036 7:28:16.000
флаги системы: auth monitor ntp kernel stats
дрожание: 0.000000 s
стабильность: 0.000 ppm
задержка передачи: 0.000000 s
задержка аутентификации: 0.000000 s
Это указывает на то, что синхронизация NTP не удалась. Однако системное время точно в пределах 1 секунды. Когда я запускал свою систему без сетевого подключения в тот же период, что и сейчас, системное время отклонялось примерно на 10 секунд.
Это поведение указывает на то, что у системы есть другой способ синхронизации времени. Я понял, что также существует systemd-timesyncd.service
(с конфигурационным файлом в /etc/systemd/timesyncd.conf
), и timedatectl status
дает мне правильное время:
Локальное время: Чт 2016-08-25 10:55:23 CEST
Всемирное время: Чт 2016-08-25 08:55:23 UTC
Время RTC: Чт 2016-08-25 08:55:22
Часовой пояс: Европа/Берлин (CEST, +0200)
NTP включен: да
NTP синхронизирован: да
RTC в локальном TZ: нет
DST активен: да
Последнее изменение DST: DST начался в
Вс 2016-03-27 01:59:59 CET
Вс 2016-03-27 03:00:00 CEST
Следующее изменение DST: DST заканчивается (часы возвращаются на один час назад) в
Вс 2016-10-30 02:59:59 CEST
Вс 2016-10-30 02:00:00 CET
Так что мой вопрос: в чем разница между двумя механизмами? Один из них устарел? Могут ли они использоваться параллельно? Кому я должен доверять, когда хочу узнать статус синхронизации NTP?
(Обратите внимание, что у меня есть другая система (в другой сети), для которой оба метода указывают на успешную работу и предоставляют правильное время.)
systemd-timesyncd – это, по сути, небольшой клиентский NTP, более или менее объединенный с новыми версиями systemd. Он легче, чем полноценный ntpd, но поддерживает только синхронизацию времени – то есть не может выступать в роли NTP-сервера для других машин. Он предназначен для замены ntpd для клиентов.
Не следует использовать оба метода параллельно, так как теоретически они могут выбирать разные временные серверы с небольшими задержками между ними, что может привести к тому, что ваши системные часы будут периодически “скакать”.
Чтобы получить статус, к сожалению, нужно использовать ntpdc
, если вы используете ntpd, и timedatectl
, если вы используете timesyncd; мне не известна утилита, которая может читать оба.
systemd-timesyncd не выполняет дисциплину часов: часы не обучаются и не компенсируются, а внутреннее дрейфование часов со временем не уменьшается. У него есть примитивная логика для корректировки интервала опроса, но без дисциплины хост в конечном итоге будет иметь нерегулярное время, поскольку systemd-timesyncd будет пытаться адаптироваться к дрейфу. Оно также не может оценить качество удаленного источника времени. Скорее всего, вы не получите точности больше 100 мс. Это достаточно для простых конечных устройств, таких как ноутбуки, но это определенно может вызвать проблемы для распределенных систем, которым требуется большая точность времени.
Чтобы прояснить различия между тремя наиболее часто используемыми демонами:
timesyncd и ntpd – это оба службы синхронизации времени, доступные в Linux, но они существенно различаются по функциональности, сложности и областям применения. Вот основные различия и рекомендации о том, какой из них может быть лучше в зависимости от ваших нужд.
1. Цель и области применения
– systemd-timesyncd:
- Цель: Простой NTP-клиент, встроенный в systemd для базовой синхронизации времени с удаленными серверами NTP.
- Область применения: Подходит для настольных пользователей, легких серверов или сред, где нужна надежная, точная синхронизация времени без необходимости в продвинутых функциях, таких как пользовательские настройки времени.
– ntpd (демон протокола сетевого времени):
- Цель: Полнофункциональная, автономная реализация NTP, которая предоставляет как синхронизацию времени, так и расширенные параметры конфигурации.
- Область применения: Идеально подходит для сред, где требуются высокая точность, пользовательские настройки или возможности сервера времени, таких как в дата-центрах, корпоративных системах или сетях с сложными требованиями к ведению времени.
2. Функциональность и особенности
– systemd-timesyncd:
- Простой NTP-клиент.
- Использует меньше системных ресурсов и имеет низкую нагрузку.
- В основном синхронизирует время с внешними серверами NTP, не предоставляя время другим системам.
- Не поддерживает продвинутые функции NTP, такие как аппаратная временная метка, точное ведение времени или уровни страты локальных часов.
– ntpd:
- Полная реализация NTP, поддерживающая как клиентский, так и серверный режимы.
- Может выступать в качестве NTP-сервера, распределяя время другим системам.
- Поддерживает сложные конфигурации (например, пиринг между серверами NTP, несколько источников времени, дисциплину часов, обработку скачков).
- Предоставляет более высокую точность, включая точность до микросекунд, в зависимости от оборудования и условий сети.
- Может быть настроен на использование аппаратных референсных часов (например, GPS-приемников) для высокоточного ведения времени.
3. Удобство использования и настройки
– systemd-timesyncd:
- Легок в использовании и настройке, требует минимальной настройки.
- Конфигурация осуществляется через базовый файл /etc/systemd/timesyncd.conf или автоматически через DHCP.
- Подходит для пользователей, которым просто нужна точная синхронизация времени без углубления в подробные настройки.
– ntpd:
- Сложнее настраивать и конфигурировать из-за широкого набора функций.
- Требует ручной настройки NTP-серверов в /etc/ntp.conf.
- Предлагает более детальный контроль над синхронизацией времени, но может потребовать более глубоких знаний о протоколах NTP и принципах синхронизации времени.
4. Использование ресурсов
– systemd-timesyncd:
- Легковесный, с очень низкой нагрузкой на ЦП и память.
- Предназначен для систем, где критично минимальное потребление ресурсов (например, встроенные устройства, легкие серверы).
– ntpd:
- Потребляет больше ресурсов, хотя и все еще довольно низко для большинства современных систем.
- Может быть избыточным для систем, которым нужна только базовая синхронизация времени, учитывая его сложность.
5. Точность
– systemd-timesyncd:
- Предоставляет достаточную точность для большинства некритических случаев использования (в пределах миллисекунд или десятков миллисекунд).
– ntpd:
- Предлагает более высокую точность (до микросекунд, в зависимости от оборудования и сети).
- Лучше подходит для приложений, где точное ведение времени имеет решающее значение, таких как финансовые системы, научные эксперименты или системы в реальном времени.
6. Что лучше?
– systemd-timesyncd лучше, если:
- Вам нужна простая, надежная синхронизация времени без каких-либо сложных требований.
- Вы используете легкий сервер, настольный компьютер или встроенное устройство, где важна эффективность ресурсов.
- Вы предпочитаете простоту и минимальные настройки.
- Требования к точности не слишком высоки (миллисекунды приемлемы).
– ntpd лучше, если:
- Вам требуется синхронизация времени с высокой точностью (точность в микросекундах или лучше).
- Вам нужно настроить сервер времени для предоставления времени другим устройствам в сети.
- Вам нужны продвинутые функции NTP, такие как синхронизация аппаратных часов, множественные источники времени или режим пиринга.
- Вы работаете в среде с жесткими требованиями к ведению времени, таких как научные исследования, финансы или системы реального времени.
7. Альтернативы:
chrony: Другой инструмент для синхронизации времени, который часто рассматривается как среднее решение между timesyncd и ntpd. Он легковесный, как timesyncd, но предлагает много продвинутых функций и более высокую точность, делая его популярным выбором для серверных сред.
Резюме:
-
timesyncd: Идеален для большинства типичных пользователей и серверов, где важны простота и легковесная функциональность.
-
ntpd: Идеален для сложных сред, где необходима точность ведения времени, конфигурация серверов и продвинутые функции NTP.
-
chrony: Сильная альтернатива, объединяющая простоту timesyncd с некоторыми из продвинутых функций ntpd.
Ответ или решение
NTPD против systemd-timesyncd: Как обеспечить надежную синхронизацию времени?
Синхронизация времени является важной задачей в IT-инфраструктуре, особенно для распределенных систем и приложений, которые требуют точного времени. В Linux существует несколько решений для синхронизации времени, среди которых наиболее известными являются ntpd
и systemd-timesyncd
. В данной статье мы рассмотрим различия между этими двумя механизмами и поможем выбрать подходящее решение для ваших нужд.
Что такое systemd-timesyncd и ntpd?
systemd-timesyncd — это простой временной клиент, встроенный в более новые версии systemd. Он предназначен для базовой синхронизации времени с удаленными серверами NTP. Его целью является обеспечение надежной и точной синхронизации времени без необходимости в сложной настройке.
ntpd (Network Time Protocol Daemon) — это полноправная реализация NTP, которая предоставляет как синхронизацию времени, так и продвинутые возможности настройки. ntpd
может работать как клиент, синхронизируя системное время, так и как сервер, который предоставляет точное время другим системам.
Какой выбрать?
Между этими двумя решениями существуют важные различия:
-
Назначение и сценарии использования:
- systemd-timesyncd: Хорошо подходит для настольных ПК, легковесных серверов или сред, где требуется простая и надежная синхронизация без сложной конфигурации.
- ntpd: Лучше подходит для распределенных систем, дата-центров и серверов, где необходима высокая точность и сложная настройка.
-
Функциональность и возможности:
- systemd-timesyncd:
- Простой клиент NTP с низкими затратами ресурсов.
- Не может выступать в роли сервера для других систем.
- Не поддерживает сложные функции, такие как аппаратное временное штампование или управление скачками времени.
- ntpd:
- Поддерживает клиент и серверный режимы.
- Может подвергать время дисциплине, уменьшая дрейф часов.
- Обеспечивает более высокую точность, вплоть до микросекунд, в зависимости от аппаратного и сетевого окружения.
- systemd-timesyncd:
-
Легкость использования и настройки:
- systemd-timesyncd: Легко настраивается, с минимальной конфигурацией через
/etc/systemd/timesyncd.conf
. - ntpd: Требует более сложной настройки и глубокого понимания протоколов NTP.
- systemd-timesyncd: Легко настраивается, с минимальной конфигурацией через
-
Точность:
- systemd-timesyncd: Достаточно точен для большинства не критичных задач, предоставляя точность в пределах миллисекунд.
- ntpd: Обеспечивает высокую точность, необходимую для таких приложений, как финансовые системы и экспериментальная наука.
Рекомендации по использованию
-
Параллельная работа: Не рекомендуется использовать оба механизма одновременно, поскольку они могут выбирать разные серверы времени, что приведет к непостоянству системы.
-
Мониторинг статуса синхронизации: Используйте
timedatectl
для получения статуса, если работаете сsystemd-timesyncd
, иntpq
илиntpdc
для мониторингаntpd
. -
Точность и требования: Если ваши приложения требуют более высокой точности, от 1 до 10 миллисекунд, выбирайте
ntpd
. Для менее критичных задач, таких как работа с базовыми настольными системами или офисными ПК, можно использоватьsystemd-timesyncd
.
Альтернативы
chrony: это еще одно решение для синхронизации времени, которое часто рассматривают как компромисс между systemd-timesyncd
и ntpd
. Chrony предлагает легковесность, как systemd-timesyncd, вместе с продвинутыми функциями и высокой точностью, что делает его популярным выбором для сервера.
Заключение
Варианты ntpd
и systemd-timesyncd
каждый имеют свои сильные и слабые стороны. Ваш выбор зависит от требований к точности, сложности конфигурации и специфики приложений, которые вы планируете запустить. Если вам нужна простая и быстрая настройка, systemd-timesyncd будет идеальным выбором. В то время как для точных и критических задач лучше подойдет ntpd.