Hevdemkirina Demjimêra Linux: NTP, Chrony û systemd-timesyncd

Hevdemkirina Demjimêra Linux: NTP, Chrony û systemd-timesyncd
Pir kes dema xwe dişopînin. Em di wextê xwe de radibin ku rîtuelên xwe yên sibê biqedînin û herin ser kar, bêhnvedana nîvroyê bigirin, muhletên projeyê bi cih bînin, rojbûn û betlaneyan pîroz bikin, li balafirê siwar bibin û hwd.

Wekî din: hinek ji me bi demê re mijûl in. Saeta min ji hêla enerjiya rojê ve tê hêz kirin û dema rast ji Enstîtuya Neteweyî ya Standard û Teknolojiyê digire (NIST) ji Fort Collins, Colorado bi rêya radyoya dirêj WWVB. Nîşaneyên demê bi demjimêra atomê re, ku di heman demê de li Fort Collins-ê jî cih digire, têne hevdem kirin. Fitbit-a min bi têlefona min a ku bi serverê re hevdeng e hevdem dike NTP, ku di dawiyê de bi demjimêra atomê re hevdem dike.

Amûrên demê jî dişopînin

Gelek sedem hene ku çima amûr û komputerên me hewceyê wextê rast in. Mînakî, di banking, borsazan, û karsaziyên darayî yên din de, divê danûstandin bi rêkûpêk bêne kirin, û rêzikên demê yên rast ji bo vê yekê krîtîk in.

Têlefon, tablet, otomobîl, pergalên GPS û komputerên me hemî mîhengên dem û tarîxê rast hewce dikin. Ez dixwazim demjimêra li ser sermaseya komputera min dema rast nîşan bide. Ez dixwazim bîranîn di wextê rast de li salnameya min a herêmî xuya bibin. Wextê rast jî piştrast dike ku karên kron û pergalê di wextê rast de dimeşin.

Dîrok û dem jî ji bo têketinê girîng in, ji ber vê yekê peydakirina hin têketinên li gorî tarîx û demjimêrê hinekî hêsantir e. Mînakî, min carekê di DevOps de xebitî (wê demê jê re nedihat gotin) û li eyaleta Karolînaya Bakur pergalek e-nameyê saz dikir. Me rojane zêdetirî 20 mîlyon e-name pêvajo dikir. Şopandina e-nameyê di nav rêzek serveran de, an destnîşankirina rêza rastîn a bûyeran bi karanîna pelên têketinê li ser mêvandarên erdnîgarî belavbûyî, dikare pir hêsantir be heke komputerên têkildar di wextê de bêne hevdem kirin.

Yek car - gelek demjimêr

Pêdivî ye ku mêvandarên Linux-ê hesab bikin ku demek pergalê û demek RTC heye. RTC (Demjimêra Rastî) ji bo demjimêrek hişk navek hinekî xerîb û ne pir rast e.

Dema ku komputer tê girtin jî, demjimêra hardware bi domdarî dimeşe, bi karanîna pîlê li ser motherboard pergalê. Fonksiyona sereke ya RTC ev e ku dema ku pêwendiyek bi serverek demjimêr re peyda nebe dema hilîne. Di rojên ku ne gengaz bû ku meriv bi serverek demjimêrê re bi ser Înternetê ve were girêdan, her komputer diviyabû ku demjimêrek hundurînek rastîn hebe. Pergalên xebitandinê diviyabû di dema bootkirinê de xwe bigihînin RTC-ê û pêdivî bû ku bikarhêner bi destan dema pergalê bi karanîna navbeynkariya veavakirina hardware BIOS-ê destnîşan bike da ku pê ewle bibe ku ew rast e.

Saetên hardware ji têgeha herêmên demê fam nakin; RTC tenê demê hildide, ne qada demjimêrê an jî ji UTC (Dema Gerdûnî ya Hevrêzkirî, ku wekî GMT an Dema Greenwichê jî tê zanîn) vedigire. Hûn dikarin RTC-ê bi karanîna amûrek ku ez ê paşê di vê gotarê de veşêrim saz bikin.

Demê pergalê dema ku OS-ê li ser demjimêra GUI-ya sermaseya we, di derketina fermana tarîxê de, di nîşaneyên demjimêrên têketinê de nîşan dide ye. Ev jî ji bo dema ku pel têne afirandin, guhertin û vekirinê derbas dibe.

Li ser rûpelê mêr ji bo rtc e danasîna full of RTC û saeta pergalê hene.

NTP çi ye?

Komputer li çaraliyê cîhanê NTP (Protokola Dema Torê) bikar tînin da ku dema xwe bi demjimêrên referansa standard ên li ser Înternetê re bi karanîna hiyerarşiyek serverên NTP-ê hevdeng bikin. Pêşkêşkerên demê yên sereke li qata 1-ê ne û ew rasterast bi riya satelîtê, radyoyê an hetta modemên li ser xetên têlefonê bi cûrbecûr karûbarên demjimêrên neteweyî yên li qata 0 ve têne girêdan. Karûbarên dema qat 0 dikare bibe demjimêrek atomî, wergirê radyoyek ku bi sînyalên ku ji hêla demjimêrên atomî ve têne veguheztin, an wergirê GPS-ê ku îşaretên demjimêrê yên pir rast ên ku ji hêla satelaytên GPS ve têne veguheztin bikar tîne.

Piraniya serverên referansê çend hezar serverên NTP-ê yên stratum 2 yên gelemperî ji gel re vekirî ne. Gelek rêxistin û bikarhêner (ez bi xwe jî di nav de) bi gelek mêvandarên ku hewceyê serverek NTP-yê ne, hildibijêrin ku serverên xwe yên demê saz bikin, ji ber vê yekê tenê mêvanek herêmî digihîje strûma 2 an 3. Dûv re ew girêkên mayî yên li ser torê mîheng dikin da ku herêmî bikar bînin. server dem. Di doza tora mala min de, ev serverek qat 3 ye.

Sazkirinên cihêreng ên NTP

Pêkanîna orîjînal a NTP ntpd e. Dûv re du yên nûtir, chronyd û systemd-timesyncd ve hatin girêdan. Her sê jî dema mêvandariya herêmî bi serverek demjimêr NTP re hevdeng dikin. Karûbarê systemd-timesyncd wekî chronyd ne pêbawer e, lê ji bo pir armancan têra xwe baş e. Ger RTC ji hevdengiyê derbikeve, ew dikare hêdî hêdî dema pergalê rast bike da ku bi servera NTP-ê re hevdeng bike dema ku dema pergala herêmî piçekî diherike. Karûbarê systemd-timesync nikare wekî serverek demê were bikar anîn.

Chrony pêkanîna NTP-ê ye ku du bernameyan vedihewîne: chronyd daemon û navgînek rêza fermanê ya bi navê chronyc. Chrony xwedan hin taybetmendiyên ku di pir rewşan de neçar in hene:

  • Chrony dikare ji karûbarê kevn ntpd pir zûtir bi serverek demê re hevdeng bike. Ev ji bo laptopan an sermaseyên ku her dem naxebitin baş e.
  • Ew dikare guheztinên demjimêrê telafî bike, wek mînak dema ku mêvandar di xew re diçe an dikeve moda xewê, an dema ku demjimêr ji ber hilkişîna frekansê diguhezîne, ku demjimêran di barên kêm de hêdî dike.
  • Ew pirsgirêkên demê yên ku bi girêdana torê ya bêserûber an qerebalixiya torê ve girêdayî ne çareser dike.
  • Ew derengiyên torê bi rêkûpêk dike.
  • Piştî hevdengkirina dema destpêkê, Chrony ti carî demjimêrê nawestîne. Ev ji bo gelek karûbar û serîlêdanên pergalê demên domdar û domdar peyda dike.
  • Chrony dikare bêyî girêdana torê jî bixebite. Di vê rewşê de, mêvandar an servera herêmî dikare bi destan were nûve kirin.
  • Chrony dikare wekî serverek NTP tevbigere.

Carek din, NTP protokolek e ku dikare li ser mêvandarek Linux-ê bi karanîna Chrony an systemd-timesyncd were bicîh kirin.

RPM-ên NTP, Chrony, û systemd-timesyncd di depoyên standard Fedora de hene. Systemd-udev RPM rêveberek bûyera kernelê ye ku ji hêla xwerû li Fedora ve hatî saz kirin, lê vebijarkî ye.

Hûn dikarin her sêyan saz bikin û di navbera wan de biguherînin, lê ev ê serêşiyek zêde çêbike. Ji ber vê yekê çêtir e ku neyê. Weşanên nûjen ên Fedora, CentOS, û RHEL wekî pêkanîna xwerû derbasî Chrony bûne, û wan jî systemd-timesyncd heye. Ez dibînim ku Chrony baş dixebite, navbeynkariyek çêtir ji karûbarê NTP peyda dike, pir bêtir agahdarî û kontrolê peyda dike, ku rêvebirên pergalê bê guman dê jê kêfê bistînin.

Neçalakkirina Karûbarên NTP

Dibe ku karûbarê NTP jixwe li ser mêvandarê we were xebitandin. Ger wusa be, hûn hewce ne ku berî ku hûn li tiştek din veguherînin wê neçalak bikin. Min kronîk xebitî bû ji ber vê yekê min fermanên jêrîn bikar anî da ku wê rawestim û neçalak bikim. Fermanên guncan ji bo her daemonek NTP-ê ku hûn li ser mêvandarê xwe dimeşînin bimeşînin:

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

Kontrol bikin ku karûbar rawestiyaye û neçalak e:

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

Berî destpêkirinê kontrolkirina statûyê

Rewşa hevdemkirina demjimêra pergalê dihêle hûn diyar bikin ka karûbarê NTP-ê dimeşe. Ji ber ku we hîna NTP-ê dest pê nekiriye, emrê timesync-status dê vê yekê destnîşan bike:

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

Daxwazek statûya rasterast agahdariya girîng peyda dike. Mînakî, fermana timedatectl bêyî argûman an vebijarkan ji hêla xwerû ve binefermana statûyê pêk tîne:

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

Ev ê dema herêmî ji bo mêvandarê we, dema UTC, û dema RTC bide we. Di vê rewşê de, dema pergalê li qada demjimêra Amerîka / New_York (TZ) tête danîn, RTC li qada demjimêra herêmî tête danîn, û karûbarê NTP ne çalak e. Dema RTC dest pê kir ku hinekî ji dema pergalê veqete. Ev ji bo pergalên ku demjimêrên wan nehatine hevdengkirin normal e. Mîqdara guheztina li ser mêvandar bi dema ku ji ber ku pergalê herî dawîn hevdem bûye re derbas bûye ve girêdayî ye.

Di heman demê de me hişyariyek derbarê karanîna dema herêmî ya ji bo RTC-yê jî wergirt - ev ji bo guhertinên devera demjimêr û mîhengên DST-ê derbas dibe. Ger komputer were girtin dema ku pêdivî ye ku guhartin bêne çêkirin, RTC nayê guhertin. Lê ji bo servers an mêvandarên din ên ku li dora demjimêr dimeşînin, ev qet ne pirsgirêk e. Wekî din, her karûbarek ku hevdemkirina dema NTP-ê peyda dike dê di qonaxa destpêkirina destpêkê de dema mêvandar eyar bike, ji ber vê yekê piştî ku destpêkirinê qediya dem dê dîsa rast be.

Sazkirina qada demê

Bi gelemperî, hûn di dema prosedûra sazkirinê de devera demjimêr diyar dikin û karê we tune ku hûn paşê wê biguhezînin. Lêbelê, carinan hene ku hûn hewce ne ku qada demjimêr biguherînin. Gelek amûr hene ku dikarin alîkariyê bikin. Linux pelên devera demjimêr bikar tîne da ku devera demjimêra herêmî ya mêvandar diyar bike. Van pelan di pelrêça de ne /usr/share/zoneinfo. Bi xwerû, ji bo qada demjimêra min, pergal vê yekê destnîşan dike: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Lê hûn ne hewce ne ku hûn hûrgelên weha zanibin da ku qada demjimêr biguhezînin.

Ya sereke ev e ku hûn navê devera demjimêra fermî ya cîhê xwe û fermana têkildar zanibin. Ka em bibêjin ku hûn dixwazin qada demjimêrê li Los Angeles-ê biguherînin:


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

Niha hûn dikarin qada demjimêrê destnîşan bikin. Min fermana tarîxê bikar anî da ku guhartinan kontrol bike, lê hûn dikarin timedatectl jî bikar bînin:

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

Naha hûn dikarin devera demjimêra mêvandarê xwe vegerînin dema herêmî.

systemd-timesyncd

Systemd timesync daemon pêkanînek NTP-ê peyda dike ku di çarçoweya pergalê de birêvebirina wê hêsan e. Ew ji hêla xwerû li Fedora û Ubuntu ve hatî saz kirin. Lêbelê, ew tenê bi xwerû li Ubuntu dest pê dike. Ez li ser belavkirinên din ne bawer im. Hûn dikarin ji bo xwe kontrol bikin:

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

Veavakirina systemd-timesyncd

Pelê veavakirinê ji bo systemd-timesyncd e /etc/systemd/timesyncd.conf. Ev pelek hêsan e ku ji NTP-ya kevn û karûbarên kronîdê ve kêmtir vebijarkên çalakkirî ne. Li vir naveroka vê pelê (bêyî guhertinên din) li ser min Fedora VM ye:

#  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

Tenê beşa ku tê de heye, ji bilî şîroveyan, [Dem] e. Hemî rêzikên din têne şîrove kirin. Van nirxên xwerû ne û divê neyên guheztin (heya ku sedemek we hebe). Heke we serverek wextê NTP-ê di rêza NTP= de nehatiye diyarkirin, Fedora serverek dema Fedora ya paşverû vedigire. Ez bi gelemperî servera wextê xwe lê zêde dikim:

NTP=myntpserver

Timesync dimeşîne

Hûn dikarin bi vî rengî dest pê bikin û systemd-timesyncd çalak bikin:

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

Saetkirina saeta hardware

Li vir rewş çawa xuya dike piştî xebitandina 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    

Di destpêkê de, ferqa di navbera RTC û dema herêmî (EDT) de ji yek duyemîn kêmtir e, û nakokî di çend rojên pêş de du saniyeyên din zêde dibe. Ji ber ku di RTC de têgehek deverên demjimêr tune, fermana timedatectl pêdivî ye ku berhevokek bike da ku devera demjimêra rast diyar bike. Ger demjimêra RTC tam bi demjimêra herêmî re nebe, wê hingê ew bi devera demjimêra herêmî re jî hev nagire.

Li bêtir agahdarî digerim, min rewşa systemd-timesync kontrol kir û ev dît:

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

Bala xwe bidin peyama têketinê ya ku dibêje dema pergalê nehatiye danîn an ji nû ve hatî vegerandin. Karûbarê Timesync dema pergalê li ser bingeha demjimêrê destnîşan dike. Demjimêr ji hêla daemonê timeync ve têne parastin û li ser her hevrêziya serketî têne afirandin.

Fermana timedatectl çu rê nîne ku nirxa demjimêra hardware ji demjimêra pergalê bigire. Ew tenê dikare dem û tarîxê ji nirxa ku li ser rêzika fermanê hatî nivîsandin destnîşan bike. Hûn dikarin bi karanîna fermana hwclock-ê RTC-ê bi heman nirxê dema pergalê saz bikin:

[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

Vebijarka --localtime ji saeta hardware re dibêje ku dema herêmî nîşan bide, ne UTC.

Çima hûn bi tevahî RTC hewce ne?

Her pêkanîna NTP-ê dê demjimêra pergalê di dema destpêkirinê de destnîşan bike. Û çima hingê RTC? Ev bi tevahî ne rast e: ev ê tenê biqewime heke we pêwendiyek torê ya bi servera demê re hebe. Lêbelê, gelek pergal her gav negihîjin girêdanek torê, ji ber vê yekê demjimêrek hardware ji Linux re bikêr e ku bikar bîne da ku dema pergalê destnîşan bike. Ev ji danîna wextê bi destan çêtir e, her çend dibe ku ew ji dema rast dûr bikeve.

encamê

Vê gotarê hin amûrên ji bo manîpulekirina tarîx, dem, û deverên demjimêr nirxand. Amûra systemd-timesyncd xerîdarek NTP peyda dike ku dikare dema li ser mêvandarê herêmî bi serverek NTP re hevdeng bike. Lêbelê, systemd-timesyncd karûbarek serverê peyda nake, ji ber vê yekê heke hûn li ser tora xwe serverek NTP hewce ne, divê hûn tiştek din bikar bînin, wek Chrony, da ku wekî server tevbigerin.

Ez tercîh dikim ku ji bo her karûbarek li ser tora xwe pêkanîna yekane hebe, ji ber vê yekê ez Chrony bikar tînim. Heke hûn ne hewce ne serverek NTP-ê ya herêmî, an heke hûn ne xema we ne ku Chrony wekî server û systemd-timesyncd wekî muwekîlê SNTP bikar bînin. Beriya her tiştî, heke hûn ji fonksiyona systemd-timesyncd razî bin, ne hewce ye ku hûn taybetmendiyên zêde yên Chrony wekî xerîdar bikar bînin.

Nîşeyek din: hûn ne hewce ne ku hûn amûrên pergalê bikar bînin da ku NTP bicîh bikin. Hûn dikarin guhertoyek kevntir a ntpd, Chrony, an pêkanînek din a NTP bikar bînin. Jixwe, systemd ji hejmareke mezin a karûbaran pêk tê; gelek ji wan vebijarkî ne, ji ber vê yekê hûn dikarin wan vemirînin û li şûna wan tiştek din bikar bînin. Ev ne cinawirekî yekparêz a mezin e. Dibe ku hûn ji pergalê an parçeyên wê hez nekin, lê divê hûn biryarek agahdar bidin.

Ez ji pêkanîna systemd-ê ya NTP-ê hez dikim, lê ez Chrony tercîh dikim ji ber ku ew çêtir li gorî hewcedariyên min tê. Ew Linux e, pitik -)

Li Mafên Malperê

VDSina pêşkêş dike pêşkêşkerên ji bo her karekî, Hilbijarkek mezin a pergalên xebitandinê yên ji bo sazkirina otomatîkî, gengaz e ku hûn her OS-ê ji ya xwe saz bikin ISO, rehet panelê kontrol bikin pêşveçûna xwe û dayina rojane. Bînin bîra xwe ku serverên me yên bêdawî hene ku bê guman bêdem in 😉

Hevdemkirina Demjimêra Linux: NTP, Chrony û systemd-timesyncd

Source: www.habr.com

Add a comment