Tidsynkronisering i Linux: NTP, Chrony och systemd-timesyncd

Tidsynkronisering i Linux: NTP, Chrony och systemd-timesyncd
De flesta mÀnniskor hÄller koll pÄ tiden. Vi gÄr upp i tid för att utföra vÄra morgonritualer och Äka till jobbet, ta lunchpauser, hÄlla deadlines för projekt, fira födelsedagar och helgdagar, gÄ ombord pÄ flygplan och sÄ vidare.

Dessutom Àr vissa av oss besatta av tid. Min klocka drivs av solenergi och fÄr exakt tid frÄn National Institute of Standards and Technology (NIST) i Fort Collins, Colorado, via en lÄngvÄgig radiostation WWVB. Tidsignalerna synkroniseras med atomur som ocksÄ ligger i Fort Collins. Min Fitbit synkroniseras med min telefon, som synkroniseras med servern NTP, som slutligen synkroniseras med atomur.

Enheter hÄller ocksÄ koll pÄ tiden.

Det finns mÄnga anledningar till att vÄra enheter och datorer behöver exakt tid. Till exempel, inom banksektorn, aktiemarknader och andra finansiella företag mÄste transaktioner utföras i rÀtt ordning, och det Àr kritiskt viktigt med exakt tidsordning.

VÄra telefoner, surfplattor, bilar, GPS-system och datorer krÀver korrekt tid och datum. Jag vill att klockan pÄ min datorskÀrm ska visa rÀtt tid. Jag vill att mina pÄminnelser i min lokala kalender ska dyka upp vid rÀtt tidpunkt. RÀtt tid garanterar ocksÄ att cron-jobb och systemd körs vid rÀtt tid.

Datum och tid Àr ocksÄ viktiga för loggning, sÄ det blir enklare att hitta vissa loggar baserat pÄ datum och tid. Till exempel, en gÄng arbetade jag inom DevOps (Àven om det inte kallades sÄ dÄ) och arbetade med att konfigurera ett e-postsystem i North Carolina. Tidigare hanterade vi mer Àn 20 miljoner e-postmeddelanden per dag. Att spÄra e-post genom en serie servrar eller att faststÀlla exakt sekvens av hÀndelser med hjÀlp av loggfiler pÄ geografiskt spridda vÀrdar kan vara mycket enklare om de berörda datorerna Àr synkroniserade i tid.

Tid Ă€r en sak – klockor mĂ„nga.

Linux-vĂ€rdar mĂ„ste ta hĂ€nsyn till att det finns systemtid och RTC-tid. RTC (Real Time Clock – klocka för realtidsvisning) Ă€r ett lite bisarrt och inte sĂ€rskilt exakt namn för hĂ„rdvaru-klockor.

HÄrdvaruuret fungerar kontinuerligt, Àven nÀr datorn Àr avstÀngd, genom att anvÀnda batteriet pÄ moderkortet. Huvudfunktionen för RTC Àr att spara tiden nÀr anslutningen till tidservern inte Àr tillgÀnglig. under sÄdana tider, nÀr det inte gick att koppla upp sig mot tidservern via internet, mÄste varje dator ha en exakt intern klocka. Operativsystemen mÄste frÄga RTC vid uppstart, och anvÀndaren mÄste manuellt stÀlla in systemtiden genom att anvÀnda BIOS-konfigurationsgrÀnssnittet för att sÀkerstÀlla att den Àr korrekt.

HÄrdvaruuret förstÄr inte konceptet med tidszoner; RTC lagrar bara tiden, inte tidszon eller förskjutning frÄn UTC (Koordinerad universell tid, som ocksÄ Àr kÀnd som GMT eller Greenwich Mean Time). Du kan stÀlla in RTC med hjÀlp av ett verktyg som jag kommer att berÀtta om senare i denna artikel.

Systemtiden Àr den tid som operativsystemet visar pÄ GUI-klockan pÄ din skrivbord, i utdata frÄn kommandot date, i tidsstÀmplarna i loggar. Detta hÀnvisar ocksÄ till tiden för skapande, Àndring och öppning av filer.

PÄ sidan man för rtc finns en fullstÀndig beskrivning av RTC och systemklockor.

Vad sÀgs om NTP?

Datorer över hela vÀrlden anvÀnder NTP (Network Time Protocol) för att synkronisera sin tid med standardreferensur genom internet via en hierarki av NTP-servrar. Huvudtidservrarna Àr pÄ nivÄ 1 och Àr direkt kopplade till olika nationella tidstjÀnster pÄ nivÄ 0 via satellit, radio eller till och med modemen över telefonlinjer. TjÀnster pÄ nivÄ 0 kan vara atomur, en radiomottagare som Àr instÀlld pÄ signaler som sÀnds av atomur, eller en GPS-mottagare som anvÀnder högprecisionssignaler frÄn satelliter.

PÄ de flesta referensservrar Àr det öppet flera tusen offentliga NTP-servrar av stratum 2 som Àr tillgÀngliga för alla. MÄnga organisationer och anvÀndare (inklusive mig) med ett stort antal vÀrdar som behöver en NTP-server föredrar att stÀlla in sina egna tidservrar, sÄ att endast en lokal vÀrd kontaktar stratum 2 eller 3. DÀrefter konfigurerar de övriga noderna i nÀtverket för att anvÀnda den lokala tidservern. I mitt hemmanÀtverk Àr detta en server av nivÄ 3.

Olika implementationer av NTP

Den ursprungliga implementationen av NTP Àr ntpd. Sedan tillkom tvÄ nyare varianter, chronyd och systemd-timesyncd. Alla tre synkroniserar den lokala vÀrdens tid med NTP-tidservern. TjÀnsten systemd-timesyncd Àr inte lika pÄlitlig som chronyd, men den Àr tillrÀcklig för de flesta syften. Om RTC inte Àr synkroniserad kan den gradvis justera systemtiden för att synkroniseras med NTP-servern nÀr den lokala systemtiden avviker nÄgot. TjÀnsten systemd-timesync kan inte anvÀndas som tidserver.

Chrony Àr en implementation av NTP som innehÄller tvÄ program: demon chronyd och ett kommandoradsgrÀnssnitt kallat chronyc. Chrony har vissa funktioner som i mÄnga fall Àr helt oumbÀrliga:

  • Chrony kan synkronisera med tidservern mycket snabbare Ă€n den gamla tjĂ€nsten ntpd. Detta Ă€r bra för bĂ€rbara datorer eller stationĂ€ra datorer som inte Ă€r pĂ„slagna konstant.
  • Den kan kompensera för frekvenssvĂ€ngningar, till exempel nĂ€r en vĂ€rd gĂ„r i vilolĂ€ge eller somnar, eller nĂ€r klockfrekvensen Ă€ndras pĂ„ grund av plötsliga förĂ€ndringar i frekvensen som sĂ€nker klockorna under lĂ„g belastning.
  • Den löser tidsproblem relaterade till instabilt nĂ€tverksanslutning eller nĂ€tverksbelastning.
  • Den justerar fördröjningar i nĂ€tverket.
  • Efter initial tidsynkronisering stoppar Chrony aldrig klockorna. Detta ger stabila och konsekventa tidsintervall för mĂ„nga systemtjĂ€nster och applikationer.
  • Chrony kan fungera Ă€ven utan nĂ€tverksanslutning. I sĂ„ fall kan den lokala vĂ€rden eller servern uppdateras manuellt.
  • Chrony kan fungera som NTP-server.

Återigen: NTP Ă€r en protokoll som kan implementeras pĂ„ en Linux-vĂ€rd med hjĂ€lp av Chrony eller systemd-timesyncd.

RPM-paketen NTP, Chrony och systemd-timesyncd finns i standardförrÄden för Fedora. RPM systemd-udev Àr en kÀrneventhanterare som Àr förinstallerad i Fedora men inte obligatorisk att anvÀnda.

Du kan installera alla tre och vÀxla mellan dem, men det kommer att skapa onödiga problem. SÄ det Àr bÀttre att inte göra det. Moderna versioner av Fedora, CentOS och RHEL har gÄtt över till Chrony som standardimplementering, och dessutom har de systemd-timesyncd. Jag anser att Chrony fungerar bra, ger ett bÀttre grÀnssnitt Àn NTP-tjÀnsten, tillhandahÄller mycket mer information och ökar kontrollen, vilket utan tvekan uppskattas av systemadministratörer.

Avaktivera NTP-tjÀnster

Det kan hÀnda att NTP-tjÀnsten redan körs pÄ din vÀrd. Om sÄ Àr fallet mÄste du stÀnga av den innan du vÀxlar till nÄgot annat. Jag hade chronyd igÄng, sÄ jag anvÀnde följande kommandon för att stoppa och avaktivera den. Kör motsvarande kommandon för vilken NTP-demon som helst som du anvÀnder pÄ din vÀrd:

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

Kontrollera att tjÀnsten Àr stoppad och avaktiverad:

[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP klients/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 ~]#

Kontrollera status innan du startar

Status för systemklocksynkronisering visar om NTP-tjÀnsten Àr igÄng. Eftersom du Ànnu inte har startat NTP kommer kommandot timesync-status att antyda detta:

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

En direkt statusförfrÄgan ger viktig information. Till exempel, kommandot timedatectl utan argument eller parametrar utför underkommandot status som standard:

[root@testvm1 ~]# timedatectl status
           Lokaltid: Fre 2020-05-15 08:43:10 EDT  
           Universal tid: Fre 2020-05-15 12:43:10 UTC  
                 RTC tid: Fre 2020-05-15 08:43:08      
                Tidszon: America/New_York (EDT, -0400)
Systemklockan synkroniserad: nej                          
              NTP-tjÀnst: inaktiv                    
          RTC i lokal TZ: ja                    

Varning: Systemet Àr konfigurerat för att lÀsa RTC-tiden i den lokala tidszonen.
         Detta lÀge kan inte fullt ut stödjas. Det kommer att skapa olika problem
         med förÀndringar av tidszoner och justeringar för sommartid. RTC
         tiden uppdateras aldrig, den Àr beroende av externa faciliteter för att underhÄllas.
         Om möjligt, anvÀnd RTC i UTC genom att anropa
         'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#

SÄ hÀr fÄr du lokal tid för din vÀrd, UTC-tid och RTC-tid. I det hÀr fallet Àr systemtiden instÀlld pÄ tidszonen America/New_York (TZ), RTC Àr instÀlld pÄ tiden i den lokala tidszonen och NTP-tjÀnsten Àr inaktiv. RTC-tiden börjar avvika nÄgot frÄn systemtiden. Detta Àr normalt för system vars klockor inte har synkroniserats. MÀngden avvikelse pÄ vÀrden beror pÄ tiden som förflutit sedan den senaste systemsynkroniseringen.

Vi fick ocksĂ„ en varning om att anvĂ€nda lokal tid för RTC – detta gĂ€ller tidszonĂ€ndringar och justeringar av sommartid. Om datorn Ă€r avstĂ€ngd nĂ€r Ă€ndringar mĂ„ste göras, kommer RTC-tiden inte att Ă€ndras. Men för servrar eller andra vĂ€rdar som körs dygnet runt Ă€r det överhuvudtaget inget problem. Dessutom kommer varje tjĂ€nst som tillhandahĂ„ller NTP-tidsynkronisering att korrigera vĂ€rdens tid redan i början av sin uppstart, sĂ„ efter att uppstarten Ă€r fĂ€rdig kommer tiden att bli korrekt igen.

InstÀllning av tidszon

Vanligtvis anger du tidszonen under installationsprocessen, och du har ingen uppgift att Àndra den senare. Det finns dock tillfÀllen dÄ det Àr nödvÀndigt att Àndra tidszonen. Det finns flera verktyg som kan hjÀlpa. För att bestÀmma vÀrdens lokala tidszon anvÀnder Linux tidszonsfiler. Dessa filer finns i katalogen /usr/share/zoneinfo. Som standard skriver systemet detta för min tidszon: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Men du behöver inte kÀnna till sÄdana detaljer för att Àndra tidszonen.

Det viktigaste Àr att veta det officiella namnet pÄ tidszonen för din plats och motsvarande kommando. LÄt oss sÀga att du vill Àndra tidszonen till Los Angeles:


[root@testvm2 ~]# timedatectl list-timezones | column

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

Nu kan du stÀlla in tidszonen. Jag anvÀnde kommandot date för att kontrollera förÀndringarna, men du kan ocksÄ anvÀnda 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 ~]#

Du kan nu Äterigen Àndra din vÀrd tidszon till lokal tid.

systemd-timesyncd

Demonen systemd timesync tillhandahÄller en NTP-implementation som Àr lÀtt att hantera inom systemd. Den installeras som standard i Fedora och Ubuntu. Men den körs som standard endast i Ubuntu. Jag Àr osÀker pÄ andra distributioner. Du kan kontrollera sjÀlv:

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

Konfigurering av systemd-timesyncd

Konfigurationsfilen för systemd-timesyncd Àr /etc/systemd/timesyncd.conf. Det Àr en enkel fil med fÀrre aktiverade alternativ Àn Àldre NTP- och chronyd-tjÀnster. HÀr Àr innehÄllet i denna fil (utan ytterligare Àndringar) pÄ min virtuella maskin med Fedora:

#  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

Den enda sektionen som den innehÄller, förutom kommentarer, Àr [Time]. Alla andra rader Àr kommenterade. Dessa Àr standardvÀrden, och de behöver inte Àndras (om du inte har anledning att göra det). Om du inte har nÄgon NTP-tidserver angiven i raden NTP =, anvÀnds standard NTP-tidserver frÄn Fedora. Jag brukar lÀgga till min tidserver:

NTP=myntpserver

Starta timesync

Du kan aktivera och starta systemd-timesyncd sÄ hÀr:

[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Skapade symlink /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd-timesyncd.service.
Skapade 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 ~]#

InstÀllning av hÄrdvaru klocka

SÄ hÀr ser situationen ut efter att timesyncd har startat:

[root@testvm2 systemd]# timedatectl
               Lokal tid: Lör 2020-05-16 14:34:54 EDT  
           Universell tid: Lör 2020-05-16 18:34:54 UTC  
                 RTC tid: Lör 2020-05-16 14:34:53      
                Tidszon: America/New_York (EDT, -0400)
Systemklocka synkroniserad: ja                          
              NTP-tjÀnst: aktiv                      
          RTC i lokal TZ: nej    

Initialt Àr skillnaden mellan RTC och lokal tid (EDT) högst en sekund, och avvikelsen ökar ytterligare med ett par sekunder under de följande dagarna. Eftersom RTC inte har nÄgot koncept för tidszoner mÄste kommandot timedatectl utföra en jÀmförelse för att bestÀmma rÀtt tidszon. Om tiden för RTC inte stÀmmer exakt med lokal tid innebÀr det att den inte stÀmmer med den lokala tidszonen.

I jakten pÄ mer information kontrollerade jag statusen för systemd-timesync och upptÀckte följande:

[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - NĂ€tverkstidsynkronisering
     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]#

Observera loggmeddelandet som sÀger att systemtiden inte Àr instÀlld eller har ÄterstÀllts. TjÀnsten Timesync stÀller in systemtiden baserat pÄ tidsstÀmpeln. TidsstÀmplarna upprÀtthÄlls av timesync-demonen och skapas vid varje framgÄngsrik synkronisering.

Kommandot timedatectl har inte möjlighet att hÀmta vÀrdet frÄn hÄrdvaruklockan frÄn systemklockan. Det kan endast stÀlla in tid och datum baserat pÄ det vÀrde som anges i kommandoraden. Du kan stÀlla in RTC till samma vÀrde som systemtiden med kommandot 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

Alternativet —localtime innebĂ€r att hĂ„rdvaruklockan visar lokal tid och inte UTC.

Varför behöver du ens RTC?

Varje NTP-implementation stÀller systemtiden vid uppstart. SÄ varför behöver vi dÄ RTC? Det Àr inte helt sant: detta kommer bara att hÀnda om du har en nÀtverksanslutning till en tidserver. MÄnga system har dock inte konstant tillgÄng till en nÀtverksanslutning, sÄ hÄrdvaruuret Àr anvÀndbara för att Linux ska kunna stÀlla in systemtiden baserat pÄ dem. Det Àr bÀttre Àn att stÀlla in tiden manuellt, Àven om den kan avvika frÄn den verkliga tiden.

Slutsats

I den hĂ€r artikeln diskuteras nĂ„gra verktyg för att hantera datum, tid och tidszoner. Verktyget systemd-timesyncd tillhandahĂ„ller en NTP-klient som kan synkronisera tiden pĂ„ den lokala vĂ€rden med en NTP-server. Men systemd-timesyncd erbjuder ingen servertjĂ€nst, sĂ„ om du behöver en NTP-server i ditt nĂ€tverk mĂ„ste du anvĂ€nda nĂ„got annat – till exempel Chrony, för att fungera som server.

Jag föredrar att ha en enda implementation för alla tjÀnster i mitt nÀtverk, sÄ jag anvÀnder Chrony. Om du inte behöver en lokal NTP-server eller om du inte har nÄgot emot att anvÀnda Chrony som server och systemd-timesyncd som SNTP-klient. Det finns ingen anledning att anvÀnda Chronys extra funktioner som klient om du Àr nöjd med funktionaliteten hos systemd-timesyncd.

En annan anmÀrkning: du Àr inte skyldig att anvÀnda systemd-verktyg för att implementera NTP. Du kan anvÀnda en gammal version av ntpd, Chrony eller en annan NTP-implementation. Systemd bestÄr av ett stort antal tjÀnster; mÄnga av dem Àr valfria, sÄ de kan stÀngas av och ersÀttas med nÄgot annat. Det Àr inte en enorm monolitisk monster. Du behöver inte gilla systemd eller dess delar, men du mÄste fatta ett vÀlgrundat beslut.

Jag gillar NTP-implementationen i systemd, men jag föredrar Chrony eftersom det bÀttre uppfyller mina behov. Det hÀr Àr Linux, baby -)

I reklamens namn

VDSina erbjuder servrar för alla Ă€ndamĂ„l, stort urval av operativsystem för automatisk installation, det finns möjlighet att installera valfritt OS frĂ„n egen ISO, bekvĂ€m kontrollpanel egend utveckling och daglig betalning. LĂ„t oss pĂ„minna om att vi har eviga servrar, som verkligen Ă€r opĂ„verkbara av tiden 😉

Tidsynkronisering i Linux: NTP, Chrony och systemd-timesyncd

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster