Linux sinhronizacija vremena: NTP, Chrony i systemd-timesyncd

Linux sinhronizacija vremena: NTP, Chrony i systemd-timesyncd
Većina ljudi vodi računa o vremenu. Ustajemo na vrijeme da završimo jutarnje rituale i idemo na posao, uzmemo pauzu za ručak, ispoštujemo rokove projekta, slavimo rođendane i praznike, ukrcamo se u avion itd.

Štaviše: neki od nas su opsjednuti vremenom. Moj sat se napaja solarnom energijom i dobija tačno vreme od Nacionalnog instituta za standarde i tehnologiju (NIST) do Fort Collinsa, Colorado preko dugovalnog radija WWVB. Vremenski signali su sinhronizovani sa atomskim satom, koji se takođe nalazi u Fort Kolinsu. Moj Fitbit se sinhronizuje sa mojim telefonom koji se sinhronizuje sa serverom NTP, koji se na kraju sinhronizuje sa atomskim satom.

Uređaji također prate vrijeme

Mnogo je razloga zašto je našim uređajima i računarima potrebno tačno vrijeme. Na primjer, u bankarstvu, berzama i drugim finansijskim poslovima, transakcije se moraju obavljati po pravilnom redoslijedu, a tačni vremenski slijedovi su kritični za to.

Naši telefoni, tableti, automobili, GPS sistemi i računari zahtijevaju tačna podešavanja vremena i datuma. Želim da sat na radnoj površini mog računara pokazuje tačno vreme. Želim da se podsjetnici pojave u mom lokalnom kalendaru u pravo vrijeme. Tačno vrijeme također osigurava da se poslovi cron i systemd pokreću u tačno vrijeme.

Datum i vrijeme su također važni za evidentiranje, tako da je malo lakše pronaći određene zapise na osnovu datuma i vremena. Na primjer, jednom sam radio u DevOps-u (to se tada nije tako zvao) i postavljao sam sistem e-pošte u državi Sjeverna Karolina. Obrađivali smo preko 20 miliona e-mailova dnevno. Praćenje e-pošte preko niza servera ili određivanje tačnog redosleda događaja pomoću log fajlova na geografski raspoređenim hostovima može biti mnogo lakše ako se odgovarajući računari sinhronizuju na vreme.

Jednom - mnogo sati

Linux domaćini moraju uzeti u obzir da postoji sistemsko vrijeme i RTC vrijeme. RTC (Real Time Clock) je pomalo čudan i ne baš tačan naziv za hardverski sat.

Hardverski sat radi neprekidno čak i kada je računar isključen, koristeći bateriju na matičnoj ploči sistema. Glavna funkcija RTC-a je pohranjivanje vremena kada veza sa serverom vremena nije dostupna. U danima kada je bilo nemoguće povezati se sa serverom vremena preko Interneta, svaki računar je morao imati tačan interni sat. Operativni sistemi su morali da pristupe RTC-u prilikom pokretanja sistema i korisnik je morao ručno da podesi sistemsko vreme koristeći BIOS hardverski konfiguracioni interfejs kako bi se uverio da je ispravno.

Hardverski satovi ne razumiju koncept vremenskih zona; RTC pohranjuje samo vrijeme, a ne vremensku zonu ili pomak od UTC (koordinirano univerzalno vrijeme, također poznato kao GMT ili srednje vrijeme po Griniču). Možete instalirati RTC pomoću alata koji ću obraditi kasnije u ovom članku.

Sistemsko vrijeme je vrijeme koje OS prikazuje na GUI satu na vašoj radnoj površini, u izlazu naredbe date, u vremenskim oznakama dnevnika. Ovo se također odnosi na to kada se fajlovi kreiraju, mijenjaju i otvaraju.

Na stranici covek za rtc postoji potpuni opis RTC-a i sistemskog sata.

Šta je sa NTP-om?

Računari širom sveta koriste NTP (Network Time Protocol) da sinhronizuju svoje vreme sa standardnim referentnim satovima preko Interneta koristeći hijerarhiju NTP servera. Glavni serveri vremena su na nivou 1 i oni su direktno povezani sa različitim nacionalnim vremenskim servisima na nivou 0 preko satelita, radija ili čak modema preko telefonskih linija. Vremenske usluge sloja 0 mogu biti atomski sat, radio prijemnik koji je podešen na signale koje prenose atomski satovi ili GPS prijemnik koji koristi vrlo precizne signale sata koje prenose GPS sateliti.

Velika većina referentnih servera ima nekoliko hiljada javnih NTP stratum 2 servera otvorenih za javnost. Mnoge organizacije i korisnici (uključujući i mene) sa puno domaćina kojima je potreban NTP server biraju da postave svoje vremenske servere tako da samo jedan lokalni host pristupa stratumu 2 ili 3. Zatim konfigurišu preostale čvorove na mreži da koriste lokalne server vremena. U slučaju moje kućne mreže, ovo je server sloja 3.

Razne implementacije NTP-a

Originalna implementacija NTP-a je ntpd. Zatim su mu se pridružila dva novija, chronyd i systemd-timesyncd. Sva tri sinkroniziraju lokalno vrijeme hosta sa NTP serverom vremena. Usluga systemd-timesyncd nije tako pouzdana kao chronyd, ali je dovoljno dobra za većinu namjena. Ako RTC nije sinhronizovan, može postepeno da podešava sistemsko vreme da se sinhronizuje sa NTP serverom kada se lokalno vreme malo pomeri. Usluga systemd-timesync ne može se koristiti kao vremenski server.

Chrony je implementacija NTP-a koja sadrži dva programa: chronyd daemon i interfejs komandne linije koji se zove chronyc. Chrony ima neke karakteristike koje su neophodne u mnogim slučajevima:

  • Chrony može da se sinhronizuje sa serverom vremena mnogo brže od starog ntpd servisa. Ovo je dobro za laptope ili desktop računare koji ne rade stalno.
  • Može kompenzirati fluktuacije sata, kao što je kada host ide u stanje mirovanja ili uđe u stanje mirovanja, ili kada se sat promijeni zbog skakanja frekvencije, što usporava taktove pri niskim opterećenjima.
  • Rješava vremenske probleme vezane za nestabilnu mrežnu vezu ili zagušenje mreže.
  • Reguliše kašnjenja mreže.
  • Nakon početne sinhronizacije vremena, Chrony nikada ne zaustavlja sat. Ovo obezbeđuje stabilne i konzistentne vremenske intervale za mnoge sistemske usluge i aplikacije.
  • Chrony može raditi čak i bez mrežne veze. U ovom slučaju, lokalni host ili server se mogu ažurirati ručno.
  • Chrony može djelovati kao NTP server.

Još jednom, NTP je protokol koji se može implementirati na Linux host koristeći Chrony ili systemd-timesyncd.

NTP, Chrony i systemd-timesyncd RPM-ovi su dostupni u standardnim Fedora repozitorijumima. Systemd-udev RPM je upravitelj događaja kernela koji je instaliran prema zadanim postavkama na Fedora-i, ali nije obavezan.

Možete instalirati sva tri i prebacivati ​​se između njih, ali to će stvoriti dodatnu glavobolju. Zato je bolje ne. Moderna izdanja Fedore, CentOS-a i RHEL-a premještena su na Chrony kao zadanu implementaciju, a također imaju systemd-timesyncd. Smatram da Chrony dobro radi, pruža bolji interfejs od NTP usluge, pruža mnogo više informacija i kontrole, u čemu će administratori sistema sigurno uživati.

Onemogućavanje NTP usluga

NTP usluga je možda već pokrenuta na vašem hostu. Ako je tako, morate ga onemogućiti prije nego što pređete na nešto drugo. Imao sam chronyd pokrenut pa sam koristio sljedeće komande da ga zaustavim i onemogućim. Pokrenite odgovarajuće komande za bilo koji NTP demon koji pokrećete na svom hostu:

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

Provjerite je li usluga zaustavljena i onemogućena:

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

Provjera statusa prije pokretanja

Status sinhronizacije sistemskog sata vam omogućava da utvrdite da li je NTP usluga pokrenuta. Pošto još niste pokrenuli NTP, naredba timesync-status će nagovijestiti ovo:

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

Direktan zahtjev za statusom pruža važne informacije. Na primjer, naredba timedatectl bez argumenata ili opcija po defaultu izvršava podnaredbu statusa:

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

Ovo će vam dati lokalno vrijeme za vašeg domaćina, UTC vrijeme i RTC vrijeme. U ovom slučaju, sistemsko vrijeme je postavljeno na vremensku zonu America/New_York (TZ), RTC je postavljeno na vrijeme u lokalnoj vremenskoj zoni, a NTP usluga nije aktivna. RTC vrijeme je počelo neznatno da odstupa od sistemskog vremena. Ovo je normalno za sisteme čiji satovi nisu sinhronizovani. Količina pomaka na hostu ovisi o vremenu koje je prošlo od posljednjeg sinkroniziranja sistema.

Također smo dobili upozorenje o korištenju lokalnog vremena za RTC - ovo se odnosi na promjene vremenske zone i postavke zimskog vremena. Ako se računar isključi kada je potrebno izvršiti promjene, RTC se neće promijeniti. Ali za servere ili druge hostove koji rade non-stop, to uopće nije problem. Osim toga, bilo koja usluga koja pruža NTP sinhronizaciju vremena će prilagoditi vrijeme hosta tokom početne faze pokretanja, tako da će vrijeme ponovo biti ispravno nakon završetka pokretanja.

Podešavanje vremenske zone

Obično odredite vremensku zonu tokom postupka instalacije i nemate zadatak da je kasnije promijenite. Međutim, postoje trenuci kada trebate promijeniti vremensku zonu. Postoji nekoliko alata koji mogu pomoći. Linux koristi datoteke vremenske zone da odredi lokalnu vremensku zonu hosta. Ove datoteke se nalaze u direktoriju /usr/share/zoneinfo. Podrazumevano, za moju vremensku zonu, sistem propisuje ovo: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Ali ne morate znati takve suptilnosti da biste promijenili vremensku zonu.

Glavna stvar je znati službeni naziv vremenske zone za svoju lokaciju i odgovarajuću naredbu. Recimo da želite promijeniti vremensku zonu u Los Angeles:


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

Sada možete postaviti vremensku zonu. Koristio sam naredbu date da provjerim promjene, ali možete koristiti i 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 ~]#

Sada možete promijeniti vremensku zonu vašeg domaćina natrag na lokalno vrijeme.

systemd-timesyncd

Systemd timesync demon pruža NTP implementaciju kojom je lako upravljati u kontekstu systemd. Podrazumevano je instaliran na Fedora i Ubuntu. Međutim, startuje samo po defaultu na Ubuntu. Nisam siguran za druge distribucije. Možete sami provjeriti:

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

Konfiguriranje systemd-timesyncd

Konfiguracijski fajl za systemd-timesyncd je /etc/systemd/timesyncd.conf. Ovo je jednostavna datoteka s manje omogućenih opcija od starih NTP i chronyd servisa. Evo sadržaja ove datoteke (bez daljih modifikacija) na mom 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

Jedini dio koji sadrži, osim komentara, je [Vrijeme]. Svi ostali redovi su komentarisani. Ovo su zadane vrijednosti i ne treba ih mijenjati (osim ako nemate razloga za to). Ako nemate NTP server vremena definisan u NTP= liniji, Fedora podrazumevano koristi rezervni Fedora vremenski server. Obično dodajem svoj server vremena:

NTP=myntpserver

Running timesync

Možete pokrenuti i aktivirati systemd-timesyncd na sljedeći način:

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

Podešavanje hardverskog sata

Evo kako izgleda situacija nakon pokretanja timesyncd-a:

[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    

U početku je razlika između RTC-a i lokalnog vremena (EDT) manja od jedne sekunde, a razlika se povećava za još nekoliko sekundi u narednih nekoliko dana. Pošto ne postoji koncept vremenskih zona u RTC-u, naredba timedatectl mora izvršiti poređenje kako bi odredila ispravnu vremensku zonu. Ako RTC vrijeme ne odgovara točno lokalnom vremenu, onda se ne podudara ni s lokalnom vremenskom zonom.

Tražeći više informacija, provjerio sam status systemd-timesync i našao ovo:

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

Obratite pažnju na poruku dnevnika koja kaže da sistemsko vrijeme nije postavljeno ili je resetirano. Usluga Timesync postavlja sistemsko vrijeme na osnovu vremenske oznake. Vremenske oznake održava demon timesync i kreiraju se pri svakoj uspješnoj sinhronizaciji.

Komanda timedatectl nema načina da preuzme vrijednost hardverskog sata iz sistemskog sata. Može samo postaviti vrijeme i datum iz vrijednosti unesene u komandnoj liniji. Možete postaviti RTC na istu vrijednost kao i sistemsko vrijeme koristeći naredbu 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 govori hardverskom satu da prikazuje lokalno vrijeme, a ne UTC.

Zašto vam je uopšte potreban RTC?

Svaka implementacija NTP-a će postaviti sistemski sat u vrijeme pokretanja. I zašto onda RTC? Ovo nije sasvim tačno: to će se dogoditi samo ako imate mrežnu vezu sa serverom vremena. Međutim, mnogi sistemi nemaju uvijek pristup mrežnoj vezi, tako da je hardverski sat koristan za Linux za postavljanje sistemskog vremena. Ovo je bolje od ručnog postavljanja vremena, iako može odstupati od stvarnog vremena.

zaključak

Ovaj članak je pregledao neke alate za manipulaciju datumom, vremenom i vremenskim zonama. Systemd-timesyncd alat pruža NTP klijenta koji može sinkronizirati vrijeme na lokalnom hostu sa NTP serverom. Međutim, systemd-timesyncd ne pruža uslugu servera, tako da ako vam je potreban NTP server na vašoj mreži, morate koristiti nešto drugo, kao što je Chrony, da djeluje kao server.

Više volim da imam jednu implementaciju za bilo koju uslugu na mojoj mreži, pa koristim Chrony. Ako vam ne treba lokalni NTP server, ili ako nemate ništa protiv da koristite Chrony kao server i systemd-timesyncd kao SNTP klijent. Na kraju krajeva, nema potrebe da koristite dodatne karakteristike Chrony-ja kao klijenta ako ste zadovoljni funkcionalnosti systemd-timesyncd.

Još jedna napomena: od vas se ne traži da koristite systemd alate za implementaciju NTP-a. Možete koristiti stariju verziju ntpd, Chrony ili neku drugu NTP implementaciju. Na kraju krajeva, systemd se sastoji od velikog broja servisa; mnogi od njih su opcioni, tako da ih možete isključiti i umjesto toga koristiti nešto drugo. Ovo nije veliko monolitno čudovište. Možda vam se ne sviđa systemd ili njegovi dijelovi, ali trebali biste donijeti informiranu odluku.

Sviđa mi se sistemska implementacija NTP-a, ali više volim Chrony jer bolje odgovara mojim potrebama. To je Linux, dušo -)

O pravima reklame

VDSina nudi servere za bilo koji zadatak, veliki izbor operativnih sistema za automatsku instalaciju, moguće je instalirati bilo koji OS sa svoje strane ISO, udobno upravljačka ploča vlastiti razvoj i dnevno plaćanje. Podsjetimo da imamo vječne servere koji su definitivno bezvremenski 😉

Linux sinhronizacija vremena: NTP, Chrony i systemd-timesyncd

izvor: www.habr.com

Dodajte komentar