Időszinkronizálás Linuxban: NTP, Chrony és systemd-timesyncd

Időszinkronizálás Linuxban: NTP, Chrony és systemd-timesyncd
A legtöbb ember figyelemmel kíséri az időt. Időben kelünk, hogy végrehajtsuk reggeli rituálénkat, munkába álljunk, ebédszünetet tartsunk, betartsuk a projekthatáridőket, ünnepeljük a születésnapokat és az ünnepeket, repülőre üljünk, és így tovább.

Sőt, némelyikünk a időhöz való viszonyulásával megszállottá válik. Az órám napenergiával működik, és a pontos időt a Nemzeti Szabványügyi és Technológiai Intézettől (NIST) Fort Collinsból (Colorado állam) kapja egy hosszúhullámú rádióállomáson keresztül. WWVBAz időjelek atomórákhoz szinkronizálódnak, amelyek szintén Fort Collinsban találhatóak. A Fitbit-em szinkronizálódik a telefonommal, amely szintén szinkronizálódik a szerverrel NTP, amely végül az atomórákkal szinkronizálódik.

Az eszközök is figyelemmel kísérik az időt.

Számos ok van arra, hogy az eszközeinknek és számítógépjeinknek pontos időre van szükségük. Például a banki szektorban, a tőzsdéken és más pénzügyi vállalkozásoknál a tranzakciókat megfelelő sorrendben kell végrehajtani, és ehhez kritikus fontosságú a pontos időbeli sorrend.

A telefonjainknak, tableteinknek, autóknak, GPS rendszereknek és számítógépeinknek is pontos idő és dátum beállításra van szüksége. Szeretném, ha a számítógépem asztalán lévő óra a helyes időt mutatná. Szeretném, ha a helyi naptáramban a feljegyzések a megfelelő időben jelenhetnének meg. A pontos idő biztosítja azt is, hogy a cron feladatok és a systemd a megfelelő időben induljanak el.

A dátum és az idő a naplózás szempontjából is fontos, így egyszerűbb megtalálni az egyes naplókat a dátum és idő alapján. Például egyszer DevOps-ban dolgoztam (akkoriban még nem így neveztük), és egy levélkezelő rendszert állítottam be Észak-Karolinában. Akkoriban napi több mint 20 millió levelet kezeltünk. Az elektronikus levelek nyomon követése több szerver segítségével vagy az események pontos sorrendjének meghatározása naplófájlok alapján földrajzilag elosztott hosztokon sokkal egyszerűbb lehet, ha az adott számítógépek időben szinkronizálva vannak.

Az idő egy, de az órák sokfélék.

A Linux hosztoknak figyelembe kell venniük, hogy létezik rendszeridő és RTC idő. Az RTC (Real Time Clock — valós idejű óra) egy kissé furcsa és nem túl pontos elnevezése a hardveróráknak.

A hardverórák folyamatosan működnek, még akkor is, ha a számítógép ki van kapcsolva, használva az alaplapon található akkumulátort. Az RTC fő funkciója az idő tárolása, amikor a pontos időhálózathoz való csatlakozás nem elérhető. Abban az időszakban, amikor nem volt lehetőség csatlakozni az időszolgáltató szerverhez az interneten, minden számítógépnek pontos belső órákkal kellett rendelkeznie. Az operációs rendszereknek az indítás során kellett hivatkozniuk az RTC-re, és a felhasználónak manuálisan kellett beállítania a rendszeridőt a BIOS konfigurációs hardveres interfésze segítségével, hogy biztos legyen abban, hogy helyes.

A hardverórák nem értik a időzónák fogalmát; az RTC csak az időt tárolja, nem az időzónát vagy az UTC-től (Koordinált Világszintű Idő, amely szintén ismert GMT-ként vagy GMT mint Greenwich-i Idő) való eltérést. Az RTC-t egy eszközzel állíthatja be, amelyről később fogok beszélni ebben a cikkben.

A rendszer idő az az idő, amelyet az operációs rendszer megjelenít a GUI óráján az asztalon, a date parancs kimenetében, a naplóbejegyzések időbélyegeiben. Ez vonatkozik a fájlok létrehozásának, módosításának és megnyitásának idejére is.

Az alkalmazott adatokkal — man rtc teljes leírás található az RTC-ről és a rendszerről.

Mi van az NTP-vel?

A számítógépek világszerte az NTP-t (Network Time Protocol - hálózati időprotokoll) használják az idő szinkronizálására a standard referenciaórákkal az interneten keresztül NTP szerverek hierarchiája segítségével. Az első szintű időszolgáltatók közvetlenül csatlakoznak a különböző nemzeti időszolgáltatókhoz a nulladik szinten, amelyet műholdas, rádiós vagy akár telefonvonalakon keresztül használnak. A nulladik szintű időszolgáltatók lehetnek atomórák, rádióvevők, amelyek atomórák által sugallt jelekre hangolódnak, vagy GPS-vevők, amelyek pontos időjelek továbbítására használnak GPS műholdakat.

A legtöbb referencia szerveren több ezer nyilvános NTP stratum 2 szerver érhető el, amelyek mindenki számára hozzáférhetők. Sok szervezet és felhasználó (beleértve engem is), akiknek sok hosztjuk van, amely NTP-szerverre van szüksége, inkább saját időszolgáltatót telepít, így csak egy helyi hoszt hivatkozik a stratum 2 vagy 3-ra. Ezután a hálózat többi csomópontját a helyi időszolgáltató használatára állítják be. Az otthoni hálózatom esetében ez egy 3. szintű szerver.

Különböző NTP megvalósítások

Az eredeti NTP megvalósítás az ntpd. Ezt két újabb, a chronyd és a systemd-timesyncd követte. Mindhárom a helyi hoszt idejét szinkronizálja az NTP időszolgáltatóval. A systemd-timesyncd szolgáltatás nem olyan megbízható, mint a chronyd, de a legtöbb célra elegendő. Ha a RTC nincs szinkronizálva, fokozatosan képes korrigálni a rendszeridőt, hogy szinkronizálódjon az NTP szerverrel, amikor a helyi rendszeridő kissé eltér. A systemd-timesync nem használható időszolgáltatóként.

Chrony — ez egy NTP megvalósítás, amely két programot tartalmaz: a chronyd démon és egy parancssori felület, amelyet chronyc-nek hívnak. A Chrony rendelkezik néhány olyan funkcióval, amelyek sok esetben egyszerűen pótolhatatlanok:

  • A Chrony sokkal gyorsabban képes szinkronizálódni az időszolgáltatóval, mint a régi ntpd szolgáltatás. Ez jónak számít laptopok vagy asztali számítógépek esetében, amelyek nem működnek folyamatosan.
  • Képes kompenzálni az óra frekvenciáinak ingadozását, például akkor, amikor a hoszt alvó üzemmódba vált, vagy amikor a frekvencia változása miatt lényegesen változik a frekvencia alacsony terhelés mellett.
  • Megoldja az idővel kapcsolatos problémákat, amelyek a nem stabil hálózati kapcsolattal vagy a hálózat túlterhelésével vannak összefüggésben.
  • Szabályozza a hálózati késleltetéseket.
  • A kezdeti időszinkronizálás után a Chrony soha nem állítja le az órát. Ez stabil és egységes időintervallumokat biztosít számos rendszer szolgáltatás és alkalmazás számára.
  • A Chrony offline is működhet. Ebben az esetben a helyi hoszt vagy szerver manuálisan frissíthető.
  • A Chrony NTP szerverként is működhet.

Ismét: Az NTP egy protokoll, amely Linux hoston valósítható meg a Chrony vagy a systemd-timesyncd segítségével.

Az NTP, a Chrony és a systemd-timesyncd RPM csomagjai elérhetőek a Fedora alapértelmezett tárolóiban. Az RPM systemd-udev egy kernel eseménykezelő, amely a Fedora alapértelmezés szerint telepítve van, de nem kötelező a használata.

Mindhárom telepíthető, és közöttük válthat, de ez felesleges fejfájást okoz. Ezért jobban tesszük, ha nem így járunk el. A modern Fedora, CentOS és RHEL kiadások a Chronyt választották standard megoldásként, és emellett rendelkeznek systemd-timesyncd-vel is. Úgy vélem, a Chrony jól működik, jobb felületet biztosít, mint az NTP szolgáltatás, sokkal több információt ad, és nagyobb ellenőrzést nyújt, ami minden bizonnyal tetszeni fog a rendszergazdáknak.

NTP szolgáltatások leállítása

Lehet, hogy a hostján már fut egy NTP szolgáltatás. Ha igen, azt ki kell kapcsolnia, mielőtt másra váltana. Nálam a chronyd futott, ezért a következő parancsokat használtam a leállításához és letiltásához. Futtassa a megfelelő parancsokat bármilyen NTP démonhoz, amelyet a hostján használ:

[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Eltávolítva: /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#

Ellenőrizze, hogy a szolgáltatás le van állítva és le van tiltva:

[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP kliens/szerver
     Betöltve: betöltve (/usr/lib/systemd/system/chronyd.service; letiltva; gyártói preset: engedélyezve)
     Aktív: inaktív (halt)
       Dokum: man:chronyd(8)
             man:chrony.conf(5)
[root@testvm1 ~]#

Állapot ellenőrzés indítás előtt

A rendszeridő-szincronizáció állapota megmutatja, hogy fut-e az NTP szolgáltatás. Mivel még nem indította el az NTP-t, a timesync-status parancs erre utalni fog:

[root@testvm1 ~]# timedatectl timesync-status
Szerver lekérdezése nem sikerült: Nem lehetett aktiválni a távoli felet.

A közvetlen állapotlekérdezés fontos információkat ad. Például a timedatectl parancs argumentumok vagy paraméterek nélkül a status alsóparancsot hajtja végre alapértelmezés szerint:

[root@testvm1 ~]# timedatectl status
           Helyi idő: 2020-05-15 08:43:10 EDT  
           Egyetemes idő: 2020-05-15 12:43:10 UTC  
                 RTC idő: 2020-05-15 08:43:08      
                Időzóna: America/New_York (EDT, -0400)
Rendszeróra szinkronizálva: nem                          
              NTP szolgáltatás: inaktív                    
          RTC helyi időzónában: igen                    

Figyelmeztetés: A rendszer úgy van konfigurálva, hogy a RTC időt a helyi időzónában olvassa. 
         Ez a mód nem támogatható teljes mértékben. Különböző problémákat okozhat
         az időzóna változásaival és a nyári időszámítással kapcsolatos kiigazításokkal. A RTC
         idő soha nem frissül, külső eszközökre támaszkodik a fenntartásához. 
         Ha egyáltalán lehetséges, használjon UTC RTC-t a
         'timedatectl set-local-rtc 0' parancs kiadásával.
[root@testvm1 ~]#

Ezáltal megkapja a gazdagépének helyi idejét, az UTC időt és az RTC időt. Ebben az esetben a rendszeridő az America / New_York (TZ) időzónára van állítva, az RTC a helyi időzónában van beállítva, és az NTP szolgáltatás nincs aktiválva. Az RTC idő fokozatosan eltér a rendszeridőtől. Ez normális a nem szinkronizált rendszerek esetében. Az eltérés mértéke a gazdagépen a rendszer utolsó szinkronizálása óta eltelt időtől függ.

Arra is figyelmeztetést kaptunk, hogy a RTC használja a helyi időt — ez a különböző időzónák változásaira és a nyári időszámítással kapcsolatos beállításokra vonatkozik. Ha a számítógép ki van kapcsolva abban a pillanatban, amikor módosításokat kell végrehajtani, a RTC idő nem változik. De a folyamatosan működő szerverek vagy más gazdagépek esetében ez egyáltalán nem probléma. Ezen kívül bármely NTP időszinkronizáló szolgáltatás a rendszer beindulásakor is korrigálhatja a gazdagép idejét, így a rendszerindítás befejezését követően az idő újra pontos lesz.

Időzóna beállítása

Általában a telepítési eljárás során adja meg az időzónát, és nincs szüksége annak későbbi módosítására. Azonban előfordulhat, hogy módosítania kell az időzónát. Számos eszköz segíthet ebben. A helyi időzóna meghatározására a Linux olyan időzóna fájlokat használ, amelyek a /usr/share/zoneinfokönyvtárban találhatók. Alapértelmezés szerint a rendszer az alábbiakat állítja be az én időzónámra: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. De az időzóna megváltoztatásához nem szükséges tudnia az ilyen részleteket.

A legfontosabb — ismernie kell az időzóna hivatalos nevét a tartózkodási helyének megfelelően és a hozzá tartozó parancsot. Mondjuk, szeretné megváltoztatni az időzónát Los Angelesre:


[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

Most már beállíthatja az időzónát. Az időpontok ellenőrzésére használtam a date parancsot, de használhatja a timedatectl parancsot is:

[root@testvm2 ~]# date
Ked 2020. máj. 19. 16:47:49 EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
Ked 2020. máj. 19. 13:48:23 PDT
[root@testvm2 ~]#

Most ismét megváltoztathatja a gazda időzónáját a helyi időre.

systemd-timesyncd

A systemd timesync démon NTP implementációt biztosít, amelyet könnyen kezelhet a systemd kontextusában. Alapértelmezés szerint telepítve van a Fedora és az Ubuntu rendszerekben. Azonban alapértelmezés szerint csak az Ubuntu alatt indul. A többi disztribúcióval kapcsolatban nem vagyok biztos. Ellenőrizheti saját rendszerén:

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

A systemd-timesyncd konfigurálása

A systemd-timesyncd konfigurációs fájlja a következő: /etc/systemd/timesyncd.conf. Ez egy egyszerű fájl, amely kevesebb választási lehetőséget tartalmaz, mint a régi NTP és chronyd szolgáltatások. Íme ennek a fájlnak a tartalma (további módosítások nélkül) a Fedora virtuális gépemen:

#  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

Az egyetlen szakasz, amit tartalmaz a megjegyzéseken kívül, a [Time]. Az összes többi sor meg van jegyzett. Ezek alapértelmezett értékek, amelyeket nem szükséges megváltoztatni (ha nincs rá ok). Ha nincs NTP idő szerver megadva az NTP = sorban, akkor a Fedora alapértelmezés szerint a Fedora tartalék idő szerverét használja. Általában hozzáadom a saját idő szerveremet:

NTP=myntpserver

A timesync futtatása

A systemd-timesyncd elindításához és aktiválásához a következőket kell tenni:

[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Létrehozva a symlinket: /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd-timesyncd.service.
Létrehozva a symlinket: /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 ~]#

A hardveróra beállítása

Íme, hogyan néz ki a helyzet a timesyncd indítása után:

[root@testvm2 systemd]# timedatectl
               Helyi idő: 2020. máj. 16. 14:34:54 EDT  
           Egyetemes idő: 2020. máj. 16. 18:34:54 UTC  
                 RTC idő: 2020. máj. 16. 14:34:53      
                Időzóna: America/New_York (EDT, -0400)
Rendszeróra szinkronizálva: igen                          
              NTP szolgáltatás: aktív                      
          RTC helyi időzónában: nem    

Kezdetben a RTC és a helyi idő (EDT) közötti eltérés nem haladja meg az egy másodpercet, és az eltérés a következő néhány napban még pár másodpercre nő. Mivel a RTC-nek nincs időzónákról fogalma, a timedatectl parancsnak összehasonlítást kell végeznie, hogy meghatározza a megfelelő időzónát. Ha a RTC ideje pontosan nem felel meg a helyi időnek, akkor az azt jelenti, hogy a helyi időzónának sem felel meg.

További információk keresése közben ellenőriztem a systemd-timesync állapotát, és a következőket találtam:

[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Hálózati időszinkronizáció
     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: "Kezdeti szinkronizáció az időszolgáltatóhoz 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]: Hálózati időszinkronizáció indítása...
May 16 09:57:24 testvm2.both.org systemd-timesyncd[822]: A rendszerórát nem állították be, vagy hátra ugrik, helyreállítva a rögzített időbélyeg alapján: Sat 2020-05-16 13:56:53 EDT
May 16 13:56:53 testvm2.both.org systemd[1]: A hálózati időszinkronizáció elindult.
May 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Kezdeti szinkronizáció az időszolgáltatóhoz 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#

Figyeljen az eseménynapló üzenetére, amely arról szól, hogy a rendszeridő nincs beállítva vagy hátra ugrott. A Timesync szolgáltatás a időbélyeg alapján állítja be a rendszeridőt. Az időbélyegeket a timesync démon támogatja, és minden sikeres szinkronizáláskor létrejönnek.

A timedatectl parancsnak nincs lehetősége a hardveróra értékét a rendszeróra értékéből venni. Csak a parancssorban megadott érték alapján tudja beállítani az időt és a dátumot. A RTC-t a rendszeridő ugyanarra az értékre állíthatja be a hwclock paranccsal:

[root@testvm2 ~]# /sbin/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
               Helyi idő: Mon 2020-05-18 13:56:46 EDT  
           Egyetemleges idő: Mon 2020-05-18 17:56:46 UTC  
                 RTC idő: Mon 2020-05-18 13:56:46      
                Időzóna: America/New_York (EDT, -0400)
A rendszeróra szinkronizálva: igen                          
              NTP szolgáltatás: aktív                      
          RTC a helyi időzónában: igen

A —localtime opció azt jelzi, hogy a hardveróra helyi időt mutat, nem UTC-t.

Miért van szüksége egyáltalán RTC-re?

Bármely NTP-implementáció beállítja a rendszerórát az indítás során. Akkor minek a RTC? Ez nem teljesen így van: ez csak abban az esetben történik, ha van internetkapcsolata az időszolgáltatóval. Azonban sok rendszernek nincs folyamatos internetkapcsolata, így a hardveres órák hasznosak ahhoz, hogy a Linux a későbbiekben a rendszeridőt ezek alapján állítsa be. Ez jobb, mint manuálisan beállítani az időt, még ha az eltér is a valós időtől.

Zárás

Ebben a cikkben néhány eszközt vizsgálunk meg az idő, dátum és időzónák kezelésére. A systemd-timesyncd eszköz egy NTP-klienst biztosít, amely szinkronizálhatja az időt a helyi gépen egy NTP-szerverrel. Azonban a systemd-timesyncd nem biztosít szerverszolgáltatást, tehát ha NTP-szerverre van szükség a hálózatában, akkor valami mást kell használnia — például a Chronyt, hogy szerverként üzemeljen.

Én inkább egyetlen implementációt szeretnék bármely szolgáltatás számára a hálózatomon, ezért a Chronyt használom. Ha nincs szüksége helyi NTP-szerverre, vagy ha nem bánja, hogy a Chronyt használja szerverként, és a systemd-timesyncd-t SNTP-ként. Végül is nincs szükség a Chrony további képességeinek kihasználására klienseként, ha elégedett a systemd-timesyncd funkcióival.

Még egy megjegyzés: nem kötelező a systemd eszközöket használni az NTP implementálásához. Használhat régi verziót, az ntpd-t, a Chronyt, vagy más NTP-implementációt. A systemd sok szolgáltatásból áll; ezek közül sok nem kötelező, ezért kikapcsolhatók, és valami mást is használhatunk helyettük. Ez nem egy hatalmas monolitikus szörnyeteg. Nem muszáj szeretni a systemd-t vagy annak darabjait, de ésszerű döntést kell hoznia.

Tetszik az NTP implementáció a systemd-ben, de a Chronyt részesítem előnyben, mert jobban megfelel az igényeimnek. Ez Linux, baby -)

Hirdetés

A VDSina ajánlja szerverek bármilyen feladatra, hatalmas választék operációs rendszerek automatikus telepítésére, lehetőség van bármilyen OS telepítésére a saját ISO, kényelmes vezérlőpanel fejlesztésünknek megfelelően, és napi díjjal. Ne feledjük, hogy vannak örök érinthetetlen szervereink 😉

Időszinkronizálás Linuxban: NTP, Chrony és systemd-timesyncd

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster