Linux убакыт синхрондоштуруу: NTP, Chrony жана systemd-timesyncd

Linux убакыт синхрондоштуруу: NTP, Chrony жана systemd-timesyncd
Көпчүлүк адамдар убакытты көзөмөлдөп турушат. Эртең мененки ырым-жырымдарды бүтүрүү жана жумушка баруу, түшкү тыныгуу, долбоордун мөөнөтүн аткаруу, туулган күндөрдү жана майрамдарды белгилөө, учакка отуруу ж.б.у.с.

Анын үстүнө: биздин кээ бирибиз убакыт менен алпурушуп жатабыз. Менин саатым күн энергиясы менен иштейт жана Улуттук стандарттар жана технология институтунан так убакыт алат (булгоолорду) Форт Коллинзге (Колорадо штаты) узун толкундуу радио аркылуу WWVB. Убакыт сигналдары Форт Коллинзде жайгашкан атомдук саат менен синхрондоштурулган. Менин Fitbit серверим менен шайкештирилип жаткан телефонум менен шайкештештирилүүдө NTP, акыры атомдук саат менен синхрондоштуруу.

Түзмөктөр да убакытты көзөмөлдөйт

Биздин аппараттарыбыз жана компьютерлерибиз так убакытка муктаж болушунун көптөгөн себептери бар. Мисалы, банк ишинде, фондулук рыноктордо жана башка финансылык бизнесте бүтүмдөр тийиштүү тартипте жүргүзүлүшү керек жана бул үчүн так убакыт ырааттуулугу маанилүү.

Биздин телефондорубуз, планшеттерибиз, унааларыбыз, GPS тутумдарыбыз жана компьютерлерибиздин бардыгы так убакыт жана күн жөндөөлөрүн талап кылат. Мен компьютеримдин иш тактасындагы саат туура убакытты көрсөтүшүн каалайм. Эстеткичтердин жергиликтүү календарымда керектүү убакта пайда болушун каалайм. Туура убакыт ошондой эле cron жана системалык жумуштардын туура убакта иштешин камсыздайт.

Дата жана убакыт журналды жазуу үчүн да маанилүү, ошондуктан датага жана убакытка негизделген белгилүү журналдарды табуу бир аз жеңилирээк. Мисалы, мен бир жолу DevOpsта иштегем (ал кезде мындай деп аталчу эмес) жана Түндүк Каролина штатында электрондук почта системасын орнотуп жаткам. Биз күнүнө 20 миллиондон ашык электрондук каттарды иштетчүбүз. Бир катар серверлер аркылуу электрондук почтага көз салуу же географиялык жактан дисперстүү хосттордогу журнал файлдарын колдонуу менен окуялардын так ырааттуулугун аныктоо, эгерде тиешелүү компьютерлер өз убагында синхрондоштурулган болсо, алда канча оңой болот.

Бир жолу - көп саат

Linux хосттору тутум убактысы жана RTC убактысы бар экенин эске алышы керек. RTC (Real Time Clock) аппараттык сааттын бир аз кызыктай жана так эмес аталышы.

Аппараттык саат тутумдун аналык платасынын батареясын колдонуп, компьютер өчүрүлгөндө да үзгүлтүксүз иштейт. RTC негизги милдети убакыт серверине байланыш жок болгон учурда убакытты сактоо болуп саналат. Интернет аркылуу убакыт серверине туташуу мүмкүн болбогон күндөр, ар бир компьютердин так ички сааты болушу керек болчу. Операциялык системалар RTCге жүктөө учурунда кирүү керек болчу жана колдонуучу анын туура экенине ынануу үчүн BIOS аппараттык конфигурациясынын интерфейсин колдонуп системанын убактысын кол менен орнотушу керек болчу.

Аппараттык сааттар убакыт алкактары түшүнүгүн түшүнбөйт; RTC гана убакытты сактайт, ал убакыт алкагын же UTC (Координацияланган Универсалдуу Убакыт, GMT же Гринвич убактысы катары да белгилүү) офсетти эмес. Сиз RTCди мен бул макалада кийинчерээк карай турган куралды колдонуп орното аласыз.

Тутум убактысы - бул ОС иш тактаңыздагы GUI саатында, дата буйругунун чыгышында, журналдардын убакыт белгилеринде көрсөткөн убакыт. Бул файлдар түзүлгөндө, өзгөртүлгөндө жана ачылганда да колдонулат.

Баракта rtc үчүн адам RTC жана системалык сааттын толук сүрөттөлүшү бар.

NTP менен эмне болот?

Бүткүл дүйнө жүзүндөгү компьютерлер NTP серверлеринин иерархиясын колдонуу менен Интернет аркылуу өз убактысын стандарттык маалымдама сааттары менен синхрондоштуруу үчүн NTP (Network Time Protocol) колдонушат. Негизги убакыт серверлери 1-кабатта жана алар спутник, радио же ал тургай телефон линиялары аркылуу модемдер аркылуу 0-кабаттагы ар кандай улуттук убакыт кызматтарына түздөн-түз туташкан. 0-кабат убакыт кызматтары атомдук саат, атомдук сааттар аркылуу берилүүчү сигналдарга ылайыкташтырылган радио кабылдагыч же GPS спутниктери аркылуу берилүүчү өтө так саат сигналдарын колдонгон GPS кабыл алгыч болушу мүмкүн.

Маалымдама серверлеринин басымдуу бөлүгүндө жалпыга ачык бир нече миң коомдук NTP катмар 2 серверлери бар. NTP серверине муктаж болгон көптөгөн хосттору бар көптөгөн уюмдар жана колдонуучулар (мен кошо) өздөрүнүн убакыт серверлерин орнотууну тандашат, ошондуктан бир гана локалдык хост 2 же 3 катмарга кире алат. Андан кийин алар тармактагы калган түйүндөрдү локалдуу колдонуу үчүн конфигурациялашат. убакыт сервери. Менин үй тармагымда, бул 3-кабат сервер.

NTP ар кандай ишке ашыруу

NTP баштапкы ишке ашыруу ntpd болуп саналат. Андан кийин ага эки жаңысы кошулду, chronyd жана systemd-timesyncd. Үчөө тең жергиликтүү хост убактысын NTP убакыт сервери менен синхрондошот. systemd-timesyncd кызматы chronyd сыяктуу ишенимдүү эмес, бирок ал көпчүлүк максаттар үчүн жетиштүү. Эгерде RTC синхрондоштуруудан чыкса, ал жергиликтүү системанын убактысы бир аз өзгөрүп кеткенде системанын убактысын NTP сервери менен синхрондоштуруу үчүн акырындык менен тууралай алат. Systemd-timesync кызматын убакыт сервери катары колдонуу мүмкүн эмес.

Chrony бул эки программаны камтыган NTP ишке ашыруусу: chronyd демону жана chronyc деп аталган командалык сап интерфейси. Chrony көп учурларда зарыл болгон кээ бир өзгөчөлүктөргө ээ:

  • Chrony эски ntpd кызматына караганда убакыт сервери менен синхрондошо алат. Бул дайыма иштебеген ноутбуктар же рабочий компьютерлер үчүн жакшы.
  • Ал сааттын өзгөрүүсүн компенсациялай алат, мисалы, хост уктап жатканда же уйку режимине киргенде, же жыштык секирүүсүнөн улам саат өзгөргөндө, бул аз жүктөмдө сааттарды жайлатат.
  • Бул туруксуз тармак байланышы же тармак тыгынына байланыштуу убакыт көйгөйлөрүн чечет.
  • Бул тармактын кечигүүлөрүн жөнгө салат.
  • Алгачкы убакыт синхрондоштуруудан кийин, Chrony эч качан саатты токтотпойт. Бул көптөгөн тутум кызматтары жана тиркемелери үчүн туруктуу жана ырааттуу убакыт аралыгын камсыз кылат.
  • Chrony тармак туташуусу жок да иштей алат. Бул учурда, жергиликтүү хост же сервер кол менен жаңыртылышы мүмкүн.
  • Chrony NTP сервери катары иштей алат.

Дагы бир жолу, NTP бул Chrony же systemd-timesyncd аркылуу Linux хостунда ишке ашырыла турган протокол.

NTP, Chrony жана systemd-timesyncd RPMs стандарттык Fedora репозиторийлеринде жеткиликтүү. systemd-udev RPM - Fedoraда демейки боюнча орнотулган ядро ​​​​окуясынын менеджери, бирок милдеттүү эмес.

Сиз үчөөнү тең орнотуп, алардын ортосунда которула аласыз, бирок бул кошумча баш ооруну жаратат. Андыктан андай болбогону жакшы. Fedora, CentOS жана RHELдин заманбап релиздери демейки ишке ашыруу катары Chronyге өттү жана аларда systemd-timesyncd да бар. Менимче, Chrony жакшы иштейт, NTP кызматына караганда жакшыраак интерфейсти камсыз кылат, көбүрөөк маалымат жана башкарууну камсыз кылат, бул система администраторлоруна албетте жагат.

NTP кызматтарын өчүрүү

NTP кызматы хостуңузда мурунтан эле иштеп жаткан болушу мүмкүн. Эгер ошондой болсо, башка нерсеге өтүүдөн мурун аны өчүрүшүңүз керек. Менде chronyd иштеп жаткандыктан, аны токтотуу жана өчүрүү үчүн төмөнкү буйруктарды колдондум. Хостуңузда иштеп жаткан каалаган NTP демону үчүн тиешелүү буйруктарды иштетиңиз:

[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#

Кызматтын токтоп калганын жана өчүрүлгөнүн текшериңиз:

[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP client/server
     Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:chronyd(8)
             man:chrony.conf(5)
[root@testvm1 ~]#

Ишке киргизүү алдында абалды текшерүү

Системалык сааттын синхрондоштуруу абалы NTP кызматы иштеп жатканын аныктоого мүмкүндүк берет. Сиз NTP баштала элек болгондуктан, timesyc-status буйругу ушуну көрсөтүп турат:

[root@testvm1 ~]# timedatectl timesync-status
Failed to query server: Could not activate remote peer.

Түздөн-түз статус суроосу маанилүү маалыматты берет. Мисалы, эч кандай аргументи же параметрлери жок timedatectl буйругу демейки боюнча абалдын подкомандасын аткарат:

[root@testvm1 ~]# timedatectl status
           Local time: Fri 2020-05-15 08:43:10 EDT  
           Universal time: Fri 2020-05-15 12:43:10 UTC  
                 RTC time: Fri 2020-05-15 08:43:08      
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: no                          
              NTP service: inactive                    
          RTC in local TZ: yes                    

Warning: The system is configured to read the RTC time in the local time zone.
         This mode cannot be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#

Бул сизге хостуңуз үчүн жергиликтүү убакытты, UTC убактысын жана RTC убактысын берет. Бул учурда, системанын убактысы Америка/Нью_Йорк (TZ) убакыт алкагына коюлган, RTC жергиликтүү убакыт алкагындагы убакытка коюлган жана NTP кызматы активдүү эмес. RTC убактысы система убактысынан бир аз четтей баштады. Бул сааттары шайкештештирилбеген системалар үчүн нормалдуу көрүнүш. Хосттагы офсеттин суммасы система акыркы жолу синхрондоштуруудан бери өткөн убакытка жараша болот.

Ошондой эле RTC үчүн жергиликтүү убакытты колдонуу жөнүндө эскертүү алдык - бул убакыт алкагынын өзгөртүүлөрүнө жана DST жөндөөлөрүнө тиешелүү. Өзгөртүү керек болгондо компьютер өчүрүлгөн болсо, RTC өзгөрбөйт. Бирок күнү-түнү иштеген серверлер же башка хосттор үчүн бул эч кандай көйгөй эмес. Кошумчалай кетсек, NTP убактысын синхрондоштурууну камсыз кылган ар кандай кызмат баштапкы баштоо фазасында хосттун убактысын тууралайт, андыктан ишке киргизүү аяктагандан кийин убакыт кайра туура болот.

Убакыт алкагын орнотуу

Адатта, сиз орнотуу процедурасы учурунда убакыт алкагын белгилейсиз жана сизде аны кийинчерээк өзгөртүү милдети жок. Бирок, убакыт алкагын өзгөртүү керек болгон учурлар бар. жардам бере турган бир нече куралдар бар. Linux хосттун жергиликтүү убакыт алкагын аныктоо үчүн убакыт алкагынын файлдарын колдонот. Бул файлдар каталогдо /usr/share/zoneinfo. Демейки боюнча, менин убакыт алкагым үчүн система муну белгилейт: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Бирок убакыт алкагын өзгөртүү үчүн мындай кылдаттыктарды билүүнүн кереги жок.

Эң негизгиси, жайгашкан жериңиздин расмий убакыт алкагынын аталышын жана тиешелүү буйрукту билүү. Сиз убакыт алкагын Лос-Анжелеске өзгөрткүңүз келет дейли:


[root@testvm2 ~]# timedatectl list-timezones | column
<SNIP>
America/La_Paz                  Europe/Budapest
America/Lima                    Europe/Chisinau
America/Los_Angeles             Europe/Copenhagen
America/Maceio                  Europe/Dublin
America/Managua                 Europe/Gibraltar
America/Manaus                  Europe/Helsinki
<SNIP>

Эми сиз убакыт алкагын орното аласыз. Мен өзгөрүүлөрдү текшерүү үчүн дата буйругун колдондум, бирок сиз timedatectl да колдонсоңуз болот:

[root@testvm2 ~]# date
Tue 19 May 2020 04:47:49 PM EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
Tue 19 May 2020 01:48:23 PM PDT
[root@testvm2 ~]#

Эми сиз хостуңуздун убакыт алкагын кайра жергиликтүү убакытка өзгөртө аласыз.

systemd-timesyncd

Системалык убакыт синхрондоштуруу демону системалык контекстте башкарууга оңой болгон NTP ишке ашырууну камсыз кылат. Ал Fedora жана Ubuntu демейки боюнча орнотулган. Бирок, Ubuntu демейки боюнча гана башталат. Башка бөлүштүрүүлөр жөнүндө так айта албайм. Сиз өзүңүз текшере аласыз:

[root@testvm1 ~]# systemctl status systemd-timesyncd

Systemd-timesyncd конфигурацияланууда

systemd-timesyncd үчүн конфигурация файлы болуп саналат /etc/systemd/timesyncd.conf. Бул эски NTP жана chronyd кызматтарына караганда иштетилген азыраак параметрлери бар жөнөкөй файл. Менин Fedora VMмдеги бул файлдын мазмуну (мындан ары өзгөртүүсүз):

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org 2.fedora.pool.ntp.org 3.fedora.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

Комментарийлерден тышкары анда камтылган жалгыз бөлүм [Убакыт]. Калган бардык саптарга комментарий берилет. Булар демейки маанилер жана өзгөртүлбөшү керек (эгер сизде себеп жок болсо). Эгерде сизде NTP= сызыгында аныкталган NTP убакыт сервери жок болсо, Fedora демейки Fedora убакыт серверине кайтарып берет. Мен көбүнчө убакыт серверимди кошом:

NTP=myntpserver

Иштөө убактысы синхрондоштуруу

Systemd-timesyncd-ди төмөнкүдөй баштап, активдүү кыла аласыз:

[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Created symlink /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd-timesyncd.service.
Created symlink /etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service → /usr/lib/systemd/system/systemd-timesyncd.service.
[root@testvm2 ~]# systemctl start systemd-timesyncd.service
[root@testvm2 ~]#

Аппараттык саатты орнотуу

Бул жерде timesyncd иштетилгенден кийин абал кандай болот:

[root@testvm2 systemd]# timedatectl
               Local time: Sat 2020-05-16 14:34:54 EDT  
           Universal time: Sat 2020-05-16 18:34:54 UTC  
                 RTC time: Sat 2020-05-16 14:34:53      
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes                          
              NTP service: active                      
          RTC in local TZ: no    

Башында, RTC менен жергиликтүү убакыттын (EDT) ортосундагы айырма бир секунддан азыраак жана кийинки бир нече күндүн ичинде дал келбөө дагы бир-эки секундга көбөйөт. RTCде убакыт алкактары түшүнүгү жок болгондуктан, timedatectl буйругу туура убакыт алкагын аныктоо үчүн салыштырууну аткарышы керек. Эгерде RTC убактысы жергиликтүү убакытка так дал келбесе, анда ал жергиликтүү убакыт алкагына да дал келбейт.

Көбүрөөк маалымат издеп, мен systemd-timesync статусун текшерип, муну таптым:

[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2020-05-16 13:56:53 EDT; 18h ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 822 (systemd-timesyn)
     Status: "Initial synchronization to time server 163.237.218.19:123 (2.fedora.pool.ntp.org)."
      Tasks: 2 (limit: 10365)
     Memory: 2.8M
        CPU: 476ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─822 /usr/lib/systemd/systemd-timesyncd

May 16 09:57:24 testvm2.both.org systemd[1]: Starting Network Time Synchronization...
May 16 09:57:24 testvm2.both.org systemd-timesyncd[822]: System clock time unset or jumped backwards, restoring from recorded timestamp: Sat 2020-05-16 13:56:53 EDT
May 16 13:56:53 testvm2.both.org systemd[1]: Started Network Time Synchronization.
May 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Initial synchronization to time server 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#

Системанын убактысы коюла элек же баштапкы абалга келтирилген деп жазылган журнал билдирүүсүнө көңүл буруңуз. Timesync кызматы системанын убактысын убакыт белгисинин негизинде белгилейт. Убакыт белгилерин убакыт синхрондоштуруу демону кармап турат жана ар бир ийгиликтүү синхрондоштурууда түзүлөт.

timedatectl буйругунун аппараттык сааттын маанисин системалык сааттан алуу мүмкүнчүлүгү жок. Ал буйрук сабында киргизилген мааниден убакытты жана күндү гана орното алат. Сиз hwclock буйругун колдонуп, RTCди системанын убактысы менен бирдей мааниге орното аласыз:

[root@testvm2 ~]# /sbin/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
               Local time: Mon 2020-05-18 13:56:46 EDT  
           Universal time: Mon 2020-05-18 17:56:46 UTC  
                 RTC time: Mon 2020-05-18 13:56:46      
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes                          
              NTP service: active                      
          RTC in local TZ: yes

--localtime параметри аппараттык саатка UTC эмес, жергиликтүү убакытты көрсөтүүнү айтат.

Эмне үчүн сизге RTC керек?

Ар кандай NTP ишке ашыруу системанын саатын ишке киргизүү убагында орнотот. Анан эмне үчүн RTC? Бул толугу менен туура эмес: бул убакыт серверине тармак байланышы болгондо гана болот. Бирок, көптөгөн системалардын тармактык туташууга дайыма эле мүмкүнчүлүгү боло бербейт, андыктан аппараттык саат Linux үчүн системанын убактысын коюу үчүн колдонууга пайдалуу. Бул реалдуу убакыттан четтеп кетиши мүмкүн болсо да, убакытты кол менен коюудан жакшыраак.

жыйынтыктоо

Бул макалада дата, убакыт жана убакыт алкактарын башкаруу үчүн кээ бир куралдар каралып чыкты. Systemd-timesyncd куралы жергиликтүү хосттогу убакытты NTP сервери менен шайкештештире алган NTP кардарын камсыз кылат. Бирок, systemd-timesyncd сервердик кызматты камсыз кылбайт, андыктан тармагыңызда NTP сервери керек болсо, сервер катары иштөө үчүн Chrony сыяктуу башка нерсени колдонушуңуз керек.

Тармагымдагы каалаган кызмат үчүн бирдиктүү ишке ашырууну артык көрөм, ошондуктан мен Chrony колдоном. Эгер сизге жергиликтүү NTP серверинин кереги жок болсо, же сервер катары Chrony жана SNTP кардары катары systemd-timesyncd колдонууга каршы болбосоңуз. Анткени, эгер сиз systemd-timesyncd функционалдуулугуна ыраазы болсоңуз, Chrony кошумча функцияларын кардар катары колдонуунун кажети жок.

Дагы бир эскертүү: NTPди ишке ашыруу үчүн сизден systemd куралдарын колдонуу талап кылынбайт. Сиз ntpd, Chrony же башка NTP ишке ашыруунун эски версиясын колдоно аласыз. Анткени, systemd көп сандагы кызматтардан турат; алардын көбү милдеттүү эмес, андыктан аларды өчүрүп, ордуна башка нерсени колдонсоңуз болот. Бул чоң монолиттик желмогуз эмес. Сиз системаны же анын бөлүктөрүн жактырбашыңыз мүмкүн, бирок сиз негиздүү чечим кабыл алышыңыз керек.

Мага systemdдин NTPди ишке ашыруусу жагат, бирок мен Chronyди жактырам, анткени ал менин муктаждыктарыма көбүрөөк жооп берет. Бул Linux, балам -)

жарнама катары

VDSina сунуш кылат ар кандай тапшырма үчүн серверлер, автоматтык орнотуу үчүн операциялык системалардын чоң тандоосу, каалаган ОСти өз алдынча орнотууга болот ISO, ыңгайлуу башкаруу панели өз өнүктүрүү жана күнүмдүк төлөм. Эске салсак, бизде түбөлүктүү серверлер бар, алар түбөлүктүү 😉

Linux убакыт синхрондоштуруу: NTP, Chrony жана systemd-timesyncd

Source: www.habr.com

Комментарий кошуу