NTP - Настройка времени на Linux сервере CentOS

Какие часы бывают в Linux

Thank you for reading this post, don't forget to subscribe!

Немно­го тео­рии. В любом ком­пью­те­ре есть два вида часов. Одни аппа­рат­ные (ЧРВ — часы реаль­но­го вре­ме­ни или RTC — real time clock), кото­рые рабо­та­ют даже при выклю­чен­ном бло­ке пита­ния, на это у них есть бата­рей­ка на мате­рин­ской пла­те. Дру­гие про­грамм­ные, то есть часы опе­ра­ци­он­ной систе­мы. Пока­за­ния этих часов могут раз­ли­чать­ся. При этом про­грамм­ные часы опи­ра­ют­ся на пока­за­ния аппа­рат­ных при стар­те опе­ра­ци­он­ной систе­мы. А в даль­ней­шем могут син­хро­ни­зи­ро­вать­ся через интер­нет с эта­лон­ны­ми и кор­рек­ти­ро­вать ход аппаратных.
В боль­шин­стве слу­ча­ев если ком­пью­тер рабо­та­ет под управ­ле­ни­ем опе­ра­ци­он­ной систе­мой Windows пока­за­ния аппа­рат­ных и про­грамм­ных часов сов­па­да­ют. В linux же чаще все­го аппа­рат­ные часы настра­и­ва­ют по грин­ви­чу (вре­ме­ни нуле­во­го мери­ди­а­на), а про­грамм­ные по необ­хо­ди­мо­му сме­ще­нию для часо­во­го поя­са где рас­по­ло­жен сервер.
Абсо­лют­ное боль­шин­ство про­грамм (при­ло­же­ний и сер­ви­сов) в сво­ей рабо­те опи­ра­ют­ся на пока­за­ния систем­ных (про­грамм­ных) часов.

Для чего нужно корректировать часы

  • Что­бы избе­жать вче­раш­них ново­стей и пуб­ли­ка­ций зав­траш­не­го дня. К при­ме­ру часы ваше­го сер­ве­ра идут по вре­ме­ни Хаба­ров­ска, а основ­ные посе­ти­те­ли из Евро­пы (раз­ни­ца UTC+11). В такой ситу­а­ции вечер­ний посе­ти­тель уви­дит «зав­траш­ние» даты на сай­те. Так как когда в Евро­пе вечер, то в Хаба­ров­ске утро сле­ду­ю­ще­го дня.
  • Что­бы было удоб­но настра­и­вать зада­ния Cron.
  • Что­бы вре­мя созда­ния фай­лов сов­па­да­ло с фак­ти­че­ским и не вво­ди­ло Вас в заблуждение.

Как настроить время вашего сервера

Про­ве­рим, что пока­зы­ва­ют аппа­рат­ные часы, для чего будем исполь­зо­вать три вари­ан­та коман­ды hwclock:

При­ве­ден­ный при­мер для слу­чая когда аппа­рат­ные часы идут по UTC, а сер­вер настро­ен на Мос­ков­ский часо­вой пояс. Осо­бых пояс­не­ний тре­бу­ет опция —utc вывод вре­ме­ни про­из­во­дит­ся (фор­ми­ру­ет­ся) с усло­ви­ем, что аппа­рат­ные часы идут по вре­ме­ни UTC. То есть пока­за­ния долж­ны сов­па­дать с жела­е­мым вре­ме­нем на сер­ве­ре. Опция же —localtime наобо­рот пока­зы­ва­ет вре­мя аппа­рат­ных часов без вся­ких поправок.

Несколько полезных команд установки времени аппаратных часов

Уста­нав­ли­ва­ем вре­мя аппа­рат­ных часов рав­ное системному:

Уста­нав­ли­ва­ем вре­мя систем­ных часов на осно­ва­нии ЧРВ:

Уста­нав­ли­ва­ем вре­мя рав­ное указанному:

Значение временной зоны

Дан­ные вре­мен­ной зоны для аппа­рат­ных часов в Centos хра­нят­ся в фай­ле /etc/sysconfig/clock.
Для мос­ков­ской вре­мен­ной зоны в слу­чае когда аппа­рат­ные часы идут по UTC он име­ет сле­ду­ю­щее содержимое:

Где ZONE — это наш часо­вой пояс, UTC гово­рит о том, что аппа­рат­ные часы сер­ве­ра идут по уни­вер­саль­но­му вре­ме­ни UTC, ARC в зна­че­нии false — зна­чит исполь­зу­ет­ся нор­маль­ное зна­че­ние века (эпо­хи) UNIX.
Подроб­нее по кон­фи­гу­ра­ции фай­ла /etc/sysconfig/clock в CentOS мож­но почи­тать в офи­ци­аль­ной документации.

Системные часы операционной системы CentOS

Для систем­ных (про­грамм­ных) часов CentOS исполь­зу­ет­ся коман­да date.

При­ве­ден­ный при­мер для слу­чая когда опе­ра­ци­он­ная систе­ма исполь­зу­ет Мос­ков­ский часо­вой пояс. Здесь опция —utc гово­рит, что необ­хо­ди­мо пока­зать вре­мя нуле­во­го мери­ди­а­на, то есть без попра­вок на часо­вой пояс.

 

 

Изменение временной зоны (часового пояса) в CentOS

Для изме­не­ния вре­ме­ни систем­ных часов, если их пока­за­ния не соот­вет­ству­ют необ­хо­ди­мо­му реги­о­ну, необ­хо­ди­мо про­де­лать сле­ду­ю­щие нехит­рые операции.
В нача­ле, сде­ла­ем резерв­ную копию суще­ству­ю­ще­го фай­ла вре­мен­ной зоны (часо­во­го пояса).

Это хоро­шая прак­ти­ка, когда вы дела­е­те резерв­ные копии ори­ги­наль­ных фай­лов конфигурации ?

Затем, созда­ем ссыл­ку на необ­хо­ди­мую вре­мен­ную зону.

(в нашем слу­чае /usr/share/zoneinfo/Asia/Bishkek)

где Europe/Moscow необ­хо­ди­мая вре­мен­ная зона. Пол­ный спи­сок доступ­ных часо­вых поя­сов смот­рим в ката­ло­ге /usr/share/zoneinfo/.
При необ­хо­ди­мо­сти мож­но уста­но­вить зна­че­ние вре­ме­ни вручную:

где MM – месяц, DD – день, hh – час, mm – минуты.
То есть что­бы задать, к при­ме­ру, 18 мар­та 20 часов 15 минут, нуж­но вве­сти следующее:

Более подроб­но о коман­де date, мож­но почи­тать в мануа­ле, выпол­нив команду:

Настройка сервера времени ntp

Со вре­ме­нем часы могут убе­гать или отста­вать, поэто­му вре­мя от вре­ме­ни их нуж­но син­хро­ни­зи­ро­вать с эта­лон­ны­ми. Для это­го в CentOS исполь­зу­ет­ся демон ntpd.
Уста­но­вим демон ntpd если его нет в системе:

Одно­крат­но син­хро­ни­зи­ру­ем время:

Если полу­чи­ли что-то вро­де the NTP socket is in use, exiting — зна­чит ntpd демон уже запу­щен. В этом слу­чае оста­но­вим его:

Настра­и­ва­ем рабо­ту ЧРВ в BIOS на вре­мя по UTC:

Этой коман­дой мы при­сво­и­ли зна­че­ние вре­ме­ни аппа­рат­ных часов рав­ным систем­но­му вре­ме­ни. Как вы помни­те, систем­ные часы мы син­хро­ни­зи­ро­ва­ли коман­да­ми выше.
Про­ве­рим содер­жи­мое фай­ла /etc/sysconfig/clock что­бы систе­ма после загруз­ки пра­виль­но выстав­ля­ла мест­ное вре­мя. Для Моск­вы он дол­жен содер­жать следующее:

Настра­и­ва­ем демон ntpd на авто­за­груз­ку при стар­те опе­ра­ци­он­ной системы:

Запус­ка­ем демон син­хро­ни­за­ции времени:

Про­ве­ря­ем систем­ное вре­мя командой:

Оно долж­но сов­па­дать с реальным.
Про­ве­рим, син­хро­ни­зи­ру­ет­ся ли систем­ное вре­мя с сер­ве­ра­ми эта­лон­но­го вре­ме­ни (ntp server) и все ли там в поряд­ке коман­дой ntpq -p:

Демон ntpd вклю­ча­ет в ядре Linux режим «11 minute mode». В этом режи­ме каж­дые 11 минут син­хро­ни­зи­ру­ют­ся систем­ные и аппа­рат­ные часы. По-умол­ча­нию он (режим «11 minute mode») выклю­чен и вклю­ча­ет­ся толь­ко когда какой-то сер­вис попро­сит вклю­чить этот режим. Демон ntpd как раз его и (режим «11 minute mode») вклю­ча­ет. Так что допол­ни­тель­но син­хро­ни­зи­ро­вать аппа­рат­ные часы по зна­че­нию систем­ных нет необходимости.
P.S. Теперь систем­ные и аппа­рат­ные часы ваше­го сер­ве­ра будут авто­ма­ти­че­ски син­хро­ни­зи­ро­вать­ся с эта­лон­ны­ми сер­ве­ра­ми и все­гда пока­зы­вать точ­ное время.

 

В появив­шей­ся таб­ли­це мы видим сер­ве­ра с кото­ры­ми син­хро­ни­зи­ро­ван наш ntpd.

remote

Имя уда­лен­но­го NTP-сервера.
refid
Ука­зы­ва­ет, отку­да каж­дый сер­вер полу­ча­ет вре­мя в дан­ный момент.
 st
Stratum  это чис­ло от 1 до 16, ука­зы­ва­ю­щее на точность
сер­ве­ра. Еди­ни­ца озна­ча­ет мак­си­маль­ную точ­ность, 16 -- сервер
недо­сту­пен. Уро­вень ваше­го сер­ве­ра будет равен уров­ню наи­ме­нее точного
уда­лен­но­го сер­ве­ра плюс 1.
poll
Интер­вал меж­ду опро­са­ми (в секун­дах). Зна­че­ние будет изменяться
меж­ду мини­маль­ной и мак­си­маль­ной часто­той опро­сов. В начале
интер­вал будет неболь­шим, что­бы син­хро­ни­за­ция происходила
быст­ро. После того как часы син­хро­ни­зи­ру­ют­ся, интер­вал начинает
уве­ли­чи­вать­ся, что­бы умень­шить тра­фик и нагруз­ку на популярные
сер­ве­ра времени.

reach
Вось­ме­рич­ное пред­став­ле­ние мас­си­ва из 8 бит, отражающего
резуль­та­ты послед­них вось­ми попы­ток соеди­не­ния с сер­ве­ром. Бит
выстав­лен, если уда­лен­ный сер­вер ответил.

 delay
Коли­че­ство вре­ме­ни (в секун­дах) необ­хо­ди­мо­го для получения
отве­та на запрос "кото­рый час? ".

 offset
Наи­бо­лее важ­ное поле. Раз­ни­ца меж­ду вре­ме­нем локаль­но­го и
уда­лен­но­го сер­ве­ров. В ходе син­хро­ни­за­ции это зна­че­ние должно
пони­жать­ся, ука­зы­вая на то, что часы локаль­ной маши­ны идут все
точнее.

jitter
Дис­пер­сия (Jitter) -- это мера ста­ти­сти­че­ских откло­не­ний от
зна­че­ния сме­ще­ния (поле offset) по несколь­ким успеш­ным парам
запрос-ответ. Мень­шее зна­че­ние дис­пер­сии предпочтительнее,
посколь­ку поз­во­ля­ет точ­нее син­хро­ни­зи­ро­вать время.

 Зна­че­ние зна­ков перед име­на­ми серверов

-   Озна­ча­ет, что локаль­ный сер­вис NTP не пред­по­чи­та­ет этот сервер
+   Озна­ча­ет, что локаль­ный сер­вис NTP пред­по­чи­та­ет этот сервер
x   Отме­ча­ет пло­хой хост
*   Ука­зы­ва­ет на теку­щий наи­бо­лее пред­по­чти­тель­ный сервер

 

=======================================

Что такое NTP-сервер?

NTP озна­ча­ет сете­вой про­то­кол времени.

Это сете­вой про­то­кол, кото­рый син­хро­ни­зи­ру­ет часы меж­ду ком­пью­тер­ны­ми систе­ма­ми по сети.

Он будет сохра­нять оди­на­ко­вое вре­мя (точ­ное вре­мя) для всех систем, кото­рые под­клю­че­ны к NTP-сер­ве­ру через NTP или кли­ент Chrony.

NTP обыч­но может под­дер­жи­вать вре­мя с точ­но­стью до десят­ков мил­ли­се­кунд по обще­до­ступ­но­му Интер­не­ту и может дости­гать точ­но­сти, пре­вы­ша­ю­щей одну мил­ли­се­кун­ду, в локаль­ных сетях при иде­аль­ных условиях.

Он исполь­зу­ет про­то­кол поль­зо­ва­тель­ских дей­та­грамм (UDP) на пор­ту номер 123 для отме­ток вре­ме­ни отправ­ки и получения.

Это кли­ент / сер­вер­ное приложение.

Он отправ­ля­ет и полу­ча­ет вре­мен­ные мет­ки с исполь­зо­ва­ни­ем про­то­ко­ла поль­зо­ва­тель­ских дей­та­грамм (UDP) на пор­ту 123.

Что такое NTP-клиент?

NTP-кли­ент син­хро­ни­зи­ру­ет свои часы с сете­вым сер­ве­ром времени.

Что такое Chrony ?

Chrony  — это заме­на NTP-клиента.

Он может син­хро­ни­зи­ро­вать систем­ные часы с боль­шей точ­но­стью и может быть осо­бен­но поле­зен для систем, кото­рые не под­клю­че­ны к сети все время.

Зачем нам нужен NTP сервер?

Что­бы все сер­ве­ры в вашей орга­ни­за­ции были син­хро­ни­зи­ро­ва­ны с точ­ным вре­ме­нем выпол­не­ния зада­ний, осно­ван­ных на времени.

Что­бы про­яс­нить это, я рас­ска­жу вам сценарий.

Ска­жем, напри­мер, у нас есть два сер­ве­ра (Server1 и Server2).

Server1 обыч­но выпол­ня­ет пакет­ные зада­ния в 10:55, а затем Server2 необ­хо­ди­мо выпол­нить дру­гое зада­ние в 11:00 на осно­ва­нии отче­та о завер­ше­нии зада­ния Server1.

Если обе систе­мы исполь­зу­ют в раз­ное вре­мя (если одна систе­ма опе­ре­жа­ет дру­гие, дру­гие отста­ют от этой кон­крет­ной), мы не смо­жем это сделать.

Для это­го нам нуж­но настро­ить NTP.

Наде­юсь, это убра­ло ваши сомне­ния по пово­ду необ­хо­ди­мо­сти NTP.

В этой ста­тье мы будем исполь­зо­вать сле­ду­ю­щую настрой­ку, что­бы про­ве­рить рабо­ту NTP

  • NTP-сер­вер: HostName: CentOS7.itisgood.ru, IP: 192.168.1.8, ОС: CentOS 7
  • NTP-кли­ент: HostName: Ubuntu18.itisgood.ru, IP: 192.168.1.5, ОС: Ubuntu 18.04

СТОРОНА NTP-СЕРВЕРА: Как установить NTP-сервер на Linux?

Не суще­ству­ет раз­ных паке­тов для NTP-сер­ве­ра и NTP-кли­ен­та, так как это модель кли­ент / сервер.

Пакет NTP досту­пен в офи­ци­аль­ном репо­зи­то­рии дис­три­бу­ти­ва, поэто­му исполь­зуй­те его для установки.

Для систе­мы Fedora исполь­зуй­те DNF для уста­нов­ки ntp.

Для систем Debian / Ubuntu исполь­зуй­те коман­ду APT-GET или APT для уста­нов­ки ntp.

Для систем на осно­ве Arch Linux исполь­зуй­те Pacman для уста­нов­ки ntp.

Для систем RHEL / CentOS исполь­зуй­те коман­ду YUM для уста­нов­ки ntp.

Для систе­мы openSUSE Leap исполь­зуй­те Zypper для уста­нов­ки ntp.

Как настроить NTP-сервер на Linux?

После уста­нов­ки паке­та NTP убе­ди­тесь, что вы рас­ком­мен­ти­ро­ва­ли сле­ду­ю­щую кон­фи­гу­ра­цию в фай­ле /etc/ntp.conf на сто­роне сервера.

По умол­ча­нию кон­фи­гу­ра­ция NTP-сер­ве­ра осно­ва­на на X.distribution_name.pool.ntp.org.

Если вы хоти­те, вы може­те исполь­зо­вать кон­фи­гу­ра­цию по умол­ча­нию или изме­нить ее в соот­вет­ствии с вашим место­по­ло­же­ни­ем (в зави­си­мо­сти от стра­ны), посе­тив https://www.ntppool.org/zone/@

Ска­жем например.

Если вы нахо­ди­тесь в Индии, то ваш NTP-сер­вер будет 0.in.pool.ntp.org, и он будет рабо­тать для боль­шин­ства стран.

Мы раз­ре­ши­ли толь­ко кли­ен­там под­се­ти 192.168.1.0/24  полу­чать доступ к NTP-серверу.

Посколь­ку бранд­мау­эр по умол­ча­нию вклю­чен в дис­три­бу­ти­вах на осно­ве RHEL 7, раз­ре­ши­те исполь­зо­ва­ние сер­ве­ра / служ­бы ntp.

Для систе­мы на осно­ве Debian нам нуж­но запу­стить ntp вме­сто ntpd.

Для systemctl систем

СТОРОНА КЛИЕНТА NTP: Как уста­но­вить кли­ент NTP в Linux?

Как я уже упо­ми­нал ранее в этой статье.

Не суще­ству­ет спе­ци­аль­но­го паке­та для NTP-сер­ве­ра и кли­ен­та. Итак, уста­но­ви­те этот же пакет на клиенте.

Для систе­мы Fedora исполь­зуй­те DNF для уста­нов­ки ntp.

Для систем Debian / Ubuntu исполь­зуй­те коман­ду APT-GET или APT для уста­нов­ки ntp.

Для систем на осно­ве Arch Linux исполь­зуй­те Pacman для уста­нов­ки ntp.

Для систем RHEL / CentOS исполь­зуй­те коман­ду YUM для уста­нов­ки ntp.

Для систе­мы openSUSE Leap исполь­зуй­те Zypper для уста­нов­ки ntp.

Я уста­но­вил и настро­ил NTP-сер­вер на CentOS7.itisgood.ru, доба­вив те же самые настрой­ки на все кли­ент­ские машины.

Для систе­мы на осно­ве Debian нам нуж­но запу­стить ntp вме­сто ntpd.

Для systemctl систем.

Для систе­мы на осно­ве Debian нам нуж­но запу­стить ntp вме­сто ntpd.

Подо­жди­те несколь­ко минут после пере­за­пус­ка служ­бы NTP, что­бы полу­чить вре­мя син­хро­ни­за­ции с NTP-сервером.

Выпол­ни­те сле­ду­ю­щие коман­ды, что­бы про­ве­рить состо­я­ние син­хро­ни­за­ции сер­ве­ра NTP в Linux.

Выпол­ни­те сле­ду­ю­щую коман­ду, что­бы полу­чить теку­щий ста­тус ntpd.

Нако­нец, запу­сти­те коман­ду date

Если вы наблю­да­е­те зна­чи­тель­ное сме­ще­ние по вре­ме­ни на выво­де NTP,  выпол­ни­те сле­ду­ю­щую коман­ду, что­бы син­хро­ни­зи­ро­вать часы вруч­ную с NTP-сервера.

Убе­ди­тесь, что ваш NTP-клие неак­ти­вен, когда вы выпол­ня­е­те команду.