Linux időszinkronizálás: NTP, Chrony és systemd-timesyncd

Linux időszinkronizálás: NTP, Chrony és systemd-timesyncd
A legtöbb ember követi az időt. Időben felkelünk, hogy elvégezzük reggeli rituáléinkat és munkába induljunk, ebédszünetet tartunk, betartjuk a projektek határidőit, megünnepeljük a születésnapokat és az ünnepeket, repülőre szálljunk stb.

Sőt: néhányunk megszállottja az időnek. Az órám napenergiával működik, és pontos időt kap a National Institute of Standards and Technology-tól (NIST) a Colorado állambeli Fort Collinsba hosszúhullámú rádión keresztül WWVB. Az időjeleket szinkronizálják a szintén Fort Collinsban található atomórával. A Fitbit szinkronizál a telefonommal, amely szinkronizálódik a szerverrel NTP, amely végül szinkronizálódik az atomórával.

A készülékek nyomon követik az időt is

Számos oka lehet annak, hogy eszközeinknek és számítógépeinknek pontos időre van szükségük. Például a bankszektorban, a tőzsdéken és más pénzügyi üzletágakban a tranzakciókat a megfelelő sorrendben kell végrehajtani, és ehhez kritikus a pontos időrend.

Telefonjaink, táblagépeink, autóink, GPS-rendszereink és számítógépeink mindegyike pontos idő- és dátumbeállítást igényel. Azt akarom, hogy a számítógépem asztalán lévő óra a pontos időt mutassa. Azt akarom, hogy az emlékeztetők a megfelelő időben jelenjenek meg a helyi naptáramban. A helyes idő azt is biztosítja, hogy a cron és a systemd jobok a megfelelő időben fussanak.

A dátum és az idő is fontos a naplózáshoz, így egy kicsit könnyebb megtalálni bizonyos naplókat dátum és idő alapján. Például egyszer a DevOps-ban dolgoztam (akkor még nem így hívták), és egy levelezőrendszert állítottam fel Észak-Karolina államban. Naponta több mint 20 millió e-mailt dolgoztunk fel. Az e-mailek nyomon követése szervereken keresztül, vagy az események pontos sorrendjének meghatározása földrajzilag szétszórt gazdagépeken található naplófájlok segítségével sokkal egyszerűbb, ha a megfelelő számítógépeket időben szinkronizálják.

Egyszer - sok óra

A Linux gazdagépeknek figyelembe kell venniük, hogy van rendszeridő és RTC idő. Az RTC (Real Time Clock) egy kissé furcsa és nem túl pontos név egy hardveres óra számára.

A hardveres óra a számítógép kikapcsolt állapotában is folyamatosan működik, a rendszer alaplapján lévő akkumulátor használatával. Az RTC fő funkciója az idő tárolása, amikor nem áll rendelkezésre kapcsolat egy időszerverrel. Azokban az időkben, amikor nem lehetett interneten keresztül csatlakozni egy időkiszolgálóhoz, minden számítógépnek pontos belső órával kellett rendelkeznie. Az operációs rendszereknek a rendszerindításkor hozzá kellett férniük az RTC-hez, a felhasználónak pedig manuálisan kellett beállítania a rendszeridőt a BIOS hardverkonfigurációs felületén, hogy megbizonyosodjon a helyességéről.

A hardveres órák nem értik az időzónák fogalmát; Az RTC csak az időt tárolja, az időzónát vagy az UTC-től (koordinált világidő, más néven GMT vagy Greenwich idő) való eltérést nem. Telepítheti az RTC-t egy olyan eszközzel, amelyre ebben a cikkben később foglalkozom.

A rendszeridő az az idő, amelyet az operációs rendszer megjelenít a grafikus felhasználói felület óráján az asztalon, a dátum parancs kimenetében, a naplók időbélyegeiben. Ez vonatkozik a fájlok létrehozására, módosítására és megnyitására is.

Az oldalon férfi az rtc-ért van egy teljes leírás az RTC-ről és a rendszer órájáról.

Mi a helyzet az NTP-vel?

A számítógépek a világ minden táján NTP-t (Network Time Protocol) használnak, hogy szinkronizálják idejüket szabványos referenciaórákkal az interneten keresztül, az NTP-kiszolgálók hierarchiájával. A fő időszerverek az 1. rétegben találhatók, és a 0. rétegben közvetlenül kapcsolódnak a különböző nemzeti időszolgáltatásokhoz műholdon, rádión vagy akár telefonvonalon keresztül modemeken keresztül. A 0. rétegbeli időszolgáltatások lehetnek atomóra, atomórák által továbbított jelekre hangolt rádióvevő vagy GPS-műholdak által továbbított rendkívül pontos órajeleket használó GPS-vevő.

A referenciaszerverek túlnyomó többsége több ezer nyilvános NTP stratum 2 szerverrel rendelkezik, amelyek nyilvánosak. Sok szervezet és felhasználó (köztük én is), sok gazdagéppel, akiknek NTP-kiszolgálóra van szükségük, úgy döntenek, hogy beállítják saját időszervereiket, így csak egy helyi gazdagép férhet hozzá a 2. vagy 3. réteghez. Ezután beállítják a hálózat többi csomópontját a helyi szerver használatára. időszerver. Az otthoni hálózatom esetében ez egy 3. rétegű szerver.

Az NTP különféle megvalósításai

Az NTP eredeti megvalósítása az ntpd. Ezután két újabb csatlakozott hozzá, a chronyd és a systemd-timesyncd. Mindhárom szinkronizálja a helyi hosztidőt egy NTP időkiszolgálóval. A systemd-timesyncd szolgáltatás nem olyan megbízható, mint a chronyd, de a legtöbb célra elég jó. Ha az RTC nincs szinkronban, fokozatosan módosíthatja a rendszeridőt az NTP-kiszolgálóval való szinkronizáláshoz, amikor a helyi rendszeridő kissé eltolódik. A systemd-timesync szolgáltatás nem használható időkiszolgálóként.

Chrony Az NTP egy implementációja, amely két programot tartalmaz: a chronyd démont és a chronyc nevű parancssori felületet. A Chrony rendelkezik néhány olyan funkcióval, amelyek sok esetben nélkülözhetetlenek:

  • A Chrony sokkal gyorsabban tud szinkronizálni egy időkiszolgálóval, mint a régi ntpd szolgáltatás. Ez jó olyan laptopokhoz vagy asztali számítógépekhez, amelyek nem mindig működnek.
  • Kompenzálhatja az óra ingadozását, például amikor a gazda alvó állapotba megy vagy alvó üzemmódba lép, vagy amikor az óra frekvencia ugrás miatt megváltozik, ami alacsony terhelésnél lelassítja az órákat.
  • Megoldja az instabil hálózati kapcsolattal vagy a hálózati torlódással kapcsolatos időbeli problémákat.
  • Szabályozza a hálózati késéseket.
  • A kezdeti időszinkronizálás után a Chrony soha nem állítja le az órát. Ez stabil és konzisztens időréseket biztosít számos rendszerszolgáltatás és alkalmazás számára.
  • A Chrony hálózati kapcsolat nélkül is működik. Ebben az esetben a helyi gazdagép vagy kiszolgáló manuálisan frissíthető.
  • A Chrony NTP-kiszolgálóként is működhet.

Ismétlem, az NTP egy olyan protokoll, amely Chrony vagy systemd-timesyncd használatával Linux-gazdagépen implementálható.

Az NTP, Chrony és systemd-timesyncd RPM-ek a szabványos Fedora tárolókban érhetők el. A systemd-udev RPM egy kernel eseménykezelő, amely alapértelmezés szerint telepítve van a Fedorán, de nem kötelező.

Mindhármat telepítheti és válthat közöttük, de ez extra fejfájást okoz. Szóval jobb, ha nem. A Fedora, CentOS és RHEL modern kiadásai átkerültek a Chrony-ba, mint alapértelmezett megvalósításba, és ezek is rendelkeznek systemd-timesyncd-vel. Szerintem a Chrony jól működik, jobb felületet biztosít, mint az NTP szolgáltatás, sokkal több információt és vezérlést biztosít, amit a rendszergazdák biztosan élvezni fognak.

Az NTP szolgáltatások letiltása

Lehet, hogy az NTP szolgáltatás már fut a gazdagépen. Ha igen, akkor le kell tiltania, mielőtt valami másra váltana. A chronyd futott, ezért a következő parancsokat használtam a leállításhoz és letiltáshoz. Futtassa a megfelelő parancsokat bármely NTP-démonhoz, amelyet a gazdagépen futtat:

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

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

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

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

A rendszeróra szinkronizálási állapota lehetővé teszi annak meghatározását, hogy az NTP szolgáltatás fut-e. Mivel még nem indította el az NTP-t, a timesync-status parancs erre utal:

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

A közvetlen állapotkérés fontos információkat nyújt. Például a timedatectl parancs argumentum vagy opció nélkül alapértelmezés szerint végrehajtja a status alparancsot:

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

Ez megadja a házigazda helyi idejét, az UTC-időt és az RTC-időt. Ebben az esetben a rendszeridő az Amerika / New_York (TZ) időzónára van állítva, az RTC a helyi időzóna szerint van beállítva, és az NTP szolgáltatás nem aktív. Az RTC idő kezdett kissé eltérni a rendszeridőtől. Ez normális azoknál a rendszereknél, amelyek órái nincsenek szinkronizálva. Az eltolás mértéke a gazdagépen a rendszer utolsó szinkronizálása óta eltelt időtől függ.

Figyelmeztetést kaptunk a helyi idő használatára vonatkozó RTC-re is – ez vonatkozik az időzóna-módosításokra és a nyári időszámítási beállításokra. Ha a számítógépet kikapcsolják, amikor változtatásokat kell végrehajtani, az RTC nem változik. De az éjjel-nappal működő szerverek vagy más gazdagépek esetében ez egyáltalán nem jelent problémát. Ezenkívül minden NTP-idő szinkronizálást biztosító szolgáltatás módosítja a gazdagép idejét a kezdeti indítási szakaszban, így az indítás után az idő ismét helyes lesz.

Az időzóna beállítása

Általában a telepítés során adja meg az időzónát, és nem kell később módosítania. Vannak azonban olyan esetek, amikor módosítani kell az időzónát. Több eszköz is segíthet. A Linux időzóna-fájlokat használ a gazdagép helyi időzónájának meghatározására. Ezek a fájlok a könyvtárban vannak /usr/share/zoneinfo. Alapértelmezés szerint az én időzónámra a rendszer ezt írja elő: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Az időzóna megváltoztatásához azonban nem kell ismernie ezeket a finomságokat.

A legfontosabb dolog az, hogy ismerje a tartózkodási helyének hivatalos időzóna nevét és a megfelelő parancsot. Tegyük fel, hogy az időzónát Los Angelesre szeretné módosítani:


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

Most beállíthatja az időzónát. A dátum parancsot használtam a változások ellenőrzésére, de használhatja a timedatectl-t is:

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

Mostantól visszaállíthatja a házigazdája időzónáját a helyi időre.

systemd-timesyncd

A systemd timesync démon olyan NTP-megvalósítást biztosít, amely könnyen kezelhető a systemd környezetben. Fedora és Ubuntu rendszeren alapértelmezés szerint telepítve van. Alapértelmezés szerint azonban csak Ubuntuban indul el. Nem vagyok biztos a többi disztribúcióban. Ön is ellenőrizheti:

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

A systemd-timesyncd beállítása

A systemd-timesyncd konfigurációs fájlja a következő /etc/systemd/timesyncd.conf. Ez egy egyszerű fájl, amelyben kevesebb opció engedélyezett, 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 VM-emen:

#  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 rész, amelyet a megjegyzéseken kívül tartalmaz, a [Time]. Az összes többi sor megjegyzésre kerül. Ezek az alapértelmezett értékek, és nem szabad megváltoztatni (hacsak nincs rá oka). Ha nincs megadva NTP-időkiszolgáló az NTP= sorban, a Fedora alapértelmezés szerint egy tartalék Fedora időkiszolgálót használ. Általában hozzáadom az időszerveremet:

NTP=myntpserver

Időszinkron fut

A systemd-timesyncd programot a következőképpen indíthatja el és aktiválhatja:

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

A hardveres óra beállítása

Így néz ki a helyzet a timesyncd futtatása után:

[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    

Kezdetben az RTC és a helyi idő (EDT) közötti különbség kevesebb, mint egy másodperc, és az eltérés további néhány másodperccel nő a következő napokban. Mivel az RTC-ben nincs időzónák fogalma, a timedatectl parancsnak összehasonlítást kell végeznie a helyes időzóna meghatározásához. Ha az RTC idő nem egyezik pontosan a helyi idővel, akkor nem egyezik a helyi időzónával sem.

További információkat keresve ellenőriztem a systemd-timesync állapotát, és ezt találtam:

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

Figyelje meg a naplóüzenetet, amely szerint a rendszeridő nincs beállítva, vagy visszaállították. A Timesync szolgáltatás az időbélyeg alapján állítja be a rendszeridőt. Az időbélyegeket az időszinkronizálási démon karbantartja, és minden sikeres szinkronizáláskor létrejön.

A timedatectl parancs nem tudja levenni a hardveróra értékét a rendszer órájából. Csak az időt és a dátumot tudja beállítani a parancssorban megadott értékből. A hwclock paranccsal beállíthatja az RTC-t a rendszeridővel azonos értékre:

[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

A --localtime opció azt mondja a hardver órájának, hogy a helyi időt mutassa, ne az UTC-t.

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

Az NTP bármely implementációja beállítja a rendszer óráját az indításkor. És akkor miért az RTC? Ez nem teljesen igaz: ez csak akkor történik meg, ha van hálózati kapcsolata az időkiszolgálóval. Sok rendszer azonban nem mindig fér hozzá a hálózati kapcsolathoz, ezért a hardveres óra hasznos a Linux számára a rendszeridő beállításához. Ez jobb, mint az idő manuális beállítása, még akkor is, ha az eltérhet a valós időtől.

Következtetés

Ez a cikk áttekint néhány eszközt a dátum, idő és időzónák manipulálására. A systemd-timesyncd eszköz egy NTP-klienst biztosít, amely képes szinkronizálni a helyi gazdagépen lévő időt egy NTP-kiszolgálóval. A systemd-timesyncd azonban nem nyújt szerverszolgáltatást, ezért ha NTP-kiszolgálóra van szüksége a hálózaton, akkor valami mást, például Chronyt kell használnia szerverként.

Jobban szeretem, ha egyetlen implementációt használok a hálózatom bármely szolgáltatásához, ezért a Chronyt használom. Ha nincs szüksége helyi NTP-szerverre, vagy ha nem bánja, hogy a Chrony-t használja szerverként és a systemd-timesyncd-t SNTP-kliensként. Végül is nincs szükség a Chrony további szolgáltatásainak kliensként való használatára, ha elégedett a systemd-timesyncd funkcióival.

Egy másik megjegyzés: nem szükséges a systemd eszközöket használnia az NTP megvalósításához. Használhatja az ntpd, Chrony régebbi verzióját vagy más NTP-megvalósítást. Végül is a systemd számos szolgáltatásból áll; sok közülük nem kötelező, így kikapcsolhatja őket, és helyette mást használhat. Ez nem egy hatalmas monolit szörnyeteg. Lehet, hogy nem szereti a rendszert vagy annak egyes részeit, de tájékozott döntést kell hoznia.

Szeretem a systemd NTP implementációját, de jobban szeretem a Chronyt, mert jobban megfelel az igényeimnek. Ez Linux, bébi :-)

A Reklám Jogairól

VDSina kínál szerverek bármilyen feladathoz, az operációs rendszerek hatalmas választéka az automatikus telepítéshez, lehetőség van bármilyen operációs rendszer telepítésére saját ISO, kényelmes központ saját fejlesztés és napi fizetés. Emlékezzünk vissza, hogy vannak örök szervereink, amelyek határozottan időtlenek 😉

Linux időszinkronizálás: NTP, Chrony és systemd-timesyncd

Forrás: will.com

Hozzászólás