Как мне узнать, действительно ли chronyd самосинхронизируется правильно?
Я работаю на некоторых устройствах, где я хочу, чтобы они самосинхронизировались, когда их сетевое соединение не работает (то есть используют расчеты частоты дрейфа Chrony, чтобы компенсировать дрейф системных часов), и затем синхронизируются нормально, когда доступно удаленное подключение.
К сожалению, chronyd не может подключиться к порту прослушивания NTP и активно пытается отправлять пакеты на адрес псевдосервера NTP, и у меня возникают проблемы с определением ожидаемого поведения.
Стандарт chrony.conf
параметры, рекомендуемые для самосинхронизации:
server 127.127.1.0 # Self-synchronise
allow 127.0.0.0/8 # NTP server for the local system, not just a client
local stratum 10 # Serve low quality time even when the remote link is down
Тем не менее, когда я бегу chrony sources
с такой конфигурацией он заявляет, что не синхронизировался с сервером псевдо-времени для localhost
:
chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 127.127.1.0 0 7 0 - +0ns[ +0ns] +/- 0ns
Даже если chrony tracking
похоже, что он работает так, как ожидалось:
$ chronyc tracking
Reference ID : 7F7F0101 ()
Stratum : 10
Ref time (UTC) : Mon Jun 04 08:27:11 2018
System time : 0.000000007 seconds fast of NTP time
Last offset : +3.297439098 seconds
RMS offset : 3.297439098 seconds
Frequency : 466.833 ppm slow
Residual freq : +0.000 ppm
Skew : 0.000 ppm
Root delay : 0.000000000 seconds
Root dispersion : 0.000000000 seconds
Update interval : 0.0 seconds
Leap status : Normal
Как бы я ни настраивал allow
Настройки в файле конфигурации я не могу получить chronyd
чтобы показать, как на самом деле прослушивает порт UDP 123
на любом из интерфейсов машины, в то время как я ожидаю увидеть это в netstat -ulnp
если я успешно настроил его в качестве сервера времени.
Еще более странно, если я бегу chronyd
под strace -f
Я вижу, что он пытается отправлять сообщения 127.127.1.0
хотя он должен знать, что это псевдо-адрес для синхронизации местного времени.
В сложившейся ситуации у меня очень мало уверенности в том, что chrony
фактически компенсирует смещение тактовой частоты, когда удаленное соединение не работает, поскольку сложно спровоцировать ситуацию, когда ему действительно необходимо автоматически исправить смещение тактовой частоты.
Итак, мой актуальный вопрос: кто-нибудь знает, как определить, правильно ли настроен хронограф для самосинхронизации в автономном режиме? Или мне просто нужно развернуть это, как я сейчас настроил, а затем подождать и посмотреть, есть ли у нас проблемы с дрейфом часов, когда устройства отключены от их внутреннего сервера управления?
2 ответа
Мне удалось найти проблему: произошло постороннее port 0
в существующем конфигурационном файле, с которого я начал, allow
линия неправильно настраивала локальный сервер времени. Удалите эту строку, и все заработало так, как я ожидал.
Это означает, что ответ на мой оригинальный вопрос "Делай, что сделал":
- Проверь это
sudo netstat -ulnp
шоуchronyd
прослушивание порта NTP (UDP 123) - Проверь это
sudo chronyc sources
шоу127.127.1.0
как доступный источник
Тот факт, что эти проверки провалились для меня, был точным отражением того факта, что port 0
установка не была правильной.
Вы можете рассмотреть информацию на
https://chrony.tuxfamily.org/doc/3.3/chrony.conf.html
в соответствии с тем, что говорится в изолированных сетях.
Есть несколько вариантов, которые помогут настроить время псевдо. Особенно этот парраграф может быть вам интересен:
Если нет подходящего компьютера, который будет назначен ведущим, или требуется синхронизировать клиенты даже в случае сбоя, опция-сирота локальной директивы включает специальный режим, когда мастер выбирается автоматически из нескольких компьютеров. Все они должны использовать одну и ту же локальную конфигурацию и опрашивать друг друга. Сервер с наименьшим ссылочным идентификатором (который основан на его IP-адресе) будет выполнять роль ведущего, а другие будут синхронизироваться с ним. В случае сбоя сервер со вторым наименьшим идентификатором ссылки вступит во владение и так далее.
Но как я понял из документации требуется несколько серверов.
Если ваш сервер синхронизирован, возможно, этот сценарий применим к вам: https://chrony.tuxfamily.org/faq.html
Проверить
Reach
значение напечатано хроникомsources
команда. Если это ноль, это означает, что chronyd не получил никаких действительных ответов от сервера NTP, который вы пытаетесь использовать.
Также руководство объясняет о local
директива
местный [вариант]…
Локальная директива включает локальный эталонный режим, который позволяет chronyd, работающему как NTP-сервер, выглядеть синхронизированным с реальным временем (с точки зрения клиентов, опрашивающих его), даже если он никогда не был синхронизирован или последнее обновление часов происходило долгое время тому назад.
Так что это может дать время для синхронизации, хотя это не так