Настройка локального NTP-сервера stratum 2

9

Я пытаюсь настроить NTP в локальной сети, которая не имеет (и никогда не будет) подключение к Интернету. Основным приоритетом является то, что машины в сети синхронизируются друг с другом, даже если время их синхронизации не является точным на 100%.

У нас также есть требование использовать иерархию NTP для репликации настроек развернутой системы. То, что я хочу сделать, это иметь иерархию машин, как это:

Moon  (Main Server running Windows) (10.1.3.10)
|____Earth   (Linux x64 client) (10.1.3.1)
|____Mars    (Linux x64 client) (10.1.3.2)
|____Saturn  (Linux x64 client) (10.1.3.3)
|____RackCard23   (Linux x64 client and server to the two machines below)  (10.1.3.23)
     |___RackCard21   (Linux x64 client) (10.1.4.21)
     |___RackCard22   (Linux x64 client) (10.1.4.22)

Обратите внимание, что карты RackCard имеют два порта Ethernet, один из которых подключен к сети 10.1.3.x, а другой - в сети 10.1.4.x. RackCard23, которая синхронизируется с главным сервером, Moon сделает это в сети 10.1.3.x, а RackCard22 / 23 подключится к RackCard23 в сети 10.1.4.x. Это потому, что я не хочу, чтобы RackCards22 / 23 оставлял свою сеть для синхронизации времени, и потому что он копирует окончательно развернутую систему.

До сих пор мне удалось получить все, что нужно, синхронизируя с Луны для правильной синхронизации (включая RackCard23).

Но у меня возникают трудности с синхронизацией RackCard22 и 23 с RackCard23.

[root@RackCard23]# cat /etc/ntp.conf
# NTP Deamon Configuration File "ntp.conf"
# Created on 27/04/2010
# Original backed-up as "ntp.conf.backup"

server 10.1.3.10 iburst minpoll 4 maxpoll 4 prefer #This is what we want to happen
fudge   127.127.1.0 stratum 2   #Not sure about these two lines, was trying to force it to be a stratum 2 server
fudge   127.127.0.1 stratum 2

# Drift file.  Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /var/lib/ntp/drift
restrict 10.1.3.10 mask 255.255.255.255 nomodify notrap noquery

#Attempt to get to act as an NTP Server
broadcast 10.1.4.255

restrict 10.1.3.21 mask 255.255.255.255 nomodify notrap
restrict 10.1.4.21 mask 255.255.255.255 nomodify notrap

Это вывод из ntptrace:

[rootRackCard23]# /usr/sbin/ntptrace
localhost.localdomain: stratum 16, offset 0.000000, synch distance 0.000030

Как вы можете видеть, машина сообщает о себе как сервер stratum 16, несмотря на то, что она синхронизирована с сервером stratum 1 (Moon):

[root@RackCard23 awd]# /usr/sbin/ntpdate -d 10.1.3.10
21 Jun 13:55:09 ntpdate[19410]: ntpdate 4.2.2p1@1.1570-o Tue May 19 13:57:56 UTC 2009 (1)
Looking for host 10.1.3.10 and service ntp
host found : 10.1.3.10
transmit(10.1.3.10)
receive(10.1.3.10)
transmit(10.1.3.10)
receive(10.1.3.10)
transmit(10.1.3.10)
receive(10.1.3.10)
transmit(10.1.3.10)
receive(10.1.3.10)
transmit(10.1.3.10)
server 10.1.3.10, port 123
stratum 1, precision -6, leap 00, trust 000
refid [LOCL], delay 0.04135, dispersion 0.00383
transmitted 4, in filter 4
reference time:    cfc99402.e010624d  Mon, Jun 21 2010  8:32:18.875
originate timestamp: cfc9dfad.48000000  Mon, Jun 21 2010 13:55:09.281
transmit timestamp:  cfc9dfad.47e27179  Mon, Jun 21 2010 13:55:09.280
filter delay:  0.04155  0.04155  0.04137  0.04135
         0.00000  0.00000  0.00000  0.00000
filter offset: -0.01448 0.000781 0.000537 0.000394
         0.000000 0.000000 0.000000 0.000000
delay 0.04135, dispersion 0.00383
offset 0.000394

21 Jun 13:55:09 ntpdate[19410]: adjust time server 10.1.3.10 offset 0.000394 sec

Конфигурация клиентов (RackCard21 / 22) выглядит следующим образом:

[root@RackCard21]# cat /etc/ntp.conf
# NTP Deamon Configuration File "ntp.conf"
# Created on 27/04/2010
# Original backed-up as "ntp.conf.backup"

server 10.1.4.23 iburst minpoll 4 maxpoll 4 prefer

server 127.127.1.0
fudge   127.127.1.0 stratum 10

# Drift file.  Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
driftfile /var/lib/ntp/drift

# restrict 127.0.0.1

restrict None mask 255.255.255.255 nomodify notrap noquery

И ntptrace дает это:

[root@RackCard21]# /usr/sbin/ntpdate -d 10.1.4.23
21 Jun 14:04:34 ntpdate[14381]: ntpdate 4.2.2p1@1.1570-o Tue May 19 13:57:56 UTC 2009 (1)
Looking for host 10.1.4.23 and service ntp
host found : 10.1.4.23
transmit(10.1.4.23)
receive(10.1.4.23)
transmit(10.1.4.23)
receive(10.1.4.23)
transmit(10.1.4.23)
receive(10.1.4.23)
transmit(10.1.4.23)
receive(10.1.4.23)
transmit(10.1.4.23)
10.1.4.23: Server dropped: strata too high
server 10.1.4.23, port 123
stratum 16, precision -20, leap 11, trust 000
refid [10.1.4.23], delay 0.02568, dispersion 0.00000
transmitted 4, in filter 4
reference time:    00000000.00000000  Thu, Feb  7 2036  6:28:16.000
originate timestamp: cfc9dfef.12b79516  Mon, Jun 21 2010 13:56:15.073
transmit timestamp:  cfc9e1e2.aeae7d56  Mon, Jun 21 2010 14:04:34.682
filter delay:  0.02573  0.02571  0.02568  0.02568
         0.00000  0.00000  0.00000  0.00000
filter offset: -499.609 -499.609 -499.609 -499.609
         0.000000 0.000000 0.000000 0.000000
delay 0.02568, dispersion 0.00000
offset -499.609286

21 Jun 14:04:34 ntpdate[14381]: no server suitable for synchronization found

Поэтому он не может найти подходящий сервер, потому что сервер, который я пытаюсь использовать, сообщает, что это сервер уровня 16 (который, я считаю, означает не синхронизированный). И это несмотря на то, что оно синхронизировано.

Поэтому мне нужно каким-то образом сделать RackCard23 более высоким слоем (в идеале, слой 2). Как мне это сделать?

Любая помощь очень ценится, поскольку я пытаюсь заставить это работать в течение многих дней!

РЕДАКТИРОВАТЬ:

Привет Кристофер

Я перезагружал ntpd, да;)

Все пакеты Linux работают под управлением CentOS 5.4.

Это вывод предложенных вами команд. Сначала с сервера:

[root@RackCard23]# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.1.3.10       .INIT.          16 u    -   16    0    0.000    0.000   0.000
 10.1.4.255      .BCST.          16 u    -   64    0    0.000    0.000   0.001

[root@RackCard23]# /usr/sbin/ntpdc -c monlist
remote address          port local address      count m ver code avgint  lstint
===============================================================================
localhost.localdomain  34566 127.0.0.1              1 7 2      0      0       0
10.1.4.21                123 10.1.4.23              5 3 4    180      5       1
10.1.4.22                123 10.1.4.23              7 3 4      0      2       2

А потом от клиента:

[root@RackCard21]# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.1.4.23       .INIT.          16 u   10   16    0    0.000    0.000   0.000
 LOCAL(0)        .LOCL.          10 l   44   64    1    0.000    0.000   0.001
fwgx
источник
Если у вас нет подключения к интернету, каков ваш источник времени, я где-то пропустил?
dbasnett
Источник времени не имеет большого значения, мы не на 100% точны. Мы хотим, чтобы все машины были синхронизированы друг с другом, даже если это означает, что их время на 10 минут меньше фактического времени. Таким образом, мы используем случайную машину в сети в качестве источника основного времени - то есть только его внутренние часы. То, что мы знаем и принимаем, ненадежно, но до тех пор, пока все синхронизируется, у нас все в порядке. В реальной развернутой системе мы будем синхронизироваться с источником времени в другой системе, которую мы не можем контролировать, что может быть или не быть более точным.
fwgx

Ответы:

5

Как упоминал Крис, страта 16 указывает, что сервер на самом деле не синхронизирован с сервером. Просто чтобы быть уверенным, вы перезапустили службы ntp, верно? ( service ntpd restart) Я не пытаюсь намекнуть, что ты скучаешь по легким вещам, но я всегда делаю!

Можете ли вы опубликовать вывод еще нескольких команд для диагностики?

ntpq -pна клиенте и сервере. Должен показать, какие серверы он настроил, а также статистику для этих серверов.
ntpdc -c monlistна сервере. Должен показать клиентов, подключенных.

Кроме того, поскольку вы не упомянули ОС, я использую команды в стиле RHEL. Дайте мне знать, если у вас есть что-то другое.

РЕДАКТИРОВАТЬ после получения дополнительной информации.
Хорошо, увидев ваш вывод, вот ваша проблема: у вас нет сервера stratum 1. На самом деле «Луна» использует свои местные часы. Он сообщает о себе как сервер уровня 16. Для справки, сервер Stratum1 будет иметь локальные GPS или атомные часы. У вас есть один из них? В противном случае Moon необходимо синхронизировать свои часы с ДРУГИМ сервером ntp. Если у него нет доступа к сети, вам нужно будет выдумать его слой. (Это требует, чтобы вы не слишком заботились о «истинном» времени. Что вы не делаете, но любой, кто читает это, должен это заметить.)

На Луне, добавьте следующую строку в файл ntp.conf: fudge 127.127.1.0 stratum 10. Это заставит его сообщать о своих локальных часах как уровень 10. Это заставит все другие серверы использовать его по сравнению с их локальным уровнем 16 часов.

- Кристофер Карел

Кристофер Карел
источник
добавил результаты в основной пост вопроса.
fwgx
соглашаться с Кристофером. много заблуждений о Strata ntp.org/ntpfaq/NTP-s-algo.htm
dbasnett
3

Может быть, не в тему, локальный сервер Stratum 2 требует подключения к серверу Stratum 1, а в вашей изолированной сети его нет.

Вы можете приобрести дешевый GPS-модуль и Raspberry Pi, одноплатный компьютер с минимальным энергопотреблением и широкими возможностями сопряжения. Подключите свой GPS-модуль к Raspberry Pi и присоедините Pi к своей сети, с соответствующим программным обеспечением, это может быть ваш NTP-сервер Stratum 1, который ваш сервер Stratum 2, или, поскольку у вас есть его в вашей сети каждый компьютер, синхронизировать время.


источник
2

NTPd установит свой собственный слой в соответствии с:

  1. Если смещение локальных часов не было оценено, установите уровень на 16. Этот процесс занимает около 15 минут на обычном сервере, после чего он переходит к следующему шагу.
  2. Подключитесь ко всем настроенным серверам времени, оцените, какие из них являются надежными (и для этого предпочтительнее), установите для локального слоя самый низкий уровень надежного сервера плюс один. Таким образом, если самый низкий найденный надежный сервер равен 1, то локальный будет равен 2.

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

Крис С
источник
1
Может быть так, потому что Moon - это Windows XP Pro x64-машина, использующая стандартную NTP-службу W32Time, которая на самом деле является Simple NTP (SNTP), что RackCard23 не видит его в качестве надлежащего NTP-сервера, поэтому никогда не установит свой слой на что-либо другое чем 16?
fwgx
Я не видел этого до редактирования своего поста. Это довольно вероятно. Есть ли причина не использовать правильный ntp-клиент на вершине вашей иерархии? (Либо на Windows, либо на основе Unix)
Кристофер Карел
2

Кроме того, я приведу некоторый анализ вашего вывода ntpq. Просто чтобы помочь в дальнейшем устранении неполадок для себя и других.

Во-первых, с вашего сервера:

[root@RackCard23]# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.1.3.10       .INIT.          16 u    -   16    0    0.000    0.000   0.000
 10.1.4.255      .BCST.          16 u    -   64    0    0.000    0.000   0.001

В первом столбце указаны два сервера, на которые настроен данный компьютер. Примечательным является отсутствие *или +то, что указывало бы на синхронизированный одноранговый или вторичных кандидатов. Это означает, что ваш сервер не будет использовать записи здесь, но, по крайней мере, проверяет их.

В третьем столбце "st" указан уровень этих серверов. В этом случае это означает, что обе эти машины используют свои локальные часы. (уровень по умолчанию 16) Последние три столбца будут указывать, как далеко находятся эти два часа. Либо в значении «разница секунд в секундах», либо в задержке между двумя компьютерами, к разнице в этой задержке. Здесь более высокие цифры хуже.

Причина таких несинхронизированных записей может зависеть от некоторых факторов: если смещение в часах слишком велико, то ntp даже не будет пытаться, так как это приведет к слишком большому скачку по местному времени. Если джиттер становится плохим, клиент будет десинхронизироваться, пока все не стабилизируется. (Обычно это временно, и все же повторное получение) В качестве альтернативы, как в вашем случае, если настроенные серверы имеют равные или более высокие значения страты, указывая на то, что они менее надежны в качестве источников времени, клиент не будет их использовать.

- Кристофер Карел

Кристофер Карел
источник