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

Один NTP-сервер в изолированной сети

У меня есть две Linux-машины (A и B) в изолированной сети. Они должны быть синхронизированы по времени. Машина A получает питание с перерывами и должна обслуживать время, поскольку она подключена к авторитетному источнику времени (GPS). Машина B получает питание только в том случае, если питание машины A, но это встроенное устройство Linux, и его состояние питания будет часто меняться. Ни одна из машин не имеет доступа к другим системам. Это закрытая сеть.

Я понимаю, что это довольно сложная задача для NTP, поскольку NTP обычно ожидает контакта с несколькими серверами. У меня проблемы с тем, чтобы это работало должным образом на машине B. Машина A синхронизируется с GPS очень хорошо, и машина B может связаться с машиной A и даже выполнять запросы времени, но машине A не доверяют (возможно, самой по себе?). После целого часа работы машины А это внезапно изменилось, и машина Б заработала. Однако, когда машина A вышла из строя (и, следовательно, машина B), машина B снова не может найти подходящую синхронизацию времени.

Вот некоторая информация о ntpdate. Обратите внимание, что даже когда уровень машины A равен 1, операция завершается ошибкой с тем же выходом в конце.

10.10.10.1: Server dropped: strata too high
server 10.10.10.1, port 123
stratum 16, precision -19, leap 11, trust 000
refid [10.10.10.1], delay 0.02614, dispersion 0.00000
transmitted 4, in filter 4
reference time:    00000000.00000000  Thu, Feb  7 2036  6:28:16.000
originate timestamp: d3a9bdc4.27ebb350  Thu, Jul 12 2012 21:19:00.155
transmit timestamp:  bc17c803.b42dfffe  Sat, Jan  1 2000  0:25:39.703
filter delay:  0.02625  0.02614  0.02618  0.02625 
         0.00000  0.00000  0.00000  0.00000 
filter offset: 39544160 39544160 39544160 39544160
         0.000000 0.000000 0.000000 0.000000
delay 0.02614, dispersion 0.00000
offset 395441600.451568

 1 Jan 00:25:39 ntpdate[677]: no server suitable for synchronization found

Я предполагаю, что машина А просто не доверяет себе в части отсчета времени. После 51 минуты (может быть, раньше, я не знаю) времени безотказной работы и синхронизации часов с GPS, машина A начала правильно отсчитывать время, а машина B. Мне нужно, чтобы это случилось раньше. Если возможно, в течение нескольких секунд.

Со следующими конфигурациями (и долгим ожиданием) в конечном итоге это удается.

Машинный файл ntp.conf:

server 127.127.28.0 prefer true minpoll 4 maxpoll 4
fudge 127.127.28.0 stratum 1 time1 0.420 refid GPS 

Машина B ntp.conf:

server 10.10.10.1 prefer true minpoll 4 maxpoll 4

ntpq -c сверстники на машине B без своевременного исправления:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.10.10.1   .STEP.          16 u    9   16    0    0.000    0.000   0.000

ntp1 -c сверстники на машине B с своевременным исправлением:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.10.10.1   SHM(0)           2 u    7   16   17    0.669    2.597   1.808

Итак, теперь возникает вопрос: как мне быстро заставить машину А довериться?

Некоторые отладочные данные с машины A до и после того, как машина B решит, что машина A достаточно хороша для использования.

перед..

~ # ntpq -c rv
associd=0 status=c418 leap_alarm, sync_uhf_radio, 1 event, no_sys_peer,
version="ntpd 4.2.6p4@1.2324 Fri Feb 24 15:01:45 UTC 2012 (1)",
processor="armv7l", system="Linux/2.6.35.14", leap=11, stratum=2,
precision=-19, rootdelay=0.000, rootdisp=44.537, refid=SHM(0),
reftime=d3ab0053.43b44780  Fri, Jul 13 2012 20:15:15.264,
clock=d3ab0062.e7e03154  Fri, Jul 13 2012 20:15:30.905, peer=34819, tc=4,
mintc=3, offset=0.000, frequency=0.000, sys_jitter=3.853,
clk_jitter=36.492, clk_wander=0.000

после...

~ # ntpq -c rv
associd=0 status=0415 leap_none, sync_uhf_radio, 1 event, clock_sync,
version="ntpd 4.2.6p4@1.2324 Fri Feb 24 15:01:45 UTC 2012 (1)",
processor="armv7l", system="Linux/2.6.35.14", leap=00, stratum=2,
precision=-19, rootdelay=0.000, rootdisp=41.278, refid=SHM(0),
reftime=d3ab0063.43b37856  Fri, Jul 13 2012 20:15:31.264,
clock=d3ab006d.9ee53ec2  Fri, Jul 13 2012 20:15:41.620, peer=34819, tc=4,
mintc=3, offset=0.000, frequency=43.896, sys_jitter=0.762,
clk_jitter=36.953, clk_wander=0.000

NTP должен работать нормально. Посмотрите на некоторые варианты быстрой синхронизации при запуске. Посмотрите на burst и iburst варианты для системы Б. Посмотрите на true опция для источника часов GPS.

Рассмотрите возможность использования аппаратных часов в качестве резервного источника времени в обеих системах. Установите систему более высокого уровня B. Должно работать примерно следующее:

server  127.127.1.0
fudge   127.127.1.0 stratum 8

Следите за выходом ntpq -c peers чтобы увидеть, когда вы получите надежный источник часов. Как обычно ntp хочет получить несколько ответов от надежного источника времени, прежде чем он ему доверяет. На это указывает первый символ в каждой строке.

Хотя NTP любит больше источников, любое нечетное количество источников времени на одном уровне страты должно работать хорошо. Поскольку у вас есть только два сервера и часы GPS, приоритет (слой) источников должен увеличиваться от GPS, часов на сервере A, часов на сервере B. Увеличение страты между каждым из них на три или четыре уровня обеспечит соблюдение приоритетов.

РЕДАКТИРОВАТЬ: Если у вас есть NTP-сервер busybox на сервере A, возможно, стоит установить полный пакет сервера ntp. Понимание того, что происходит с сервером A, должно иметь большое значение для решения вашей проблемы. Вам понадобится хотя бы один надежный источник времени, прежде чем сервер B сможет ему доверять. Если ntpq -c peers не работает, тогда вы можете попробовать ntpdc peers. Обе эти команды позволяют запрашивать другие хосты. А peerstats log также может быть полезен.

На сервере B используйте ntpclient, как описано в документации. Busybox NTP как записывать, что на нем происходит

Часы должны быть достаточно близки к правильному времени, если серверы не простаивали долгое время. Если вам нужно синхронизировать две системы, этого должно быть достаточно. В конечном итоге GPS синхронизирует время с реальным миром.

'ntpd -q' синхронизируется быстро, но завершается (поведение ntpdate). За ним должен следовать ntpd без опции выхода для непрерывной синхронизации.

EDIT2: я проверяю свой сервер и обнаружил, что один из серверов отключился на секунду. Исправляя это, я играл с настройками. iburst очень быстро доверяет серверу. true гарантирует, что драйверу часов можно доверять, если не было нескольких других доверенных источников. Часы заняли чуть больше минуты, прежде чем им стало доверять локально и им можно было доверять удаленно.

Во время тестирования вы сможете перезапустить ntpd выполните процесс после синхронизации и проверьте, насколько быстро работают настройки. В приведенном выше случае может потребоваться перезапуск сервера B, чтобы проверить, насколько быстро он синхронизируется. При мониторинге ntpd изменения я использую такую ​​строку:

while ntpq -c peers localhost; do sleep 10; done

Имя хоста и время сна настраиваются по мере необходимости. В некоторых случаях я связываю два или более ntpq командные строки в цикле. При этом я использую команду echo и / или date, чтобы указать, где меняются наборы данных.