Linux laika sinhronizācija: NTP, Chrony un systemd-timesyncd

Linux laika sinhronizācija: NTP, Chrony un systemd-timesyncd
Lielākā daļa cilvēku seko lÄ«dzi laikam. Mēs ceļamies laicÄ«gi, lai pabeigtu rÄ«ta rituālus un dotos uz darbu, ieturētu pusdienu pauzi, ievērotu projektu termiņus, svinētu dzimÅ”anas dienas un svētkus, iekāptu lidmaŔīnā utt.

Turklāt daži no mums ir apsēsti ar laiku. Manu pulksteni darbina saules enerģija, un tas saņem precīzu laiku no Nacionālā standartu un tehnoloģiju institūta (NIST) uz Fortkolinsu, Kolorādo, izmantojot garo viļņu radio WWVB. Laika signāli tiek sinhronizēti ar atompulksteni, kas atrodas arī Fortkolinsā. Mans Fitbit tiek sinhronizēts ar manu tālruni, kas tiek sinhronizēts ar serveri NTP, kas galu galā sinhronizējas ar atompulksteni.

Ierīces arī seko laikam

Ir daudz iemeslu, kāpēc mÅ«su ierÄ«cēm un datoriem ir nepiecieÅ”ams precÄ«zs laiks. Piemēram, banku, akciju tirgos un citos finanÅ”u uzņēmumos darÄ«jumi ir jāveic pareizā secÄ«bā, un precÄ«za laika secÄ«ba ir ļoti svarÄ«ga.

MÅ«su tālruņiem, planÅ”etdatoriem, automaŔīnām, GPS sistēmām un datoriem ir nepiecieÅ”ami precÄ«zi laika un datuma iestatÄ«jumi. Es vēlos, lai pulkstenis uz mana datora darbvirsmas rāda pareizo laiku. Es vēlos, lai atgādinājumi tiktu parādÄ«ti manā vietējā kalendārā Ä«stajā laikā. Pareizs laiks nodroÅ”ina arÄ« cron un systemd uzdevumu izpildi pareizajā laikā.

Datums un laiks ir svarÄ«gi arÄ« reÄ£istrÄ“Å”anai, tāpēc ir nedaudz vieglāk atrast noteiktus žurnālus, pamatojoties uz datumu un laiku. Piemēram, es kādreiz strādāju DevOps (tolaik to tā nesauca) un izveidoju e-pasta sistēmu ZiemeļkarolÄ«nas Å”tatā. Mēs katru dienu apstrādājām vairāk nekā 20 miljonus e-pasta ziņojumu. E-pasta izsekoÅ”ana, izmantojot virkni serveru, vai precÄ«zas notikumu secÄ«bas noteikÅ”ana, izmantojot žurnālfailus Ä£eogrāfiski izkliedētos resursdatoros, var bÅ«t daudz vienkārŔāk, ja attiecÄ«gie datori ir savlaicÄ«gi sinhronizēti.

Vienu reizi - daudzas stundas

Linux saimniekiem ir jāņem vērā, ka ir sistēmas laiks un RTC laiks. RTC (Real Time Clock) ir nedaudz dīvains un ne pārāk precīzs aparatūras pulksteņa nosaukums.

AparatÅ«ras pulkstenis darbojas nepārtraukti, pat ja dators ir izslēgts, izmantojot sistēmas mātesplatē esoÅ”o akumulatoru. RTC galvenā funkcija ir saglabāt laiku, kad savienojums ar laika serveri nav pieejams. Tajos laikos, kad internetā nevarēja izveidot savienojumu ar laika serveri, katram datoram bija jābÅ«t precÄ«zam iekŔējam pulkstenim. Operētājsistēmām bija jāpiekļūst RTC sāknÄ“Å”anas laikā, un lietotājam bija manuāli jāiestata sistēmas laiks, izmantojot BIOS aparatÅ«ras konfigurācijas saskarni, lai pārliecinātos, ka tas ir pareizs.

AparatÅ«ras pulksteņi nesaprot laika joslu jēdzienu; RTC saglabā tikai laiku, nevis laika joslu vai nobÄ«di no UTC (koordinētais universālais laiks, kas pazÄ«stams arÄ« kā GMT vai Griničas laiks). Varat instalēt RTC, izmantojot rÄ«ku, kuru es apskatÄ«Å”u vēlāk Å”ajā rakstā.

Sistēmas laiks ir laiks, ko OS parāda jÅ«su darbvirsmas GUI pulkstenÄ«, datuma komandas izvadē un žurnālu laikspiedolos. Tas attiecas arÄ« uz failu izveidi, modificÄ“Å”anu un atvērÅ”anu.

Lapā vīrietis par rtc ir pilns RTC un sistēmas pulksteņa apraksts.

Kas notiek ar NTP?

Datori visā pasaulē izmanto NTP (Network Time Protocol), lai sinhronizētu savu laiku ar standarta atsauces pulksteņiem internetā, izmantojot NTP serveru hierarhiju. Galvenie laika serveri atrodas 1. slānÄ«, un tie ir tieÅ”i savienoti ar dažādiem valsts laika pakalpojumiem 0. slānÄ«, izmantojot satelÄ«tu, radio vai pat modemus, izmantojot tālruņa lÄ«nijas. 0. slāņa laika pakalpojumi var bÅ«t atompulkstenis, radio uztvērējs, kas ir noregulēts uz signāliem, ko pārraida atompulksteņi, vai GPS uztvērējs, kas izmanto ļoti precÄ«zus GPS satelÄ«tu pārraidÄ«tos pulksteņa signālus.

Lielākajai daļai atsauces serveru ir vairāki tÅ«kstoÅ”i publisko NTP stratum 2 serveru, kas ir atvērti sabiedrÄ«bai. Daudzas organizācijas un lietotāji (ieskaitot mani) ar daudziem resursdatoriem, kuriem nepiecieÅ”ams NTP serveris, izvēlas iestatÄ«t savus laika serverus, lai tikai viens vietējais resursdators piekļūtu 2. vai 3. slānim. Pēc tam viņi konfigurē atlikuÅ”os tÄ«kla mezglus, lai izmantotu vietējo. laika serveris. Mana mājas tÄ«kla gadÄ«jumā tas ir 3. slāņa serveris.

Dažādas NTP implementācijas

Sākotnējā NTP ievieÅ”ana ir ntpd. Pēc tam tai pievienojās divi jaunāki, chronyd un systemd-timesyncd. Visi trÄ«s sinhronizē vietējo resursdatora laiku ar NTP laika serveri. Pakalpojums systemd-timesyncd nav tik uzticams kā chronyd, taču tas ir pietiekami labs lielākajai daļai mērÄ·u. Ja RTC nav sinhronizēts, tas var pakāpeniski pielāgot sistēmas laiku, lai sinhronizētos ar NTP serveri, kad vietējās sistēmas laiks nedaudz mainās. Pakalpojumu systemd-timesync nevar izmantot kā laika serveri.

Chrony ir NTP ievieÅ”ana, kas satur divas programmas: chronyd dēmonu un komandrindas saskarni ar nosaukumu chronyc. Chrony ir dažas funkcijas, kas daudzos gadÄ«jumos ir neaizstājamas:

  • Chrony var sinhronizēt ar laika serveri daudz ātrāk nekā vecais ntpd pakalpojums. Tas ir piemērots klēpjdatoriem vai galddatoriem, kas nedarbojas visu laiku.
  • Tas var kompensēt pulksteņa svārstÄ«bas, piemēram, kad saimniekdators pāriet miega režīmā vai pāriet miega režīmā, vai kad mainās pulkstenis frekvences lēciena dēļ, kas palēnina pulksteņus pie zemas slodzes.
  • Tas atrisina laika problēmas, kas saistÄ«tas ar nestabilu tÄ«kla savienojumu vai tÄ«kla pārslodzi.
  • Tas regulē tÄ«kla aizkaves.
  • Pēc sākotnējās laika sinhronizācijas Chrony nekad neaptur pulksteni. Tas nodroÅ”ina stabilus un konsekventus laika posmus daudziem sistēmas pakalpojumiem un lietojumprogrammām.
  • Chrony var darboties pat bez tÄ«kla savienojuma. Å ajā gadÄ«jumā vietējo resursdatoru vai serveri var atjaunināt manuāli.
  • Chrony var darboties kā NTP serveris.

Atkal, NTP ir protokols, ko var ieviest Linux resursdatorā, izmantojot Chrony vai systemd-timesyncd.

NTP, Chrony un systemd-timesyncd RPM ir pieejami standarta Fedora krātuvēs. Systemd-udev RPM ir kodola notikumu pārvaldnieks, kas Fedora ir instalēts pēc noklusējuma, bet nav obligāts.

JÅ«s varat instalēt visus trÄ«s un pārslēgties starp tiem, taču tas radÄ«s papildu galvassāpes. Tāpēc labāk to nedarÄ«t. MÅ«sdienu Fedora, CentOS un RHEL laidieni ir pārvietoti uz Chrony kā noklusējuma ievieÅ”anu, un tiem ir arÄ« systemd-timesyncd. Es uzskatu, ka Chrony darbojas labi, nodroÅ”ina labāku saskarni nekā NTP pakalpojums, sniedz daudz vairāk informācijas un kontroles, kas noteikti patiks sistēmas administratoriem.

NTP pakalpojumu atspējoÅ”ana

Iespējams, ka jÅ«su resursdatorā jau darbojas NTP pakalpojums. Ja tā, pirms pārslēgÅ”anās uz kaut ko citu, tas ir jāatspējo. Man darbojās Chronyd, tāpēc es izmantoju Ŕādas komandas, lai to apturētu un atspējotu. Palaidiet atbilstoŔās komandas jebkuram NTP dēmonam, kuru izmantojat savā resursdatorā:

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

Pārbaudiet, vai pakalpojums ir apturēts un atspējots:

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

Statusa pārbaude pirms palaiŔanas

Sistēmas pulksteņa sinhronizācijas statuss ļauj noteikt, vai NTP pakalpojums darbojas. Tā kā jÅ«s vēl neesat sācis NTP, komanda timesync-status norāda uz Å”o:

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

TieÅ”ais statusa pieprasÄ«jums sniedz svarÄ«gu informāciju. Piemēram, komanda timedatectl bez argumentiem vai opcijām pēc noklusējuma izpilda statusa apakÅ”komandu:

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

Tas iegÅ«s jÅ«su saimniekdatora vietējo laiku, UTC laiku un RTC laiku. Å ajā gadÄ«jumā sistēmas laiks ir iestatÄ«ts uz Amerikas/Ņujorkas (TZ) laika joslu, RTC ir iestatÄ«ts uz laiku vietējā laika joslā, un NTP pakalpojums nav aktÄ«vs. RTC laiks ir sācis nedaudz atŔķirties no sistēmas laika. Tas ir normāli sistēmām, kuru pulksteņi nav sinhronizēti. NobÄ«des apjoms resursdatorā ir atkarÄ«gs no laika, kas pagājis kopÅ” sistēmas pēdējās sinhronizācijas.

Saņēmām arÄ« brÄ«dinājumu par vietējā laika izmantoÅ”anu RTC ā€” tas attiecas uz laika joslu izmaiņām un DST iestatÄ«jumiem. Ja dators tiek izslēgts, kad jāveic izmaiņas, RTC nemainÄ«sies. Bet serveriem vai citiem resursdatoriem, kas darbojas visu diennakti, tā nav problēma. Turklāt jebkurÅ” pakalpojums, kas nodroÅ”ina NTP laika sinhronizāciju, pielāgos resursdatora laiku sākotnējās palaiÅ”anas fāzē, tāpēc laiks atkal bÅ«s pareizs pēc palaiÅ”anas pabeigÅ”anas.

Laika joslas iestatīŔana

Parasti jÅ«s norādāt laika joslu instalÄ“Å”anas procedÅ«ras laikā, un jums nav uzdevums to vēlāk mainÄ«t. Tomēr ir gadÄ«jumi, kad ir jāmaina laika josla. Ir vairāki rÄ«ki, kas var palÄ«dzēt. Linux izmanto laika joslu failus, lai noteiktu resursdatora vietējo laika joslu. Å ie faili atrodas direktorijā /usr/share/zoneinfo. Pēc noklusējuma manai laika joslai sistēma nosaka Å”o: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Bet, lai mainÄ«tu laika joslu, jums nav jāzina Ŕādas smalkumus.

Galvenais ir zināt savas atraÅ”anās vietas oficiālo laika joslas nosaukumu un atbilstoÅ”o komandu. Pieņemsim, ka vēlaties mainÄ«t laika joslu uz Losandželosu:


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

Tagad jūs varat iestatīt laika joslu. Es izmantoju komandu date, lai pārbaudītu izmaiņas, taču varat arī izmantot 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 ~]#

Tagad varat mainīt saimniekdatora laika joslu atpakaļ uz vietējo laiku.

systemd-timesyncd

Systemd timeync dēmons nodroÅ”ina NTP ievieÅ”anu, ko ir viegli pārvaldÄ«t systemd kontekstā. Tas pēc noklusējuma ir instalēts Fedora un Ubuntu. Tomēr tas sākas tikai pēc noklusējuma Ubuntu. Es neesmu pārliecināts par citiem izplatÄ«jumiem. JÅ«s varat pārbaudÄ«t pats:

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

Systemd-timesyncd konfigurēŔana

Systemd-timesyncd konfigurācijas fails ir /etc/systemd/timesyncd.conf. Å is ir vienkārÅ”s fails ar iespējotu mazāk opciju nekā vecajos NTP un chronyd pakalpojumos. Å eit ir Ŕī faila saturs (bez turpmākām izmaiņām) manā 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

Vienīgā sadaļa, kas tajā ir, bez komentāriem, ir [Laiks]. Visas pārējās rindas tiek komentētas. Šīs ir noklusējuma vērtības, un tās nevajadzētu mainīt (ja vien jums nav iemesla to darīt). Ja rindā NTP= nav definēts NTP laika serveris, Fedora pēc noklusējuma izmanto rezerves Fedora laika serveri. Es parasti pievienoju savu laika serveri:

NTP=myntpserver

Notiek laika sinhronizācija

Varat startēt un aktivizēt systemd-timesyncd Ŕādi:

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

AparatÅ«ras pulksteņa iestatÄ«Å”ana

LÅ«k, kāda situācija izskatās pēc timesyncd palaiÅ”anas:

[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    

Sākotnēji starpība starp RTC un vietējo laiku (EDT) ir mazāka par sekundi, un nākamo dienu laikā neatbilstība palielinās vēl par pāris sekundēm. Tā kā RTC nav laika joslu koncepcijas, komandai timedatectl ir jāveic salīdzinājums, lai noteiktu pareizo laika joslu. Ja RTC laiks precīzi neatbilst vietējam laikam, tad tas neatbilst arī vietējai laika joslai.

Meklējot vairāk informācijas, es pārbaudÄ«ju systemd-timesync statusu un atradu Å”o:

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

Ievērojiet žurnāla ziņojumu, kurā teikts, ka sistēmas laiks nav iestatīts vai ir atiestatīts. Timesync pakalpojums iestata sistēmas laiku, pamatojoties uz laikspiedolu. Laikspiedolus uztur laika sinhronizācijas dēmons, un tie tiek izveidoti katrā veiksmīgā sinhronizācijā.

Komanda timedatectl nevar ņemt aparatÅ«ras pulksteņa vērtÄ«bu no sistēmas pulksteņa. Tas var iestatÄ«t laiku un datumu tikai no komandrindā ievadÄ«tās vērtÄ«bas. Varat iestatÄ«t RTC uz tādu paÅ”u vērtÄ«bu kā sistēmas laiks, izmantojot komandu 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

Opcija --localtime norāda, ka aparatūras pulkstenis rāda vietējo laiku, nevis UTC laiku.

Kāpēc vispār ir vajadzīgs RTC?

Jebkura NTP ievieÅ”ana iestatÄ«s sistēmas pulksteni startÄ“Å”anas laikā. Un kāpēc tad RTC? Tā nav pilnÄ«gi taisnÄ«ba: tas notiks tikai tad, ja jums ir tÄ«kla savienojums ar laika serveri. Tomēr daudzām sistēmām ne vienmēr ir piekļuve tÄ«kla savienojumam, tāpēc Linux ir noderÄ«gs aparatÅ«ras pulkstenis, ko izmantot sistēmas laika iestatÄ«Å”anai. Tas ir labāk nekā manuāli iestatÄ«t laiku, lai gan tas var atŔķirties no reāllaika.

Secinājums

Å ajā rakstā ir apskatÄ«ti daži rÄ«ki datuma, laika un laika joslu manipulÄ“Å”anai. Systemd-timesyncd rÄ«ks nodroÅ”ina NTP klientu, kas var sinhronizēt laiku vietējā resursdatorā ar NTP serveri. Tomēr systemd-timesyncd nenodroÅ”ina servera pakalpojumu, tāpēc, ja jÅ«su tÄ«klā ir nepiecieÅ”ams NTP serveris, jums ir jāizmanto kaut kas cits, piemēram, Chrony, lai darbotos kā serveris.

Es dodu priekÅ”roku vienam pakalpojumam savā tÄ«klā, tāpēc izmantoju Chrony. Ja jums nav nepiecieÅ”ams vietējais NTP serveris vai jÅ«s neiebilstat par Chrony izmantoÅ”anu kā serveri un systemd-timesyncd kā SNTP klientu. Galu galā nav nepiecieÅ”ams izmantot Chrony papildu funkcijas kā klientam, ja esat apmierināts ar systemd-timesyncd funkcionalitāti.

Vēl viena piezīme: lai ieviestu NTP, jums nav jāizmanto sistēmas rīki. Varat izmantot vecāku ntpd, Chrony vai citu NTP versiju. Galu galā systemd sastāv no daudziem pakalpojumiem; daudzi no tiem nav obligāti, tāpēc varat tos izslēgt un tā vietā izmantot kaut ko citu. Tas nav milzīgs monolīts briesmonis. Jums var nepatikt sistēma vai tās daļas, taču jums vajadzētu pieņemt apzinātu lēmumu.

Man patīk systemd NTP ievieŔana, bet es dodu priekŔroku Chrony, jo tā labāk atbilst manām vajadzībām. Tas ir Linux, mazulīt -)

Par reklāmas tiesībām

VDSina piedāvā serveri jebkuram uzdevumam, milzÄ«ga operētājsistēmu izvēle automātiskai instalÄ“Å”anai, ir iespējams instalēt jebkuru OS no savas ISO, ērts vadÄ«bas paneli paÅ”a attÄ«stÄ«ba un ikdienas maksājums. Atgādiniet, ka mums ir mūžīgie serveri, kas noteikti ir mūžīgi šŸ˜‰

Linux laika sinhronizācija: NTP, Chrony un systemd-timesyncd

Avots: www.habr.com

Pievieno komentāru