Linux denbora sinkronizazioa: NTP, Chrony eta systemd-timesyncd

Linux denbora sinkronizazioa: NTP, Chrony eta systemd-timesyncd
Jende gehienak denboraren jarraipena egiten du. Garaiz jaikitzen gara goizeko errituak bete eta lanera joateko, bazkaltzeko atsedenaldi bat hartzeko, proiektuen epeak betetzeko, urtebetetzeak eta oporrak ospatzeko, hegazkinera igotzeko, etab.

Gainera: gutako batzuk denborarekin obsesionatuta gaude. Nire erlojua eguzki energiaz elikatzen da eta ordu zehatza lortzen du Estandar eta Teknologia Institutu Nazionaletik (NIST) Fort Collins-era (Colorado) uhin luzeko irratiaren bidez WWVB. Denbora-seinaleak erloju atomikoarekin sinkronizatuta daude, Fort Collins-en ere kokatua. Nire Fitbit zerbitzariarekin sinkronizatzen ari den nire telefonoarekin sinkronizatzen ari da NTP, azkenean erloju atomikoarekin sinkronizatzen dena.

Gailuek ere denboraren jarraipena egiten dute

Gure gailuek eta ordenagailuek denbora zehatza behar duten arrazoi asko daude. Adibidez, bankuetan, burtsetan eta beste finantza-negozio batzuetan, eragiketak ordena egokian egin behar dira, eta horretarako denbora-sekuentzia zehatzak funtsezkoak dira.

Gure telefonoek, tabletek, autoek, GPS sistemak eta ordenagailuek ordu eta data ezarpen zehatzak behar dituzte. Nire ordenagailuko mahaigaineko erlojuak ordu egokia erakustea nahi dut. Oroigarriak nire tokiko egutegian une egokian agertzea nahi dut. Ordu egokiak cron eta systemd lanak une egokian exekutatzen direla ziurtatzen du.

Data eta ordua ere garrantzitsuak dira erregistratzeko, beraz, apur bat errazagoa da data eta orduaren araberako zenbait erregistro aurkitzea. Esate baterako, behin DevOps-en lan egin nuen (garai hartan ez zen horrela deitzen) eta Ipar Carolina estatuan posta elektronikoko sistema bat ezartzen ari nintzen. Egunean 20 milioi mezu elektroniko baino gehiago prozesatzen genituen. Posta elektronikoaren jarraipena zerbitzari batzuen bidez edo gertaeren sekuentzia zehatza zehaztea geografikoki sakabanatuta dauden ostalarien erregistro fitxategiak erabiliz, askoz errazagoa izan daiteke dagozkien ordenagailuak denboran sinkronizatzen badira.

Denbora bat - ordu asko

Linux ostalariek kontuan izan behar dute sistemaren ordua eta RTC ordua daudela. RTC (Real Time Clock) hardware erloju baten izen apur bat arraroa eta ez oso zehatza da.

Hardwarearen erlojua etengabe dabil ordenagailua itzalita dagoenean ere, sistemaren plakako bateria erabiliz. RTC-ren funtzio nagusia denbora zerbitzari baterako konexiorik erabilgarri ez dagoenean denbora gordetzea da. Internet bidez ordu-zerbitzari batera konektatzea ezinezkoa zen garaian, ordenagailu bakoitzak barne-erloju zehatza izan behar zuen. Sistema eragileek RTCra abiarazteko garaian sartu behar zuten eta erabiltzaileak eskuz ezarri behar zuen sistemaren ordua BIOS hardwarearen konfigurazio interfazea erabiliz, zuzena zela ziurtatzeko.

Hardware-erlojuak ez du ulertzen ordu-eremuen kontzeptua; RTC-k ordua bakarrik gordetzen du, ez ordu-zona edo UTC-tik (Koordinatutako Ordua, GMT edo Greenwich Mean Time izenez ere ezagutzen dena). RTC instalatu dezakezu artikulu honetan geroago azalduko dudan tresna bat erabiliz.

Sistemaren ordua OSak zure mahaigaineko GUI erlojuan bistaratzen duen ordua da, data komandoaren irteeran, erregistroen denbora-zigiluetan. Hau fitxategiak sortu, aldatzen eta irekitzen direnean ere aplikatzen da.

Orrialdean rtc-rako gizona RTC eta sistemaren erlojuaren deskribapen osoa dago.

Zer gertatzen da NTPrekin?

Mundu osoko ordenagailuek NTP (Network Time Protocol) erabiltzen dute beren ordua erreferentziako erloju estandarrekin sinkronizatzeko Interneten bidez, NTP zerbitzarien hierarkia bat erabiliz. Ordu-zerbitzari nagusiak 1. geruzan daude eta 0. geruzako hainbat ordu-zerbitzu nazionaletara zuzenean konektatuta daude satelite, irrati edo modem bidez telefono-lineen bidez. Layer 0 denbora-zerbitzuak erloju atomiko bat, erloju atomikoek transmititutako seinaleetara sintonizatuta dagoen irrati-hargailu bat edo GPS sateliteek transmititutako erloju-seinale zehatzak erabiltzen dituen GPS hargailua izan daitezke.

Erreferentziako zerbitzarien gehiengo zabalak hainbat mila NTP estrato 2 zerbitzari publiko ditu publikoarentzat. NTP zerbitzari bat behar duten ostalari asko dituzten erakunde eta erabiltzaile askok (ni barne) beren denbora zerbitzariak konfiguratzea aukeratzen dute, beraz, ostalari lokal bakarrak 2. edo 3. estratuetara sartzeko aukera ematen dute. Ondoren, sareko gainerako nodoak konfiguratzen dituzte tokikoa erabiltzeko. denbora zerbitzaria. Nire etxeko sarearen kasuan, hau 3. geruzako zerbitzaria da.

NTPren hainbat ezarpen

NTPren jatorrizko ezarpena ntpd da. Ondoren, bi berriagoak gehitu zitzaizkion, chronyd eta systemd-timesyncd. Hirurek ostalari lokaleko ordua NTP ordu-zerbitzari batekin sinkronizatzen dute. Systemd-timesyncd zerbitzua ez da chronyd bezain fidagarria, baina aski ona da helburu gehienetarako. RTC sinkronizatu gabe badago, sistemaren ordua pixkanaka doi dezake NTP zerbitzariarekin sinkronizatzeko, tokiko sistemaren ordua zertxobait aldatzen denean. Systemd-timesync zerbitzua ezin da denbora zerbitzari gisa erabili.

Kronika bi programa dituen NTP inplementazioa da: chronyd deabrua eta chronyc izeneko komando-lerroko interfazea. Chrony-k kasu askotan ezinbestekoak diren ezaugarri batzuk ditu:

  • Chrony-k denbora zerbitzari batekin sinkroniza dezake ntpd zerbitzu zaharra baino askoz azkarrago. Hau ona da denbora guztian funtzionatzen ez duten ordenagailu eramangarrietarako edo mahaigainetarako.
  • Erlojuaren gorabeherak konpentsatu ditzake, hala nola ostalaria lo egiten denean edo lo moduan sartzen denean, edo erlojua aldatzen denean maiztasun-jauziaren ondorioz, karga baxuetan erlojuak moteltzen dituenean.
  • Sare-konexio ezegonkorrarekin edo sare-pilaketarekin lotutako denbora arazoak konpontzen ditu.
  • Sareko atzerapenak arautzen ditu.
  • Hasierako denbora sinkronizatu ondoren, Chrony-k ez du inoiz erlojua gelditzen. Honek denbora tarte egonkorrak eta koherenteak eskaintzen ditu sistemaren zerbitzu eta aplikazio askorentzat.
  • Chrony-k sareko konexiorik gabe ere funtziona dezake. Kasu honetan, tokiko ostalaria edo zerbitzaria eskuz egunera daiteke.
  • Chrony-k NTP zerbitzari gisa jardun dezake.

Berriro ere, NTP Chrony edo systemd-timesyncd erabiliz Linux ostalari batean inplementa daitekeen protokoloa da.

NTP, Chrony eta systemd-timesyncd RPMak Fedora biltegi estandarretan daude eskuragarri. systemd-udev RPM nukleoaren gertaeren kudeatzailea da, lehenespenez Fedoran instalatuta dagoena, baina aukerakoa da.

Hirurak instalatu eta batetik bestera alda ditzakezu, baina honek aparteko buruko mina sortuko du. Beraz, hobe da ez egitea. Fedora, CentOS eta RHEL bertsio modernoak Chrony-ra eraman dira ezarpen lehenetsi gisa, eta systemd-timesyncd ere badute. Chrony-k ondo funtzionatzen duela iruditzen zait, NTP zerbitzua baino interfaze hobea eskaintzen du, askoz informazio eta kontrol gehiago eskaintzen du, sistema-administratzaileek zalantzarik gabe gozatuko dutena.

NTP zerbitzuak desgaitzea

Baliteke NTP zerbitzua dagoeneko martxan egotea zure ostalarian. Hala bada, desgaitu behar duzu beste zerbaitera aldatu aurretik. Chronyd exekutatzen nuen, beraz, hurrengo komandoak erabili nituen gelditzeko eta desgaitzeko. Exekutatu komando egokiak zure ostalarian exekutatzen ari zaren NTP daemonentzat:

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

Egiaztatu zerbitzua geldituta eta desgaituta dagoela:

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

Abiarazi aurretik egoera egiaztatzea

Sistemaren erlojuaren sinkronizazio-egoerak NTP zerbitzua martxan dagoen ala ez zehaztea ahalbidetzen du. NTP oraindik hasi ez duzunez, timesync-status komandoak hau adieraziko du:

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

Zuzeneko egoera-eskaerak informazio garrantzitsua eskaintzen du. Adibidez, argumentu edo aukerarik gabeko timedatectl komandoak egoera azpikomandoa lehenespenez exekutatzen du:

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

Honek zure ostalariaren tokiko ordua, UTC ordua eta RTC ordua emango dizu. Kasu honetan, sistemaren ordua Amerika / New_York (TZ) ordu-eremuan ezartzen da, RTC tokiko ordu-eremuan dagoen ordua ezartzen da eta NTP zerbitzua ez dago aktibo. RTC ordua sistemaren ordutik zertxobait desbideratzen hasi da. Hau normala da erlojuak sinkronizatu ez dituzten sistemetan. Ostalariaren desplazamenduaren zenbatekoa sistema azken sinkronizatu zenetik igaro den denboraren araberakoa da.

RTCrako tokiko ordua erabiltzeari buruzko abisu bat ere jaso dugu; hau ordu-zona aldaketei eta DST ezarpenei dagokie. Aldaketak egin behar direnean ordenagailua itzaltzen bada, RTC ez da aldatuko. Baina erloju osoan zehar exekutatzen diren zerbitzarientzat edo beste ostalarientzat, hau ez da batere arazorik. Gainera, NTP ordu-sinkronizazioa eskaintzen duen edozein zerbitzuk ostalariaren ordua egokituko du hasierako abiarazte-fasean, beraz, ordua berriro zuzena izango da abiarazi ondoren.

Ordu-eremua ezartzea

Normalean, ordu-zona zehazten duzu instalazio-prozeduran zehar eta ez duzu geroago aldatzeko zereginik. Hala ere, ordu-eremua aldatu behar duzun une batzuetan. Lagun dezaketen hainbat tresna daude. Linux-ek ordu-eremuaren fitxategiak erabiltzen ditu ostalari baten tokiko ordu-eremua zehazteko. Fitxategi hauek direktorioan daude /usr/share/zoneinfo. Lehenespenez, nire ordu-eremurako, sistemak hau agintzen du: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Baina ez duzu halako Γ±abardurak ezagutu behar ordu-eremua aldatzeko.

Gauza nagusia zure kokapenaren ordu-zona ofizialaren izena eta dagokion komandoa ezagutzea da. Demagun ordu-eremua Los Angelesera aldatu nahi duzula:


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

Orain ordu-eremua ezar dezakezu. Date komandoa erabili nuen aldaketak egiaztatzeko, baina timedatectl ere erabil dezakezu:

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

Orain zure ostalariaren ordu-eremua tokiko ordura alda dezakezu.

systemd-timesyncd

Systemd timesync daemon-ek NTP inplementazioa eskaintzen du, sistemaren testuinguruan kudeatzeko erraza dena. Lehenespenez instalatuta dago Fedora eta Ubuntun. Hala ere, lehenespenez bakarrik hasten da Ubuntun. Ez nago ziur beste banaketaz. Zuk zeuk egiaztatu dezakezu:

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

systemd-timesyncd konfiguratzen

systemd-timesyncd-ren konfigurazio fitxategia da /etc/systemd/timesyncd.conf. Fitxategi sinple bat da NTP eta chronyd zerbitzu zaharrak baino aukera gutxiago gaituta dituena. Hona hemen fitxategi honen edukia (aldaketa gehiagorik gabe) nire Fedora VM-n:

#  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

Daukan atal bakarra, iruzkinez gain, [Denbora] da. Beste lerro guztiak iruzkintzen dira. Hauek dira balio lehenetsiak eta ez dira aldatu behar (arrazoirik ez baduzu behintzat). Ez baduzu NTP ordu-zerbitzaririk definitu NTP= lerroan, Fedorak lehenetsitako Fedora denbora-zerbitzari bat izango du. Normalean nire denbora zerbitzaria gehitzen dut:

NTP=myntpserver

Timesync martxan

Systemd-timesyncd abiarazi eta aktibo egin dezakezu honela:

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

Hardware-erlojua ezartzea

Hona hemen timesyncd exekutatu ondoren egoera nolakoa den:

[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    

Hasieran, RTC eta tokiko orduaren (EDT) arteko aldea segundo bat baino txikiagoa da, eta desadostasuna beste pare bat segundo handitzen da hurrengo egunetan. RTCn ordu-eremuen kontzepturik ez dagoenez, timedatectl komandoak konparazio bat egin behar du ordu-eremu zuzena zehazteko. RTC ordua tokiko orduarekin zehazki bat ez badator, orduan ere ez dator bat tokiko ordu-eremuarekin.

Informazio gehiago bila, systemd-timesync-en egoera egiaztatu nuen eta hau aurkitu nuen:

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

Kontuan izan sistemaren ordua ez dela ezarri edo berrezarri dela dioen erregistro-mezua. Timesync zerbitzuak denbora-zigiluaren arabera ezartzen du sistemaren ordua. Denbora-zigiluak timesync deabruak mantentzen ditu eta sinkronizazio arrakastatsu guztietan sortzen dira.

timedatectl komandoak ez du hardware-erlojuaren balioa sistema-erlojutik hartzeko modurik. Komando-lerrokoan sartutako baliotik soilik ezarri ditzake ordua eta data. RTC sistemaren orduaren balio berdinean ezar dezakezu hwclock komandoa erabiliz:

[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 aukerak hardwareko erlojuari tokiko ordua erakusteko esaten dio, ez UTC.

Zergatik behar duzu RTC?

NTP-ren edozein ezarpenek sistemaren erlojua ezarriko dute abiarazteko orduan. Eta zergatik orduan RTC? Hau ez da guztiz egia: denbora zerbitzariarekin sareko konexioa baduzu bakarrik gertatuko da. Hala ere, sistema askok ez dute beti sareko konexiorako sarbidea, beraz, hardware-erlojua erabilgarria da Linux-ek sistemaren ordua ezartzeko. Hau denbora eskuz ezartzea baino hobea da, nahiz eta denbora errealetik aldendu daitekeen.

Ondorioa

Artikulu honek data, ordua eta ordu-eremuak manipulatzeko tresna batzuk berrikusi ditu. systemd-timesyncd tresnak NTP bezero bat eskaintzen du, tokiko ostalariaren ordua NTP zerbitzari batekin sinkroniza dezakeena. Hala ere, systemd-timesyncd-ek ez du zerbitzari-zerbitzurik eskaintzen, beraz, zure sarean NTP zerbitzari bat behar baduzu, beste zerbait erabili behar duzu, Chrony adibidez, zerbitzari gisa jarduteko.

Nahiago dut nire sareko edozein zerbitzutarako inplementazio bakarra izatea, beraz Chrony erabiltzen dut. Tokiko NTP zerbitzaririk behar ez baduzu edo Chrony zerbitzari gisa erabiltzea eta systemd-timesyncd SNTP bezero gisa erabiltzea ez bazaizu axola. Azken finean, ez dago Chrony-ren ezaugarri osagarriak bezero gisa erabili beharrik systemd-timesyncd-en funtzionaltasunarekin pozik bazaude.

Beste ohar bat: ez duzu NTP inplementatzeko systemd tresnak erabili behar. ntpd, Chrony edo beste NTP inplementazio baten bertsio zaharrago bat erabil dezakezu. Azken finean, systemd zerbitzu ugariz osatuta dago; horietako asko aukerakoak dira, beraz, itzali eta beste zerbait erabil dezakezu. Hau ez da munstro monolitiko handi bat. Agian ez zaizu gustatuko systemd edo haren zatiak, baina erabaki informatua hartu beharko zenuke.

Systemd-en NTP inplementatzea gustatzen zait, baina Chrony nahiago dut nire beharretara hobeto egokitzen delako. Linux da, haurra -)

Publizitatearen Eskubideei buruz

VDSina eskaintzen du zerbitzariak edozein zereginetarako, instalazio automatikorako sistema eragileen aukeraketa handi bat, posible da edozein OS instalatu zuretik ISO, eroso kontrol panela garapen propioa eta eguneroko ordainketa. Gogoratu behin betiko betiko zerbitzariak ditugula πŸ˜‰

Linux denbora sinkronizazioa: NTP, Chrony eta systemd-timesyncd

Iturria: www.habr.com

Gehitu iruzkin berria