Чому NTP синхронізується з LOCAL, а не з віддаленим сервером?


11

Отже, я намагаюся налагодити мою поточну настройку NTP і виявив, що він зміщений з мого єдиного налаштованого сервера більше 3 секунд, а не коригує. Зірочка на LOCAL (0) на виході ntpq, схоже, вказує на те, що система щасливо синхронізується із собою, а не з сервером 10.130.33.201 (що є ще одним вікном linux у нашій системі, до якого ми хочемо, щоб усе синхронізувалося).

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.130.33.201   LOCAL(0)         9 u   49   64  377    0.242  -3742.2   1.049
*LOCAL(0)        .LOCL.          10 l    2   64  377    0.000    0.000   0.001

І це мій файл ntp.conf. Написав хтось інший, тому я не на 100% впевнений, що все правильно.

server 10.130.33.201 burst iburst minpoll 4 maxpoll 11
driftfile /mnt/active/etc/ntp.drift

restrict -4 default  nomodify nopeer notrap
restrict -6 default  ignore

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

Я читав про вибух і iburst та minpoll / maxpoll, тому розумію, що вони можуть не знадобитися, але я не думаю, що це має нічого спільного з моїм поточним випуском.

Крім того, через те, як він розгорнуто, цей конфігураційний файл потребує великої роботи, щоб змінити, тому я сподіваюся, що нічого, що насправді не потрібно змінити. Я сподіваюся, що це випадок, коли я не розумію, як працює NTP.


EDIT -

Отже, схоже, що це дублікат цього запитання , але я не вважаю, що афіша отримала достатньої відповіді, тому я все одно хотів би знати, чому місцевий час надається перевазі серверу. Також, відповідно до однієї з відповідей нижче, я намагався використовувати preferключове слово в серверній лінії конфігурації та перезапустити, але це, схоже, не мало ефекту.

Якщо я скасую всі "локальні" рядки з конфігурації, коли відповідь на інше питання підказує, що буде, якщо сервер недоступний? Чи вмирає НТП чи просто продовжує намагатися?


ВАЖЛИВО ЗМІСТ -

Гаразд, зазвичай 10.130.33.201 ("Сервер") не має доступу до Інтернету та не має джерела часу для використання GPS. Важлива частина полягає в тому, що всі пристрої в системі мають той же час, що і сервер, незалежно від того, наскільки правильним є цей час.

Отже, щоб побачити, що буде, я додав один із серверів пулу NTP до конфігураційного файлу сервера, щоб він звідти отримував час, а не отримував час з локального. Тепер він правильно отримує час від сервера часу NTP.

Після цього я зараз клієнти синхронізувались із сервером, а не віддавали перевагу LOCAL (0)

 ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.130.33.201   38.229.71.1      3 u   58   64  377    0.216  715621.   1.001
 LOCAL(0)        .LOCL.          10 l   18   64  377    0.000    0.000   0.001

НОВЕ ЗАПИТАННЯ - Коли мій сервер використовує локальний (наведений оригінальний приклад), схоже, що клієнти кажуть: "О, 10.130.33.201 р. Використовується LOCAL (0). Хм, у мене також є сервер LOCAL (0) - - Я просто використовуватиму це безпосередньо, а не отримувати ту саму інформацію через 10.130.33.201 ".

Це так? Вони намагаються перейти "безпосередньо до джерела", що неправильно LOCAL (0)? Мені потрібен мій сервер, щоб отримати час від LOCAL (0), і мені потрібні клієнти, щоб отримати час від сервера. Зараз видалення "локального" сервера з файлів конфігурації клієнта - єдиний варіант, але я хотів би зрозуміти, чому це відбувається, і якщо це взагалі можливо, уникайте зміни їх конфігурацій (зміна конфігурації буде багато роботи через наше середовище ...).

Також це виглядає як ще один дублікат без гарної відповіді.


Крім того, якщо у вас постійно доступ до мережі до 1030.33.2018, подумайте про видалення локального джерела годинника.
Аарон Коплі

Відповіді:


9

Якщо налаштований лише один сервер NTP, алгоритм не зовсім впевнений, кому довіряти. Навіть незважаючи на те, що страта нижче у віддаленого хоста, я думаю, що алгоритм вважає, що місцевий час є більш надійним.

Спробуйте скористатися preferключовим словом у своїй serverзаяві, щоб встановити це як переважне джерело часу.


EDIT -

Отже, схоже, що це дублікат цього запитання, але я не вважаю, що афіша отримала достатньої відповіді, тому я все одно хотів би знати, чому місцевий час надається перевазі серверу.

Для справді достатньої відповіді ви збираєтесь копатися в надрах дуже складного алгоритму. Документація навіть не надто конкретна, але я впевнений, що там є білий документ або специфікація.

Якщо я скасую всі "локальні" рядки з конфігурації, коли відповідь на інше питання підказує, що буде, якщо сервер недоступний? Чи вмирає НТП чи просто продовжує намагатися?

Демон NTP не вмирає і не зупиняється, але він покидає час синхронізації після того, як не зможе дістатися до віддаленого сервера. Ось чому найкращі практики пропонують мінімум три віддалені сервери та не використовувати LCL, якщо ви не відключені від мережі. Запропоновано три сервери, бо коли їх лише два, і вони не згодні, що він обере? Третій сервер повинен допомогти алгоритму усунути помилковий сервер.

Нарешті, я щойно помітив, що ви не визначаєте a driftfile. Це може допомогти?


Чи впливає на це різниця між двома верствами (ум?)? Чи допоможе сервер нижче 9?
JPhi1618

Це могло б. Правда, я не знаю багато про внутрішні характеристики самого алгоритму. Однак єдиний випадок, коли вам слід роздути прошарок, - це місцевий годинник. Я не можу рекомендувати вам виправляти віддалений сервер як виправлення. NTP слід довіряти, щоб визначити найкраще джерело з мінімальними перешкодами. У вас просто трапляється випадок, коли вам потрібно трохи підштовхнути.
Аарон Коплі

Дякуємо за пропозиції. Був driftfile, але він не створювався, тому я видалив, щоб побачити, що буде. Якщо видалити локальну лінію, вона синхронізується з сервером, тож це щось. Ви кажете, що ntpd "припинить синхронізацію після того, як не зможе дістатися до віддаленого сервера", але чи запуститься він знову після того, як сервер буде досягнутий? Я просто хочу бути в безпеці у випадку тимчасового переривання мережі.
JPhi1618

Ні, він не почнеться знову. Це просто здається. Це дратує, і для мене теж привід-22. Зараз ми знаємо, щоб перезапустити NTP, якщо втрачено підключення до мережі. Ваш дрейф-файл, ймовірно, не буде створений, оскільки ntp не має дозволів на шлях. Двічі перевірте це.
Аарон Коплі

7

Мені здається, що інтервал зміщення (різниця між вашим системним часом та часом хостів NTP) занадто сильно відрізняється, щоб NTP правильно його встановив.

Моя пропозиція,

 1. Stop the NTP service
 2. As root ntpdate -bs 10.130.33.201 to reset your time to something close
 3. Start the NTP service

У вас не повинно виникнути проблем після цього.


2
Якщо на машині трапляється VM або є якась інша умова, яка спричиняє серйозну порушеність часу, ви можете встановити tinker panic 0опцію ntp, щоб змусити NTP приймати будь-які компенсації. Але використовуйте це лише з серверами NTP, для яких ви впевнені, що ніколи не повернете поганий час.
Зоредаче

Гаразд, я подумав, що перед тим, як проблема, повинно бути більше 1000-ти, і тоді я подумав, що сервер буде вказаний зі знаком #? Хіба це не так? Чи "зсув" за секунди чи мілісекунди?
JPhi1618

Він не синхронізується зараз до 1030.33.2018, оскільки компенсація занадто велика, але це не виправить той факт, що він досить дрейфує, в першу чергу, що LCL стає все більш бажаним. Я думаю, що це, робочий driftfile, і preferзробив би трюк.
Аарон Коплі

Чи можете ви пояснити, чому компенсація занадто велика? Це менше 1000 (набагато менше), і немає знака #. Крім того, я перевірив фактичний час в обох системах, і вони відстають приблизно 4 секунди.
JPhi1618

+/- 1000 мс ... не +/- 1000 с . Це в -3742 мс .
Аарон Коплі

2

Страта 10.130.33.201 як LOCAL-сервер дорівнює 9, що змушує локальну прошарку, обчислену з цього (9 + 1 = 10), конкурувати з локальним LOCAL-сервером у прошарку 10. Оскільки локальний LOCAL-шар не має мережевих затримок або тремтіння, він може виглядати трохи краще ntpd, ніж віддалений.

Якщо ви хочете, щоб ця конфігурація працювала, встановіть «головний» сервер LOCAL на прошарок нижче 9. Не занадто низький, якщо ви хочете, щоб час, відстежуваний на сервері stratum 1, був бажаним.


Спасибі. Я перевірю це, як тільки зможу. Виглядає перспективно.
JPhi1618

Що ж, схоже, я раніше намагався знизити прошарок сервера LOCAL 10.130.33.201. Наразі він встановлений у 5, клієнт бачить це як 6, але все ж вважає за краще власний LOCAL, який має прошарок 10. Ця конфігурація існує цілими днями.
JPhi1618

2

Я знаю, що це по-старому, але я думаю, ти маєш рацію. Ніхто не показує жодного способу налагодження проблем ntpd. Виявляється, це можливо.

Я думаю, що ви були на правильному шляху, коли підозрювали, що використання LOCAL (0) локально та на верхньому сервері може бути проблемою.

Це, безумовно, було на острові часу з 4 серверів, з яким я мав подібну проблему. Всі вони були налаштовані однолітками, тому, можливо, інше питання для вашого.

По-перше, існує кращий спосіб поводження з островами часу, який називається осиротілим режимом, який підтримується версіями ntpd за останні кілька років:

Режим сиріт на doc.ntp.org

Спочатку всі 4 сервери мали однаковий прошарок 10 і вважали за краще свій локальний годинник. Я це зафіксував, і все-таки вони віддавали перевагу місцевим годинникам (проте, здається, прошарок важливий).

Я використовував команду ntpq pe (peer), як, rv, щоб отримати обробку того, що відбувається. Вам потрібно використовувати rv (readvar) на номер асоціації для сервера, щоб скинути інформацію. pe, і, як здається, відсортовані за одним і тим же індексом, щоб ви могли отримати як число таким чином. як є поле, яке називається умовою, яке може показувати відхилення значення, якщо воно не подобається серверу.

У виході rv - поле, яке називається спалахом. Якщо все добре, це буде нуль. Якщо ні, то це бітова маска (відображається у шістнадцятковій версії) питань. Їх можна подивитися тут:

внутрішні декоди ntpd

Проблема у мене була 0800 peer_loop. Виявилося, що відмінка годинника важлива. Побачивши LOCAL (0) як на локальному годиннику, так і на віддаленому сервері, ntpd думав, що існує цикл. Девід Міллс підтверджує, що у публікаціях на comp.protocols.time "Як уникнути циклу в NTP" (я досяг свого ліміту в 2 посиланнях, вибачте!)

Використання аргументу refid для встановлення унікального відміни не вийшло - він все ще відображається як LOCAL (0) у одержувача.

Що, здавалося, працювало, використовуючи унікальні номери екземплярів для місцевого драйвера. 127.127.1. [0-3]. Використовуйте однаковий ідентифікатор як на сервері, так і на лінії фіджі. Коли я це зробив, сервери, як правило, синхронізувались із найнижчим сервером пластів, який зазвичай використовував свій локальний годинник. Однак він час від часу намагався використовувати один з інших серверів, які використовували його як джерело. Однак часи синхронізувалися і, здається, залишаються таким.

Напевно, занадто пізно, щоб допомогти, але я пропоную це показати, що NTP піддається логіці та усуненню несправностей. Я займав години, щоб дістати відповідь методом проб і помилок, а потім знайшов документи.


-1

Використовуйте iburst, щоб змусити сервер надсилати запит NTP до потрібної NTS, навіть якщо один запит не вдається


Це потребує кращого пояснення.
Свен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.