Linux tímasamstilling: NTP, Chrony og systemd-timesyncd

Linux tímasamstilling: NTP, Chrony og systemd-timesyncd
Flestir fylgjast með tímanum. Við vöknum tímanlega til að klára morgunsiði okkar og förum í vinnuna, tökum okkur hádegishlé, náum skilamörkum verkefna, höldum upp á afmæli og frí, komum í flugvél og svo framvegis.

Þar að auki: sum okkar eru heltekið af tíma. Úrið mitt er knúið af sólarorku og fær nákvæman tíma frá National Institute of Standards and Technology (NIST) til Fort Collins, Colorado í gegnum langbylgjuútvarp WWVB. Tímamerkin eru samstillt við atómklukkuna, einnig staðsett í Fort Collins. Fitbit minn er að samstilla við símann minn sem er að samstilla við netþjóninn NTP, sem að lokum samstillist við atómklukkuna.

Tæki fylgjast líka með tímanum

Það eru margar ástæður fyrir því að tæki okkar og tölvur þurfa nákvæman tíma. Til dæmis, í bankastarfsemi, hlutabréfamörkuðum og öðrum fjármálafyrirtækjum, verða viðskipti að fara fram í réttri röð og nákvæmar tímaraðir eru mikilvægar fyrir þetta.

Símar okkar, spjaldtölvur, bílar, GPS kerfi og tölvur þurfa allir nákvæmar tíma- og dagsetningarstillingar. Ég vil að klukkan á skjáborði tölvunnar minnar sýni réttan tíma. Ég vil að áminningar birtist á dagatalinu mínu á réttum tíma. Réttur tími tryggir einnig að cron og systemd störfin keyri á réttum tíma.

Dagsetning og tími eru líka mikilvægar fyrir skráningu, svo það er aðeins auðveldara að finna ákveðna annála út frá dagsetningu og tíma. Til dæmis vann ég einu sinni í DevOps (það hét það ekki á þeim tíma) og var að setja upp tölvupóstkerfi í Norður-Karólínuríki. Við notuðum yfir 20 milljónir tölvupósta á dag. Það getur verið miklu auðveldara að rekja tölvupóst í gegnum röð netþjóna, eða ákvarða nákvæma atburðaröð með því að nota annálaskrár á landfræðilega dreifðum vélum ef viðkomandi tölvur eru samstilltar í tíma.

Einu sinni - margar klukkustundir

Linux vélar verða að taka tillit til þess að það er kerfistími og RTC tími. RTC (Real Time Clock) er svolítið skrítið og ekki mjög nákvæmt nafn á vélbúnaðarklukku.

Vélbúnaðarklukkan keyrir stöðugt, jafnvel þegar slökkt er á tölvunni, með því að nota rafhlöðuna á móðurborði kerfisins. Meginhlutverk RTC er að geyma tíma þegar tenging við tímaþjón er ekki tiltæk. Á þeim tímum þegar ómögulegt var að tengjast tímaþjóni í gegnum internetið þurfti hver tölva að vera með nákvæma innri klukku. Stýrikerfi þurftu að fá aðgang að RTC við ræsingu og notandinn þurfti að stilla kerfistímann handvirkt með því að nota BIOS vélbúnaðarstillingarviðmótið til að ganga úr skugga um að það væri rétt.

Vélbúnaðarklukkur skilja ekki hugmyndina um tímabelti; RTC geymir aðeins tímann, ekki tímabeltið eða frávik frá UTC (Coordinated Universal Time, einnig þekktur sem GMT eða Greenwich Mean Time). Þú getur sett upp RTC með því að nota tól sem ég mun fjalla um síðar í þessari grein.

Kerfistíminn er tíminn sem stýrikerfið sýnir á GUI klukkunni á skjáborðinu þínu, í úttak dagsetningarskipunar, í tímastimplum annálanna. Þetta á einnig við þegar skrár eru búnar til, breytt og opnaðar.

Á síðunni maður fyrir rtc það er full lýsing á RTC og kerfisklukkunni.

Hvað er með NTP?

Tölvur um allan heim nota NTP (Network Time Protocol) til að samstilla tímann sinn við venjulegar viðmiðunarklukkur í gegnum internetið með því að nota stigveldi NTP netþjóna. Helstu tímaþjónar eru á lag 1 og eru þeir beintengdir ýmsum innlendum tímaþjónustu á lag 0 í gegnum gervihnött, útvarp eða jafnvel mótald yfir símalínur. Lag 0 tímaþjónusta getur verið atómklukka, útvarpsmóttakari sem er stilltur á merki sem send eru með atómklukkum eða GPS móttakari sem notar mjög nákvæm klukkumerki sem send eru frá GPS gervihnöttum.

Mikill meirihluti viðmiðunarþjónanna er með nokkur þúsund opinbera NTP stratum 2 netþjóna sem eru opnir almenningi. Mörg stofnanir og notendur (meðtalinn ég sjálfur) með fullt af gestgjöfum sem þurfa NTP miðlara velja að setja upp sína eigin tímaþjóna þannig að aðeins einn staðbundinn gestgjafi opnar stratum 2 eða 3. Þeir stilla þá hnúta sem eftir eru á netinu til að nota staðbundna. tímaþjónn. Þegar um heimanetið mitt er að ræða er þetta lag 3 netþjónn.

Ýmsar útfærslur á NTP

Upprunalega útfærslan á NTP er ntpd. Það voru síðan sameinuð tveimur nýrri, chronyd og systemd-timesyncd. Allir þrír samstilla staðbundinn gestgjafatíma við NTP tímaþjón. Systemd-timesyncd þjónustan er ekki eins áreiðanleg og chronyd, en hún er nógu góð í flestum tilgangi. Ef RTC er ekki samstillt getur það smám saman stillt kerfistímann til að samstilla við NTP netþjóninn þegar staðbundinn kerfistími breytist aðeins. Ekki er hægt að nota systemd-timesync þjónustuna sem tímaþjón.

Chrony er útfærsla á NTP sem inniheldur tvö forrit: chronyd púkann og skipanalínuviðmót sem kallast chronyc. Chrony hefur nokkra eiginleika sem eru ómissandi í mörgum tilfellum:

  • Chrony getur samstillt við tímaþjón mun hraðar en gamla ntpd þjónustan. Þetta er gott fyrir fartölvur eða borðtölvur sem virka ekki alltaf.
  • Það getur bætt upp klukkusveiflur, eins og þegar hýsilinn fer að sofa eða fer í svefnham, eða þegar klukkan breytist vegna tíðnihopps, sem hægir á klukkum við lágt álag.
  • Það leysir tímavandamál sem tengjast óstöðugri nettengingu eða netþrengslum.
  • Það stjórnar tafir á neti.
  • Eftir fyrstu samstillingu stöðvar Chrony aldrei klukkuna. Þetta veitir stöðugan og stöðugan tíma fyrir margar kerfisþjónustur og forrit.
  • Chrony getur virkað jafnvel án nettengingar. Í þessu tilviki er hægt að uppfæra staðbundinn gestgjafa eða netþjón handvirkt.
  • Chrony getur virkað sem NTP netþjónn.

Enn og aftur, NTP er samskiptareglur sem hægt er að útfæra á Linux hýsil með Chrony eða systemd-timesyncd.

NTP, Chrony og systemd-timesyncd RPM eru fáanlegar í stöðluðum Fedora geymslum. Systemd-udev RPM er kjarnaviðburðastjóri sem er sjálfgefið settur upp á Fedora, en er valfrjáls.

Þú getur sett alla þrjá og skipt á milli þeirra, en þetta mun skapa auka höfuðverk. Svo það er betra að gera það ekki. Nútímaútgáfur af Fedora, CentOS og RHEL hafa færst yfir í Chrony sem sjálfgefna útfærslu og þær eru einnig með systemd-timesyncd. Mér finnst Chrony virka vel, veita betra viðmót en NTP þjónustan, veita miklu meiri upplýsingar og stjórna, sem kerfisstjórar munu svo sannarlega njóta.

Slökkva á NTP þjónustu

NTP þjónustan gæti nú þegar verið í gangi á gestgjafanum þínum. Ef svo er þarftu að slökkva á því áður en þú skiptir yfir í eitthvað annað. Ég var með chronyd í gangi svo ég notaði eftirfarandi skipanir til að stöðva og slökkva á því. Keyrðu viðeigandi skipanir fyrir hvaða NTP-púka sem þú ert að keyra á gestgjafanum þínum:

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

Athugaðu hvort þjónustan sé stöðvuð og óvirk:

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

Stöðuskoðun fyrir ræsingu

Samstillingarstaða kerfisklukka gerir þér kleift að ákvarða hvort NTP þjónustan sé í gangi. Þar sem þú hefur ekki ræst NTP ennþá mun timesync-status skipunin gefa vísbendingu um þetta:

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

Bein stöðubeiðni veitir mikilvægar upplýsingar. Til dæmis, timedatectl skipunin án röksemda eða valkosta framkvæmir stöðuundirskipunina sjálfgefið:

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

Þetta gefur þér staðartíma fyrir gestgjafann þinn, UTC tíma og RTC tíma. Í þessu tilviki er kerfistíminn stilltur á Ameríku / New_York (TZ) tímabeltið, RTC er stillt á tíma á staðbundnu tímabelti og NTP þjónustan er ekki virk. RTC tíminn er farinn að víkja aðeins frá kerfistímanum. Þetta er eðlilegt fyrir kerfi þar sem klukkur hafa ekki verið samstilltar. Magn mótvægis á hýsilinn fer eftir tímanum sem er liðinn frá því að kerfið var síðast samstillt.

Við fengum líka viðvörun um notkun staðartíma fyrir RTC - þetta á við um breytingar á tímabelti og DST stillingar. Ef slökkt er á tölvunni þegar gera þarf breytingar breytist RTC ekki. En fyrir netþjóna eða aðra véla sem keyra allan sólarhringinn er þetta alls ekki vandamál. Að auki mun sérhver þjónusta sem veitir NTP tímasamstillingu aðlaga tíma hýsilsins á upphafsstigi ræsingar, svo tíminn verður réttur aftur eftir að ræsingu er lokið.

Stilling á tímabelti

Venjulega tilgreinir þú tímabeltið meðan á uppsetningarferlinu stendur og þú hefur ekki það verkefni að breyta því síðar. Hins vegar eru tímar þegar þú þarft að breyta tímabeltinu. Það eru nokkur tæki sem geta hjálpað. Linux notar tímabeltisskrár til að ákvarða staðbundið tímabelti hýsils. Þessar skrár eru í möppunni /usr/share/zoneinfo. Sjálfgefið, fyrir mitt tímabelti, mælir kerfið fyrir um þetta: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. En þú þarft ekki að kunna slíkar fíngerðir til að breyta tímabeltinu.

Aðalatriðið er að vita opinbera tímabeltisheitið fyrir staðsetningu þína og samsvarandi skipun. Segjum að þú viljir breyta tímabeltinu í 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ú geturðu stillt tímabeltið. Ég notaði dagsetningarskipunina til að athuga hvort breytingar væru, en þú getur líka notað 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ú geturðu breytt tímabelti gestgjafa þíns aftur í staðartíma.

systemd-timesyncd

Systemd timesync púkinn býður upp á NTP útfærslu sem auðvelt er að stjórna í systemd samhengi. Það er sjálfgefið uppsett á Fedora og Ubuntu. Hins vegar byrjar það aðeins sjálfgefið á Ubuntu. Ég er ekki viss um aðrar dreifingar. Þú getur athugað sjálfur:

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

Stillir systemd-timesyncd

Stillingarskráin fyrir systemd-timesyncd er /etc/systemd/timesyncd.conf. Þetta er einföld skrá með færri valkosti virkt en gamla NTP og chronyd þjónusturnar. Hér er innihald þessarar skráar (án frekari breytinga) á Fedora VM mínum:

#  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

Eini hlutinn sem það inniheldur, fyrir utan athugasemdir, er [Time]. Allar aðrar línur eru gerðar athugasemdir. Þetta eru sjálfgefin gildi og ætti ekki að breyta þeim (nema þú hafir ástæðu til þess). Ef þú ert ekki með NTP tímaþjón skilgreindan í NTP= línunni, er Fedora sjálfgefið að vara Fedora tímaþjónn. Ég bæti venjulega tímaþjóninum mínum við:

NTP=myntpserver

Keyrir tímasamstillingu

Þú getur ræst og gert systemd-timesyncd virkt svona:

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

Stilling vélbúnaðar klukku

Svona lítur staðan út eftir að hafa keyrt 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    

Upphaflega er munurinn á RTC og staðartíma (EDT) innan við sekúnda og munurinn eykst um nokkrar sekúndur í viðbót næstu daga. Þar sem það er engin hugmynd um tímabelti í RTC, verður timedatectl skipunin að framkvæma samanburð til að ákvarða rétt tímabelti. Ef RTC tíminn passar ekki nákvæmlega við staðartímann, þá passar hann ekki heldur við staðartímabeltið.

Í leit að frekari upplýsingum athugaði ég stöðu systemd-timesync og fann þetta:

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

Taktu eftir færsluskilaboðunum sem segja að kerfistíminn hafi ekki verið stilltur eða hefur verið endurstilltur. Timesync þjónustan stillir kerfistímann út frá tímastimplinum. Tímastimplum er viðhaldið af timesync púknum og eru búnir til við hverja vel heppnaða samstillingu.

Timedatectl skipunin hefur enga leið til að taka gildi vélbúnaðarklukkunnar frá kerfisklukkunni. Það getur aðeins stillt tíma og dagsetningu frá gildinu sem er slegið inn á skipanalínunni. Þú getur stillt RTC á sama gildi og kerfistímann með því að nota hwclock skipunina:

[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

Valkosturinn --localtime segir vélbúnaðarklukkunni að sýna staðartíma, ekki UTC.

Af hverju þarftu RTC yfirleitt?

Sérhver útfærsla á NTP mun stilla kerfisklukkuna á ræsingartíma. Og hvers vegna þá RTC? Þetta er ekki alveg satt: þetta mun aðeins gerast ef þú ert með nettengingu við tímaþjóninn. Hins vegar hafa mörg kerfi ekki alltaf aðgang að nettengingu, þannig að vélbúnaðarklukka er gagnlegt fyrir Linux til að nota til að stilla kerfistímann. Þetta er betra en að stilla tímann handvirkt, jafnvel þó hann kunni að víkja frá rauntíma.

Ályktun

Þessi grein hefur farið yfir nokkur verkfæri til að vinna með dagsetningu, tíma og tímabelti. Systemd-timesyncd tólið veitir NTP biðlara sem getur samstillt tímann á staðbundnum hýsingaraðila við NTP netþjón. Hins vegar, systemd-timesyncd býður ekki upp á netþjónaþjónustu, þannig að ef þú þarft NTP netþjón á netinu þínu verður þú að nota eitthvað annað, eins og Chrony, til að starfa sem þjónn.

Ég vil frekar hafa eina útfærslu fyrir hvaða þjónustu sem er á netinu mínu, svo ég nota Chrony. Ef þú þarft ekki staðbundinn NTP miðlara, eða ef þér er sama um að nota Chrony sem miðlara og systemd-timesyncd sem SNTP biðlara. Þegar öllu er á botninn hvolft er engin þörf á að nota viðbótareiginleika Chrony sem viðskiptavinur ef þú ert ánægður með virkni systemd-timesyncd.

Önnur athugasemd: þú þarft ekki að nota systemd verkfærin til að innleiða NTP. Þú getur notað eldri útgáfu af ntpd, Chrony eða annarri NTP útfærslu. Eftir allt saman samanstendur systemd af miklum fjölda þjónustu; margar þeirra eru valfrjálsar, svo þú getur slökkt á þeim og notað eitthvað annað í staðinn. Þetta er ekki risastórt einhæft skrímsli. Þér líkar kannski ekki við systemd eða hluta þess, en þú ættir að taka upplýsta ákvörðun.

Mér líkar við innleiðingu systemd á NTP, en ég vil frekar Chrony vegna þess að það hentar mínum þörfum betur. Það er Linux, elskan -)

Um réttindi auglýsinga

VDSina býður netþjóna fyrir hvaða verkefni sem er, mikið úrval af stýrikerfum fyrir sjálfvirka uppsetningu, það er hægt að setja upp hvaða stýrikerfi sem er frá þínu eigin ISO, þægilegt stjórnborð eigin þróun og daglega greiðslu. Mundu að við erum með eilífa netþjóna sem eru örugglega tímalausir 😉

Linux tímasamstilling: NTP, Chrony og systemd-timesyncd

Heimild: www.habr.com

Bæta við athugasemd