108.1 Урок 2
Сертифікат: |
LPIC-1 (102) |
---|---|
Версія: |
5.0 |
Розділ: |
108 Основні системні служби |
Тема: |
108.1 Підтримка системного часу |
Урок: |
2 з 2 |
Вступ
У той час як персональні комп’ютери здатні підтримувати досить точний час самостійно, виробничі обчислювальні та мережеві середовища вимагають дуже точного ведення часу. Найточніший час вимірюється за допомогою еталонних годинників, якими зазвичай є атомні годинники. Сучасний світ розробив систему, у якій усі підключені до Інтернету комп’ютерні системи можна синхронізувати з цими еталонними годинниками за допомогою так званого протоколу мережевого часу (NTP). Комп’ютерна система з NTP зможе синхронізувати свої системні годинники з часом, який надають опорні годинники. Якщо системний час і час, виміряний на цих серверах, відрізняються, комп’ютер поступово прискорює або сповільнює внутрішній системний час, доки системний час не збігається з мережевим.
NTP використовує ієрархічну структуру для поширення часу. Еталонні годинники підключені до серверів на вершині ієрархії. Ці сервери є машинами Stratum 1 і зазвичай до них мамає публічного доступу. Однак машини Stratum 1 доступні для машин Stratum 2, які доступні для машин Stratum 3 і так далі. Сервери Stratum 2 доступні публічно, як і будь-які машини нижчого рівня в ієрархії. Під час налаштування протоколу NTP для великої мережі доцільно мати невелику кількість комп’ютерів, підключених до серверів Stratum 2+, а потім ці машини мають поширювати час через NTP для всіх інших машин. Таким чином можна мінімізувати вимоги до машин Stratum 2.
Є кілька важливих термінів, які виникають під час обговорення NTP. Деякі з цих термінів використовуються в командах, які ми будемо використовувати для відстеження стану NTP на наших машинах:
- Offset
-
Це стосується абсолютної різниці між системним часом і часом NTP. Наприклад, якщо системний годинник показує 12:00:02, а час NTP – 11:59:58, то зміщення між двома годинниками становить чотири секунди.
- Step
-
Якщо часовий зсув між постачальником NTP і споживачем перевищує 128 мс, NTP виконає одну значну зміну системного часу, а не сповільнить або прискорить системний час. Це називається stepping.
- Slew
-
Поворотний час стосується змін системного часу, коли зсув між системним часом і NTP становить менше 128 мс. Якщо це так, то зміни відбуватимуться поступово. Це називається slewing.
- Insane Time
-
Якщо зсув між системним часом і часом NTP перевищує 17 хвилин, тоді системний час вважається insane (божевільним) і демон NTP не вноситиме жодних змін у системний час. Необхідно вжити спеціальних заходів, щоб привести системний час стану в межах 17 хвилин від правильного.
- Drift
-
Дрейф стосується явища, коли два годинники з часом розсинхронізуються. По суті, якщо два годинники спочатку синхронізовані, але потім з часом розсинхронізуються, тоді відбувається дрейф годинника.
- Jitter
-
Джиттер стосується величини дрейфу з часу останнього запиту годинника. Отже, якщо остання синхронізація NTP відбулася 17 хвилин тому, а зміщення між постачальником і споживачем NTP становить 3 мілісекунди, тоді 3 мілісекунди є джиттером.
Тепер ми обговоримо деякі конкретні способи реалізації NTP у Linux.
timedatectl
Якщо ваш дистрибутив Linux використовує timedatectl
, то за умовчанням він реалізує клієнт SNTP, а не повну реалізацію NTP. Це менш складна реалізація мережевого часу, яка означає, що ваш комп’ютер не обслуговуватиме NTP для інших підключених комп’ютерів.
У цьому випадку SNTP не працюватиме, якщо не запущено службу timesyncd
. Як і з усіма службами systemd, ми можемо перевірити, що вони працюють за допомогою:
$ systemctl status systemd-timesyncd ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/systemd-timesyncd.service.d └─disable-with-time-daemon.conf Active: active (running) since Thu 2020-01-09 21:01:50 EST; 2 weeks 1 days ago Docs: man:systemd-timesyncd.service(8) Main PID: 1032 (systemd-timesyn) Status: "Synchronized to time server for the first time 91.189.89.198:123 (ntp.ubuntu.com)." Tasks: 2 (limit: 4915) Memory: 3.0M CGroup: /system.slice/systemd-timesyncd.service └─1032 /lib/systemd/systemd-timesyncd Jan 11 13:06:18 NeoMex systemd-timesyncd[1032]: Synchronized to time server for the first time 91.189.91.157:123 (ntp.ubuntu.com). ...
Статус синхронізації SNTP timedatectl
можна перевірити за допомогою show-timesync
:
$ timedatectl show-timesync --all LinkNTPServers= SystemNTPServers= FallbackNTPServers=ntp.ubuntu.com ServerName=ntp.ubuntu.com ServerAddress=91.189.89.198 RootDistanceMaxUSec=5s PollIntervalMinUSec=32s PollIntervalMaxUSec=34min 8s PollIntervalUSec=34min 8s NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-23, RootDelay=8.270ms, RootDispersion=18.432ms, Reference=91EECB0E, OriginateTimestamp=Sat 2020-01-25 18:35:49 EST, ReceiveTimestamp=Sat 2020-01-25 18:35:49 EST, TransmitTimestamp=Sat 2020-01-25 18:35:49 EST, DestinationTimestamp=Sat 2020-01-25 18:35:49 EST, Ignored=no PacketCount=263, Jitter=2.751ms } Frequency=-211336
Ця конфігурація може бути адекватною для більшості ситуацій, але, як зазначалося раніше, її буде недостатньо, якщо хтось сподівається синхронізувати кілька клієнтів у мережі. У цьому випадку рекомендується встановити повний клієнт NTP.
NTP-демон
Системний час порівнюється з часом мережі на регулярній основі. Щоб це працювало, ми повинні мати демон, що працює у фоновому режимі. Для багатьох систем Linux ім’я цього демона – ntpd
. ntpd
дозволить машині бути не тільки споживачем часу (тобто, здатною синхронізувати свій власний годинник із зовнішнього джерела), але також надавати час іншим машинам.
Припустимо, що наш комп’ютер базується на systemd і використовує systemctl
для керування демонами. Ми встановимо пакет ntp
за допомогою відповідного менеджера пакунків, а потім переконаємося, що наш демон ntpd
працює, перевіривши його статус:
$ systemctl status ntpd ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2019-12-06 03:27:21 EST; 7h ago Process: 856 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 867 (ntpd) CGroup: /system.slice/ntpd.service `-867 /usr/sbin/ntpd -u ntp:ntp -g
У деяких випадках може знадобитися як запустити, так і ввімкнути ntpd
. На більшості машин Linux це досягається за допомогою:
# systemctl enable ntpd && systemctl start ntpd
Запити NTP надходять на TCP-порт 123. Якщо NTP не працює, переконайтеся, що цей порт відкритий і прослуховується.
Конфігурація NTP
NTP може опитувати кілька джерел і вибирати найкращих кандидатів для встановлення системного часу. Якщо з’єднання з мережею втрачено, NTP використовує попередні коригування зі своєї історії, щоб оцінити майбутні коригування.
Залежно від вашого дистрибутива Linux, список мережевих серверів часу буде зберігатися в різних місцях. Припустимо, що на вашій машині встановлено ntp
.
Файл /etc/ntp.conf
містить конфігураційну інформацію про те, як ваша система синхронізується з мережевим часом. Цей файл можна читати та змінювати за допомогою vi
або nano
.
За замовчуванням NTP-сервери, що використовуються, будуть указані в такому розділі:
# Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst
Синтаксис додавання NTP-серверів виглядає так:
server (IP Address) server server.url.localhost
Адреси серверів можуть бути IP-адресами або URL-адресами, якщо DNS правильно налаштовано. У цьому випадку сервер завжди буде запитуватися.
Адміністратор мережі може також розглянути можливість використання (або налаштування) пулу. У цьому випадку ми припускаємо, що є кілька постачальників NTP, які працюють з демонами NTP і мають однаковий час. Коли клієнт запитує пул, постачальник вибирається випадковим чином. Це допомагає розподілити мережеве навантаження між багатьма машинами, щоб жодна машина в пулі не обробляла всі запити NTP.
Зазвичай /etc/ntp.conf
заповнюється пулом серверів під назвою pool.ntp.org
. Так, наприклад, server 0.centos.pool.ntp.org
є пулом NTP за умовчанням, який надається машинам CentOS.
pool.ntp.org
Сервери NTP, які використовуються за замовчуванням, є проектом з відкритим кодом. Більше інформації можна знайти на ntppool.org.
Подумайте, чи підходить пул NTP вам для використання. Якщо бізнес, організація чи людське життя залежать від правильного часу або можуть постраждати від того, що він неправильний, вам не слід “просто видаляти це з Інтернету”. NTP Pool загалом дуже якісний, але це служба, якою керують волонтери у вільний час. Будь ласка, зверніться до своїх постачальників обладнання та сервісів, щоб отримати локальне та надійне обслуговування. Перегляньте також умови обслуговування. Ми рекомендуємо сервери часу від Meinberg, але ви також можете знайти сервери часу від End Run, Spectracom та багатьох інших.
ntpdate
Під час початкового налаштування системний час і NTP можуть бути серйозно десинхронізовані. Якщо зсув між системним і NTP-часом перевищує 17 хвилин, то NTP-демон не вноситиме зміни в системний час. У цьому сценарії буде потрібно ручне втручання.
По-перше, якщо ntpd
працює, необхідно буде зупинити службу. Для цього використовуйте systemctl stop ntpd
.
Далі використовуйте ntpdate pool.ntp.org
, щоб виконати початкову одноразову синхронізацію, де pool.ntp.org
посилається на IP-адресу або URL-адресу NTP-сервера. Може знадобитися кілька синхронізацій.
ntpq
ntpq
— утиліта для моніторингу стану NTP. Після запуску та налаштування демона NTP ntpq
можна використовувати для перевірки його стану:
$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +37.44.185.42 91.189.94.4 3 u 86 128 377 126.509 -20.398 6.838 +ntp2.0x00.lv 193.204.114.233 2 u 82 128 377 143.885 -8.105 8.478 *inspektor-vlan1 121.131.112.137 2 u 17 128 377 112.878 -23.619 7.959 b1-66er.matrix. 18.26.4.105 2 u 484 128 10 34.907 -0.811 16.123
У цьому випадку -p
означає print, і він виведе перелік вузлів. Адреси хостів також можна повернути як IP-адреси за допомогою -n
.
remote
-
Ім’я хоста постачальника NTP.
refid
-
Ідентифікатор постачальника NTP.
st
-
Стратум провайдера.
when
-
Кількість секунд після останнього запиту.
poll
-
Кількість секунд між запитами.
reach
-
Ідентифікатор статусу, щоб вказати, чи було досягнуто сервера. Успішні підключення збільшать це число на 1.
delay
-
Час у мс між запитом і відповіддю сервера.
offset
-
Час у мс між системним часом і часом NTP.
jitter
-
Зсув у мс між системним часом і NTP в останньому запиті.
ntpq
також має інтерактивний режим, до якого можна отримати доступ, коли його запускають без параметрів або аргументів. Параметр ?
поверне список команд, які ntpq
розпізнає.
chrony
chrony
— ще один спосіб реалізації NTP. Він встановлений за замовчуванням у деяких системах Linux, але доступний для завантаження в усіх основних дистрибутивах. chronyd
— це демон chrony, а chronyc
— це інтерфейс командного рядка. Може знадобитися запустити та ввімкнути chronyd
перед взаємодією з chronyc
.
Якщо встановлення chrony має конфігурацію за замовчуванням, тоді використання команди chronyc tracking
надасть інформацію про NTP і системний час:
$ chronyc tracking Reference ID : 3265FB3D (bras-vprn-toroon2638w-lp130-11-50-101-251-61.dsl.) Stratum : 3 Ref time (UTC) : Thu Jan 09 19:18:35 2020 System time : 0.000134029 seconds fast of NTP time Last offset : +0.000166506 seconds RMS offset : 0.000470712 seconds Frequency : 919.818 ppm slow Residual freq : +0.078 ppm Skew : 0.555 ppm Root delay : 0.006151616 seconds Root dispersion : 0.010947504 seconds Update interval : 129.8 seconds Leap status : Normal
Ці вихідні дані містять багато інформації, більше ніж те, що доступно в інших варіантах.
Reference ID
-
Ідентифікатор та ім’я сервера, з яким зараз синхронізовано комп’ютер.
Stratum
-
Кількість переходів до комп’ютера з підключеним еталонним годинником.
Ref time
-
Це час UTC, коли було зроблено останнє вимірювання з еталонного джерела.
System time
-
Затримка системного годинника від синхронізованого сервера.
Last offset
-
Приблизний зсув останнього оновлення годинника.
RMS offset
-
Довгострокове середнє значення зміщення.
Frequency
-
Це частота, з якою системний годинник буде неправильно працювати, якщо chronyd не виправляє його. Він надається в ppm (частки на мільйон).
Residual freq
-
Залишкова частота, що вказує на різницю між вимірюваннями від еталонного джерела та частотою, що використовується в даний момент.
Skew
-
Розрахункова межа похибки частоти.
Root delay
-
Загальний час затримки мережевого шляху до стратума комп’ютера, з яким комп’ютер синхронізується.
Leap status
-
Це статус стрибка, який може мати одне з наступних значень – нормальний, вставити секунду, видалити секунду або не синхронізовано.
Ми також можемо переглянути детальну інформацію про останнє актуальне оновлення NTP:
# chrony ntpdata Remote address : 172.105.97.111 (AC69616F) Remote port : 123 Local address : 192.168.122.81 (C0A87A51) Leap status : Normal Version : 4 Mode : Server Stratum : 2 Poll interval : 6 (64 seconds) Precision : -25 (0.000000030 seconds) Root delay : 0.000381 seconds Root dispersion : 0.000092 seconds Reference ID : 61B7CE58 () Reference time : Mon Jan 13 21:50:03 2020 Offset : +0.000491960 seconds Peer delay : 0.004312567 seconds Peer dispersion : 0.000000068 seconds Response time : 0.000037078 seconds Jitter asymmetry: +0.00 NTP tests : 111 111 1111 Interleaved : No Authenticated : No TX timestamping : Daemon RX timestamping : Kernel Total TX : 15 Total RX : 15 Total valid RX : 15
Нарешті, chronyc sources
поверне інформацію про сервери NTP, які використовуються для синхронізації часу:
$ chronyc sources 210 Number of sources = 0 MS Name/IP address Stratum Poll Reach LastRx Last sample ===============================================================================
На даний момент на цій машині немає налаштованих джерел. Ми можемо додати джерела з pool.ntp.org
, відкривши файл конфігурації chrony. Зазвичай він знаходиться за адресою /etc/chrony.conf
. Коли ми відкриваємо цей файл, ми маємо побачити, що деякі сервери прописані за замовчуванням:
210 Number of sources = 0 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== # Most computers using chrony will send measurement requests to one or # more 'NTP servers'. You will probably find that your Internet Service # Provider or company have one or more NTP servers that you can specify. # Failing that, there are a lot of public NTP servers. There is a list # you can access at http://support.ntp.org/bin/view/Servers/WebHome or # you can use servers from the 3.arch.pool.ntp.org project. ! server 0.arch.pool.ntp.org iburst iburst ! server 1.arch.pool.ntp.org iburst iburst ! server 2.arch.pool.ntp.org iburst iburst ! pool 3.arch.pool.ntp.org iburst
Ці сервери також слугуватимуть синтаксичним посібником під час введення наших власних серверів. Однак у цьому випадку ми просто видалимо !
на початку кожного рядка, таким чином розкоментувавши ці рядки та використавши стандартні сервери з проекту pool.ntp.org
.
Крім того, у цьому файлі ми можемо змінити конфігурацію за замовчуванням щодо skew (зсуву) та дрейфу, а також розташування дрейфового файлу та ключового файлу.
На цій машині нам потрібно зробити велику початкову корекцію годинника. Ми розкоментуємо наступний рядок:
! makestep 1.0 3
Після внесення змін у файл конфігурації перезапустіть службу chronyd
, а потім скористайтеся chronyc makestep
, щоб вручну змінити системний годинник:
# chronyc makestep 200 OK
А потім використовуйте chronyc tracking
, як і раніше, щоб перевірити, чи відбулися зміни.
Вправи до посібника
-
Зазначте відповідний термін для кожного визначення:
Визначення Термін Комп’ютер, який буде ділитися з вами мережевим часом
Відстань від контрольного годинника, у стрибках або кроках
Різниця між системним часом і мережним часом
Різниця між системним часом і мережним часом з часу останнього опитування NTP
Група серверів, які забезпечують мережевий час і розподіляють навантаження між собою
-
Укажіть, яку з команд ви будете використовувати для виведення таких значень:
Value chronyc tracking
timedatectl show-timesync --all
ntpq -pn
chrony ntpdata
chronyc sources
Джиттер
Дрейф
Інтервал пулу
Зсув
Стратум
IP адреса провайдера
Root-затримка
-
Ви налаштовуєте корпоративну мережу, що складається з сервера Linux і кількох робочих станцій Linux. Сервер має статичну IP-адресу 192.168.0.101. Ви вирішуєте, що сервер підключатиметься до
pool.ntp.org
, а потім надаватиме NTP-час робочим станціям. Опишіть конфігурацію сервера та робочих станцій. -
Машина Linux має неправильний час. Опишіть кроки, які ви б зробили для усунення NTP-несправностей.
Дослідницькі вправи
-
Дослідіть відмінності між SNTP і NTP.
SNTP NTP -
Чому системний адміністратор може не використовувати
pool.ntp.org
? -
Як системний адміністратор може приєднатися до проекту
pool.ntp.org
або зробити інший внесок у нього?
Підсумки
На цьому уроці ви вивчили:
-
Що таке NTP і чому це важливо.
-
Налаштування демона NTP із проекту
pool.ntp.org
. -
Використання
ntpq
для перевірки конфігурації NTP. -
Використання
chrony
як альтернативної служби NTP.
Команди, які використовуються в цьому уроці:
timedatectl show-timesync --all
-
Відображає інформацію SNTP, якщо використовується
timedatectl
. ntpdate <address>
-
Виконайте одноразове оновлення кроку NTP вручну.
ntpq -p
-
Роздрукуйте історію останніх опитувань NTP.
-n
замінить URL-адреси IP-адресами. chronyc tracking
-
Відображає стан NTP, якщо використовується Chrony.
chronyc ntpdata
-
Відображає інформацію NTP про останнє опитування.
chronyc sources
-
Відображає інформацію про постачальників NTP.
chronyc makestep
-
Виконайте ручне одноразове оновлення кроку NTP, якщо використовується chrony.
Відповіді до вправ посібника
-
Введіть відповідний термін для кожного визначення:
Визначення Термін Комп’ютер, який буде ділитися з вами мережевим часом
Провайдер
Відстань від контрольного годинника, у стрибках або кроках
Стратум
Різниця між системним часом і мережевим часом
Зсув
Різниця між системним часом і часом мережі з часу останнього опитування NTP
Джиттер
Група серверів, які забезпечують мережевий час і розподіляють навантаження між собою
Пул
-
Укажіть, яку з команд ви будете використовувати для виведення таких значень:
Value chronyc tracking
timedatectl show-timesync --all
ntpq -pn
chrony ntpdata
chronyc sources
Джиттер
X
X
Дрейф
Інтервал пулу l
X
X
X (колонка
when
)X
X
Зсув
X
X
X
Стратум
X
X
X
X
X
IP-адреса провайдера
X
X
X
X
Root-затримка
X
X
-
Ви налаштовуєте корпоративну мережу, що складається з сервера Linux і кількох робочих станцій Linux. Сервер має статичну IP-адресу 192.168.0.101. Ви вирішуєте, що сервер підключатиметься до
pool.ntp.org
, а потім надаватиме NTP-час робочим станціям. Опишіть конфігурацію сервера та робочих станцій.Переконайтеся, що на сервері працює служба ntpd, а не SNTP. Використовуйте пули
pool.ntp.org
у файлі/etc/ntp.conf
або/etc/chrony.conf
. Для кожного клієнта вкажіть192.168.0.101
у кожному файлі/etc/ntp.conf
або/etc/chrony.conf
. -
Машина Linux має неправильний час. Опишіть кроки, які ви б зробили для усунення несправностей NTP.
Спочатку переконайтеся, що комп’ютер підключено до Інтернету. Для цього використовуйте
ping
. Перевірте, чи працює служба ntpd або SNTP за допомогоюsystemctl status ntpd
абоsystemctl status systemd-timesyncd
. Ви можете бачити повідомлення про помилки, які містять корисну інформацію. Нарешті, скористайтеся такою командою, якntpq -p
абоchrony tracking
, щоб перевірити, чи були зроблені будь-які запити. Якщо системний час суттєво відрізняється від мережевого, можливо, системний час вважається “божевільним” і не буде змінено без ручного втручання. У цьому випадку скористайтеся командою з попереднього уроку або такою командою, якntpdate pool.ntp.org
, щоб виконати одноразову синхронізацію ntp.
Відповіді до дослідницьких вправ
-
Дослідіть відмінності між SNTP і NTP.
SNTP NTP менш точні
більш точні
вимагає менше ресурсів
вимагає більше ресурсів
не може діяти як постачальник часу
може діяти як постачальник часу
лише час кроків
кроки або скорочення часу
запитує час з одного джерела
може контролювати кілька серверів NTP і використовувати оптимального провайдера
-
Чому системний адміністратор може не використовувати
pool.ntp.org
?Від ntppool.org: якщо абсолютно важливо мати правильний час, вам слід розглянути альтернативу. Подібним чином, якщо ваш Інтернет-провайдер має сервер часу, рекомендується використовувати його.
-
Як системний адміністратор може приєднатися до проекту
pool.ntp.org
або зробити інший внесок у нього?Від www.ntppool.org: Ваш сервер повинен мати статичну IP-адресу та постійне підключення до Інтернету. Статична IP-адреса не повинна змінюватися взагалі або принаймні рідше одного разу на рік. Окрім цього, вимоги до пропускної здатності є скромними: 384–512 Кбіт. Запрошуємо приєднатися до серверів Stratum 3 або 4.