Linuxi aja sĂŒnkroonimine: NTP, Chrony ja systemd-timesyncd

Linuxi aja sĂŒnkroonimine: NTP, Chrony ja systemd-timesyncd
Enamik inimesi jĂ€lgib aega. TĂ”useme Ă”igel ajal ĂŒles, et lĂ”petada oma hommikused rituaalid ja minna tööle, teha lĂ”unapausi, pidada kinni projekti tĂ€htaegadest, tĂ€histada sĂŒnnipĂ€evi ja pĂŒhi, istuda lennukisse jne.

Veelgi enam: mĂ”ned meist on aja kinnisideeks. Minu kell töötab pĂ€ikeseenergial ja saab tĂ€pset aega riiklikult standardite ja tehnoloogia instituudilt (NIST) Colorado osariiki Fort Collinsi pikalaineraadio kaudu WWVB. Ajasignaalid sĂŒnkroniseeritakse aatomkellaga, mis asub samuti Fort Collinsis. Minu Fitbit sĂŒnkroonib minu telefoniga, mis sĂŒnkroonib serveriga NTP, mis lĂ”puks sĂŒnkroniseerub aatomkellaga.

Ka seadmed jÀlgivad aega

PĂ”hjuseid, miks meie seadmed ja arvutid tĂ€pset aega vajavad, on palju. NĂ€iteks panganduses, aktsiaturgudel ja muudes finantsĂ€rides peavad tehingud toimuma Ă”iges jĂ€rjekorras ning tĂ€psed ajajĂ€rjestused on selle jaoks ĂŒliolulised.

Meie telefonid, tahvelarvutid, autod, GPS-sĂŒsteemid ja arvutid nĂ”uavad tĂ€pset kellaaja ja kuupĂ€eva seadistust. Ma tahan, et minu arvuti töölaual olev kell nĂ€itaks Ă”iget aega. Ma tahan, et meeldetuletused ilmuksid mu kohalikku kalendrisse Ă”igel ajal. Õige kellaaeg tagab ka selle, et cron ja systemd tööd töötavad Ă”igel ajal.

Logimisel on olulised ka kuupĂ€ev ja kellaaeg, seega on teatud logide leidmine kuupĂ€eva ja kellaaja jĂ€rgi veidi lihtsam. NĂ€iteks töötasin kunagi DevOpsis (sel ajal seda nii ei kutsutud) ja loosin PĂ”hja-Carolina osariigis meilisĂŒsteemi. Töötlesime varem ĂŒle 20 miljoni meili pĂ€evas. E-kirjade jĂ€lgimine serverite seeria kaudu vĂ”i sĂŒndmuste tĂ€pse jada kindlaksmÀÀramine geograafiliselt hajutatud hostide logifailide abil vĂ”ib olla palju lihtsam, kui vastavad arvutid on Ă”igeaegselt sĂŒnkroonitud.

Üks kord - mitu tundi

Linuxi hostid peavad arvestama, et on olemas sĂŒsteemiaeg ja RTC aeg. RTC (Real Time Clock) on pisut kummaline ja mitte vĂ€ga tĂ€pne nimi riistvaralisele kellale.

Riistvarakell töötab sĂŒsteemi emaplaadi akut kasutades pidevalt isegi siis, kui arvuti on vĂ€lja lĂŒlitatud. RTC pĂ”hifunktsioon on aja salvestamine, kui ĂŒhendus ajaserveriga pole saadaval. Ajal, mil Interneti kaudu ei olnud vĂ”imalik ajaserveriga ĂŒhendust luua, pidi igal arvutil olema tĂ€pne sisemine kell. OperatsioonisĂŒsteemid pidid alglaadimise ajal pÀÀsema juurde RTC-le ja kasutaja pidi BIOS-i riistvara konfiguratsiooniliidese abil kĂ€sitsi sĂŒsteemi aja mÀÀrama, et veenduda selle Ă”igsuses.

Riistvarakellad ei mÔista ajavööndite mÔistet; RTC salvestab ainult kellaaega, mitte ajavööndit ega nihet UTC-st (koordineeritud universaalaeg, tuntud ka kui GMT vÔi Greenwichi aeg). RTC saate installida tööriista abil, mida kÀsitlen hiljem selles artiklis.

SĂŒsteemi aeg on aeg, mille OS kuvab teie töölaual GUI kellas, kuupĂ€evakĂ€su vĂ€ljundis ja logide ajatemplites. See kehtib ka failide loomise, muutmise ja avamise kohta.

Lehel mees rtc eest seal on RTC ja sĂŒsteemi kella tĂ€ielik kirjeldus.

Mis on NTP-ga?

Arvutid ĂŒle kogu maailma kasutavad NTP-d (Network Time Protocol) oma aja sĂŒnkroonimiseks standardsete vĂ”rdluskelladega Interneti kaudu, kasutades NTP-serverite hierarhiat. Peamised ajaserverid asuvad 1. kihis ja need on otse ĂŒhendatud erinevate riiklike ajateenustega 0-kihis satelliidi, raadio vĂ”i isegi modemite kaudu telefoniliinide kaudu. Layer 0 ajateenused vĂ”ivad olla aatomkell, raadiovastuvĂ”tja, mis on hÀÀlestatud aatomkellade edastatavatele signaalidele, vĂ”i GPS-vastuvĂ”tja, mis kasutab GPS-satelliitide edastatud ĂŒlitĂ€pseid kellasignaale.

Enamikul vĂ”rdlusserveritest on mitu tuhat avalikku NTP stratum 2 serverit, mis on avalikkusele avatud. Paljud organisatsioonid ja kasutajad (kaasa arvatud mina), kellel on palju hoste ja kes vajavad NTP-serverit, otsustavad seadistada oma ajaserverid, nii et ainult ĂŒks kohalik host pÀÀseb kihile 2 vĂ”i 3 juurde. SeejĂ€rel konfigureerivad nad ĂŒlejÀÀnud vĂ”rgusĂ”lmed kasutama kohalikku ajaserver. Minu koduvĂ”rgu puhul on see 3. kihi server.

Erinevad NTP rakendused

NTP algne rakendus on ntpd. SeejĂ€rel liitusid sellega kaks uuemat, chronyd ja systemd-timesyncd. KĂ”ik kolm sĂŒnkroonivad kohaliku hosti aja NTP-ajaserveriga. Systemd-timesyncd teenus ei ole nii usaldusvÀÀrne kui chronyd, kuid see on enamiku eesmĂ€rkide jaoks piisavalt hea. Kui RTC on sĂŒnkroonist vĂ€ljas, saab see jĂ€rk-jĂ€rgult kohandada sĂŒsteemi aega NTP-serveriga sĂŒnkroonimiseks, kui kohaliku sĂŒsteemi aeg veidi triivib. Teenust systemd-timesync ei saa ajaserverina kasutada.

Chrony on NTP rakendus, mis sisaldab kahte programmi: chronyd deemon ja kÀsurea liides nimega chronyc. Chronyl on mÔned funktsioonid, mis on paljudel juhtudel asendamatud:

  • Chrony suudab ajaserveriga sĂŒnkroonida palju kiiremini kui vana ntpd-teenus. See sobib hĂ€sti sĂŒlearvutitele vĂ”i lauaarvutitele, mis kogu aeg ei tööta.
  • See vĂ”ib kompenseerida kella kĂ”ikumisi, nĂ€iteks kui host lĂ€heb magama vĂ”i unereĆŸiimile vĂ”i kui kell muutub sageduse hĂŒppamise tĂ”ttu, mis aeglustab kellasid madalal koormusel.
  • See lahendab ebastabiilse vĂ”rguĂŒhenduse vĂ”i vĂ”rgu ĂŒlekoormusega seotud ajaprobleemid.
  • See reguleerib vĂ”rgu viivitusi.
  • PĂ€rast esialgset aja sĂŒnkroonimist ei peata Chrony kunagi kella. See tagab paljude sĂŒsteemiteenuste ja rakenduste jaoks stabiilsed ja jĂ€rjepidevad ajavahemikud.
  • Chrony töötab ka ilma vĂ”rguĂŒhenduseta. Sel juhul saab kohalikku hosti vĂ”i serverit kĂ€sitsi vĂ€rskendada.
  • Chrony vĂ”ib toimida NTP-serverina.

Taaskord on NTP protokoll, mida saab Chrony vÔi systemd-timesyncd abil Linuxi hostis rakendada.

NTP, Chrony ja systemd-timesyncd RPM-id on saadaval standardsetes Fedora hoidlates. Systemd-udev RPM on kerneli sĂŒndmuste haldur, mis on Fedorasse vaikimisi installitud, kuid on valikuline.

Saate installida kĂ”ik kolm ja nende vahel vahetada, kuid see tekitab tĂ€iendavat peavalu. Nii et parem on mitte. Fedora, CentOS-i ja RHELi kaasaegsed vĂ€ljaanded on vaikerakenduseks kolinud Chronysse ja neil on ka systemd-timesyncd. Leian, et Chrony töötab hĂ€sti, pakub paremat liidest kui NTP-teenus, pakub palju rohkem teavet ja kontrolli, mida sĂŒsteemiadministraatorid kindlasti naudivad.

NTP-teenuste keelamine

NTP-teenus vĂ”ib teie hostis juba töötada. Kui jah, peate selle enne millegi muule ĂŒleminekut keelama. Mul oli chronyd töös, nii et kasutasin selle peatamiseks ja keelamiseks jĂ€rgmisi kĂ€ske. KĂ€ivitage vastavad kĂ€sud mis tahes NTP-deemoni jaoks, mida oma hostis kasutate:

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

Kontrollige, kas teenus on peatatud ja keelatud:

[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 ~]#

Oleku kontroll enne kÀivitamist

SĂŒsteemi kella sĂŒnkroonimise olek vĂ”imaldab teil mÀÀrata, kas NTP-teenus töötab. Kuna te pole veel NTP-d kĂ€ivitanud, vihjab kĂ€sk timesync-status sellele:

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

Otsene olekupÀring annab olulist teavet. NÀiteks kÀsk timedatectl ilma argumendi vÔi suvanditeta kÀivitab vaikimisi oleku alamkÀsu:

[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 ~]#

See annab teile hosti kohaliku aja, UTC aja ja RTC aja. Sel juhul on sĂŒsteemiajaks seatud Ameerika / New_Yorki (TZ) ajavöönd, RTC on seatud kohaliku ajavööndi kellaaega ja NTP-teenus pole aktiivne. RTC aeg on hakanud veidi erinema sĂŒsteemiajast. See on normaalne sĂŒsteemide puhul, mille kellad pole sĂŒnkroonitud. Hosti nihke suurus sĂ”ltub ajast, mis on möödunud sĂŒsteemi viimasest sĂŒnkroonimisest.

Samuti saime hoiatuse kohaliku aja kasutamise kohta RTC jaoks – see kehtib ajavööndi muudatuste ja DST sĂ€tete kohta. Kui arvuti lĂŒlitatakse vĂ€lja, kui on vaja muudatusi teha, siis RTC ei muutu. Kuid serverite vĂ”i muude ööpĂ€evaringselt töötavate hostide puhul pole see probleem. Lisaks kohandavad kĂ”ik NTP-aja sĂŒnkroonimist pakkuvad teenused algkĂ€ivitusfaasis hosti aega, nii et kellaaeg on pĂ€rast kĂ€ivitamise lĂ”petamist jĂ€lle Ă”ige.

Ajavööndi mÀÀramine

Tavaliselt mÀÀrate ajavööndi installimise kĂ€igus ja teil pole ĂŒlesannet seda hiljem muuta. Siiski on aegu, mil peate ajavööndit muutma. On mitmeid tööriistu, mis vĂ”ivad aidata. Linux kasutab hosti kohaliku ajavööndi mÀÀramiseks ajavööndifaile. Need failid on kataloogis /usr/share/zoneinfo. Vaikimisi nĂ€eb sĂŒsteem minu ajavööndi jaoks ette jĂ€rgmist: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Kuid ajavööndi muutmiseks ei pea te selliseid peensusi teadma.

Peaasi on teada oma asukoha ametlikku ajavööndi nime ja vastavat kÀsku. Oletame, et soovite muuta ajavööndiks Los Angeles:


[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>

NĂŒĂŒd saate mÀÀrata ajavööndi. Kasutasin muudatuste kontrollimiseks kĂ€sku date, kuid vĂ”ite kasutada ka 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 ~]#

NĂŒĂŒd saate oma hosti ajavööndi tagasi kohaliku aja jĂ€rgi muuta.

systemd-timesyncd

Systemd timesync deemon pakub NTP-rakendust, mida on systemd kontekstis lihtne hallata. See on vaikimisi installitud Fedorasse ja Ubuntu. Kuid see kÀivitub vaikimisi ainult Ubuntus. Teiste distributsioonide osas ma kindel pole. Saate ise kontrollida:

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

Systemd-timesyncd seadistamine

Systemd-timesyncd konfiguratsioonifail on /etc/systemd/timesyncd.conf. See on lihtne fail, milles on vÀhem vÔimalusi lubatud kui vanad NTP ja chronyd teenused. Siin on selle faili sisu (ilma tÀiendavate muudatusteta) minu Fedora VM-is:

#  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

Ainus jaotis, mis lisaks kommentaaridele sisaldab, on [Aeg]. KĂ”ik ĂŒlejÀÀnud read on kommenteeritud. Need on vaikevÀÀrtused ja neid ei tohiks muuta (kui teil pole selleks pĂ”hjust). Kui teil pole real NTP= mÀÀratletud NTP-ajaserverit, kasutab Fedora vaikimisi Fedora varuajaserverit. Tavaliselt lisan oma ajaserveri:

NTP=myntpserver

AjasĂŒnkroonimine töötab

Saate kÀivitada ja muuta systemd-timesyncd aktiivseks jÀrgmiselt:

[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 ~]#

Riistvara kella seadistamine

PÀrast timesyncd kÀivitamist nÀeb olukord vÀlja jÀrgmine:

[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    

Esialgu on erinevus RTC ja kohaliku aja (EDT) vahel alla sekundi ning jĂ€rgmiste pĂ€evade jooksul suureneb lahknevus veel paari sekundi vĂ”rra. Kuna RTC-s pole ajavööndite kontseptsiooni, peab timedatectl kĂ€sk Ă”ige ajavööndi mÀÀramiseks tegema vĂ”rdluse. Kui RTC aeg ei ĂŒhti tĂ€pselt kohaliku ajaga, siis ei kattu see ka kohaliku ajavööndiga.

Otsides lisateavet, kontrollisin systemd-timesynci olekut ja leidsin jÀrgmise:

[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]#

Pange tĂ€hele logiteadet, mis ĂŒtleb, et sĂŒsteemi aega pole mÀÀratud vĂ”i see on lĂ€htestatud. Timesynci teenus mÀÀrab sĂŒsteemi aja ajatempli alusel. Ajatempleid haldab ajasĂŒnkroonimise deemon ja need luuakse iga eduka sĂŒnkroonimise korral.

KĂ€sk timedatectl ei saa kuidagi sĂŒsteemi kellalt riistvara kella vÀÀrtust vĂ”tta. See saab mÀÀrata kĂ€sureale sisestatud vÀÀrtusest ainult kellaaja ja kuupĂ€eva. Saate seada RTC-ks sama vÀÀrtuse kui sĂŒsteemiaja, kasutades kĂ€sku hwclock:

[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

Valik --localtime kÀsib riistvarakellal nÀidata kohalikku aega, mitte UTC aega.

Miks teil RTC-d ĂŒldse vaja on?

Mis tahes NTP rakendamine seab kĂ€ivitusajal sĂŒsteemi kella. Ja miks siis RTC? See pole tĂ€iesti tĂ”si: see juhtub ainult siis, kui teil on ajaserveriga vĂ”rguĂŒhendus. Paljudel sĂŒsteemidel pole aga alati juurdepÀÀsu vĂ”rguĂŒhendusele, nii et riistvarakell on Linuxi jaoks kasulik sĂŒsteemiaja mÀÀramiseks. See on parem kui kellaaja kĂ€sitsi seadistamine, kuigi see vĂ”ib reaalajas erineda.

JĂ€reldus

See artikkel on lĂ€bi vaadanud mĂ”ned tööriistad kuupĂ€eva, kellaaja ja ajavöönditega manipuleerimiseks. Systemd-timesyncd tööriist pakub NTP-klienti, mis saab sĂŒnkroonida kohaliku hosti aega NTP-serveriga. Systemd-timesyncd aga ei paku serveriteenust, nii et kui vajate oma vĂ”rgus NTP-serverit, peate serverina kasutama midagi muud, nĂ€iteks Chrony.

Eelistan oma vĂ”rgu mis tahes teenuse jaoks ĂŒhte rakendust, seega kasutan Chronyt. Kui te ei vaja kohalikku NTP-serverit vĂ”i kui te ei soovi kasutada Chrony serverina ja systemd-timesyncd SNTP-kliendina. LĂ”ppude lĂ”puks pole vaja Chrony lisafunktsioone kliendina kasutada, kui olete systemd-timesyncd funktsionaalsusega rahul.

Veel ĂŒks mĂ€rkus: te ei pea NTP juurutamiseks kasutama sĂŒsteemseid tööriistu. VĂ”ite kasutada ntpd, Chrony vanemat versiooni vĂ”i mĂ”nda muud NTP-rakendust. Systemd koosneb ju suurest hulgast teenustest; paljud neist on valikulised, nii et saate need vĂ€lja lĂŒlitada ja kasutada nende asemel midagi muud. See pole tohutu monoliitne koletis. SĂŒsteem vĂ”i selle osad ei pruugi teile meeldida, kuid peaksite tegema teadliku otsuse.

Mulle meeldib systemd'i NTP juurutamine, kuid eelistan Chronyt, kuna see sobib paremini minu vajadustega. See on Linux, kallis -)

Reklaamide Ôiguste kohta

VDSina pakub serverid mis tahes ĂŒlesande jaoks, tohutu valik operatsioonisĂŒsteeme automaatseks installimiseks, on vĂ”imalik installida mis tahes OS omast ISO, mugav juhtpaneel enda arendamine ja igapĂ€evane tasumine. Tuletage meelde, et meil on igavesed serverid, mis on kindlasti ajatud 😉

Linuxi aja sĂŒnkroonimine: NTP, Chrony ja systemd-timesyncd

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster