Linux vremenska sinkronizacija: NTP, Chrony i systemd-timesyncd

Linux vremenska sinkronizacija: NTP, Chrony i systemd-timesyncd
Većina ljudi prati vrijeme. Ustajemo na vrijeme kako bismo dovršili svoje jutarnje rituale i otišli na posao, napravili pauzu za ručak, ispoštovali projektne rokove, proslavili rođendane i praznike, ukrcali se na avion i tako dalje.

Štoviše: neki od nas su opsjednuti vremenom. Moj sat se napaja solarnom energijom i dobiva točno vrijeme od Nacionalnog instituta za standarde i tehnologiju (NIST) u Fort Collins, Colorado putem dugovalnog radija Wwvb. Vremenski signali su sinkronizirani s atomskim satom koji se također nalazi u Fort Collinsu. Moj Fitbit se sinkronizira s mojim telefonom koji se sinkronizira s poslužiteljem NTP, koji se na kraju sinkronizira s atomskim satom.

Uređaji također prate vrijeme

Mnogo je razloga zašto naši uređaji i računala trebaju točno vrijeme. Na primjer, u bankarstvu, burzama i drugim financijskim poslovima, transakcije se moraju provoditi pravilnim redoslijedom, a točni vremenski slijedovi su ključni za to.

Naši telefoni, tableti, automobili, GPS sustavi i računala zahtijevaju točne postavke vremena i datuma. Želim da sat na radnoj površini mog računala pokazuje točno vrijeme. Želim da se podsjetnici pojave na mom lokalnom kalendaru u pravo vrijeme. Točno vrijeme također osigurava da se cron i systemd poslovi izvode u točno vrijeme.

Datum i vrijeme također su važni za bilježenje, tako da je malo lakše pronaći određene zapise na temelju datuma i vremena. Na primjer, jednom sam radio u DevOps-u (tada se nije tako zvao) i postavljao sustav e-pošte u državi Sjeverna Karolina. Obrađivali smo više od 20 milijuna e-pošte dnevno. Praćenje e-pošte kroz niz poslužitelja ili određivanje točnog slijeda događaja korištenjem datoteka dnevnika na geografski raspršenim hostovima može biti mnogo lakše ako su odgovarajuća računala sinkronizirana na vrijeme.

Jednom - mnogo sati

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

Hardverski sat neprekidno radi čak i kada je računalo isključeno, koristeći bateriju na matičnoj ploči sustava. Glavna funkcija RTC-a je pohranjivanje vremena kada veza s vremenskim poslužiteljem nije dostupna. U danima kada je bilo nemoguće spojiti se na vremenski poslužitelj putem Interneta, svako je računalo moralo imati točan interni sat. Operativni sustavi morali su pristupiti RTC-u prilikom podizanja sustava, a korisnik je morao ručno postaviti sistemsko vrijeme pomoću sučelja za konfiguraciju hardvera BIOS-a kako bi se uvjerio da je ispravno.

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

Vrijeme sustava je vrijeme koje OS prikazuje na GUI satu na vašoj radnoj površini, u izlazu naredbe datuma, u vremenskim oznakama zapisa. Ovo se također odnosi na vrijeme kada se datoteke stvaraju, mijenjaju i otvaraju.

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

Što je s NTP-om?

Računala u cijelom svijetu koriste NTP (Network Time Protocol) za sinkronizaciju vremena sa standardnim referentnim satovima putem Interneta koristeći hijerarhiju NTP poslužitelja. Glavni vremenski poslužitelji su na sloju 1 i izravno su povezani s raznim nacionalnim vremenskim servisima na sloju 0 ​​putem 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 emitiraju atomski satovi ili GPS prijamnik koji koristi vrlo precizne signale sata koje emitiraju GPS sateliti.

Velika većina referentnih poslužitelja ima nekoliko tisuća javnih NTP poslužitelja sloja 2 otvorenih za javnost. Mnoge organizacije i korisnici (uključujući i mene) s puno računala kojima je potreban NTP poslužitelj odabiru postavljanje vlastitih vremenskih poslužitelja tako da samo jedan lokalni poslužitelj pristupa sloju 2 ili 3. Zatim konfiguriraju preostale čvorove na mreži da koriste lokalne poslužitelj vremena . U slučaju moje kućne mreže, ovo je poslužitelj sloja 3.

Razne implementacije NTP-a

Izvorna implementacija NTP-a je ntpd. Zatim su mu se pridružila dva novija, chronyd i systemd-timesyncd. Sva tri sinkroniziraju lokalno vrijeme hosta s NTP poslužiteljem vremena. Usluga systemd-timesyncd nije tako pouzdana kao chronyd, ali je dovoljno dobra za većinu namjena. Ako RTC nije sinkroniziran, može postupno prilagoditi sistemsko vrijeme za sinkronizaciju s NTP poslužiteljem kada vrijeme lokalnog sustava malo odstupa. Usluga systemd-timesync ne može se koristiti kao vremenski poslužitelj.

Chrony je implementacija NTP-a koja sadrži dva programa: chronyd daemon i sučelje naredbenog retka zvano chronyc. Chrony ima neke značajke koje su nezamjenjive u mnogim slučajevima:

  • Chrony se može sinkronizirati s vremenskim poslužiteljem mnogo brže od stare usluge ntpd. Ovo je dobro za prijenosna ili stolna računala koja ne rade stalno.
  • Može kompenzirati fluktuacije sata, primjerice kada glavno računalo ode u stanje mirovanja ili uđe u način mirovanja ili kada se sat promijeni zbog skakanja frekvencije, što usporava satove pri niskim opterećenjima.
  • Rješava vremenske probleme povezane s nestabilnom mrežnom vezom ili zagušenjem mreže.
  • Regulira mrežna kašnjenja.
  • Nakon početne sinkronizacije vremena, Chrony nikad ne zaustavlja sat. To osigurava stabilne i dosljedne vremenske odsječke za mnoge sistemske usluge i aplikacije.
  • Chrony može raditi čak i bez mrežne veze. U tom slučaju, lokalni host ili poslužitelj mogu se ažurirati ručno.
  • Chrony može djelovati kao NTP poslužitelj.

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

RPM-ovi NTP, Chrony i systemd-timesyncd dostupni su u standardnim Fedora spremištima. Systemd-udev RPM je kernel event manager koji je instaliran prema zadanim postavkama na Fedori, ali nije obavezan.

Možete instalirati sva tri i prebacivati ​​se između njih, ali to će vam stvoriti dodatnu glavobolju. Tako da je bolje nemoj. Moderna izdanja Fedora, CentOS i RHEL prešla su na Chrony kao zadanu implementaciju, a također imaju systemd-timesyncd. Smatram da Chrony dobro radi, pruža bolje sučelje od NTP usluge, pruža mnogo više informacija i kontrole, u čemu će sigurno uživati ​​administratori sustava.

Onemogućavanje NTP usluga

NTP usluga možda već radi na vašem hostu. Ako je tako, trebate ga onemogućiti prije prebacivanja na nešto drugo. Imao sam pokrenut chronyd pa sam upotrijebio sljedeće naredbe da ga zaustavim i onemogućim. Pokrenite odgovarajuće naredbe za bilo koji NTP demon koji izvodite 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 sinkronizacije sata sustava omogućuje vam da odredite radi li NTP usluga. Budući da još niste pokrenuli NTP, naredba timesync-status će nagovijestiti ovo:

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

Izravan zahtjev za status pruža važne informacije. Na primjer, naredba timedatectl bez argumenata ili opcija izvršava podnaredbu status prema zadanim postavkama:

[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š host, UTC vrijeme i RTC vrijeme. U ovom slučaju, vrijeme sustava je postavljeno na vremensku zonu Amerike / New_Yorka (TZ), RTC je postavljen na vrijeme u lokalnoj vremenskoj zoni, a NTP usluga nije aktivna. RTC vrijeme počelo je lagano odstupati od sistemskog vremena. To je normalno za sustave čiji satovi nisu sinkronizirani. Iznos pomaka na hostu ovisi o vremenu koje je prošlo od zadnje sinkronizacije sustava.

Također smo primili upozorenje o korištenju lokalnog vremena za RTC - ovo se odnosi na promjene vremenske zone i postavke DST-a. Ako je računalo isključeno kada je potrebno napraviti promjene, RTC se neće promijeniti. Ali za poslužitelje ili druge hostove koji rade XNUMX sata na dan, to uopće nije problem. Osim toga, bilo koja usluga koja pruža NTP sinkronizaciju vremena prilagodit će vrijeme glavnog računala tijekom početne faze pokretanja, tako da će vrijeme ponovno biti točno nakon završetka pokretanja.

Postavljanje vremenske zone

Obično odredite vremensku zonu tijekom postupka instalacije i nemate zadatak mijenjati je kasnije. Međutim, ponekad morate promijeniti vremensku zonu. Postoji nekoliko alata koji mogu pomoći. Linux koristi datoteke vremenske zone za određivanje lokalne vremenske zone hosta. Ove datoteke su u direktoriju /usr/share/zoneinfo. Prema zadanim postavkama, za moju vremensku zonu, sustav propisuje ovo: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Ali ne morate znati takve suptilnosti da biste promijenili vremensku zonu.

Najvažnije 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 za provjeru promjena, ali također možete koristiti 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 vratiti vremensku zonu svog domaćina na lokalno vrijeme.

systemd-timesyncd

Systemd timesync demon pruža NTP implementaciju kojom je lako upravljati u kontekstu systemd. Instaliran je prema zadanim postavkama na sustavima Fedora i Ubuntu. Međutim, prema zadanim postavkama pokreće se samo na Ubuntuu. Za druge distribucije nisam siguran. Možete provjeriti sami:

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

Konfiguriranje systemd-timesyncd

Konfiguracijska datoteka za systemd-timesyncd je /etc/systemd/timesyncd.conf. Ovo je jednostavna datoteka s manje omogućenih opcija nego stari NTP i chronyd servisi. Evo sadržaja ove datoteke (bez daljnjih izmjena) na mom Fedora VM-u:

#  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 odjeljak koji sadrži, osim komentara, je [Vrijeme]. Svi ostali reci su komentirani. Ovo su zadane vrijednosti i ne smiju se mijenjati (osim ako za to nemate razloga). Ako nemate definiran NTP vremenski poslužitelj u retku NTP=, Fedora postavlja zamjenski Fedora vremenski poslužitelj. Obično dodajem svoj vremenski poslužitelj:

NTP=myntpserver

Sinkronizacija vremena rada

Možete pokrenuti i aktivirati systemd-timesyncd ovako:

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

Postavljanje hardverskog sata

Evo kako situacija izgleda 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 i lokalnog vremena (EDT) manja od jedne sekunde, a tijekom sljedećih nekoliko dana razlika se povećava za još nekoliko sekundi. Budući da u RTC-u ne postoji koncept vremenskih zona, naredba timedatectl mora izvršiti usporedbu kako bi odredila točnu vremensku zonu. Ako RTC vrijeme ne odgovara točno lokalnom vremenu, onda ne odgovara ni lokalnoj vremenskoj zoni.

U potrazi za više informacija, provjerio sam status systemd-timesync i pronaš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 pozornost na poruku dnevnika koja kaže da sistemsko vrijeme nije postavljeno ili je poništeno. Usluga Timesync postavlja sistemsko vrijeme na temelju vremenske oznake. Vremenske oznake održava demon za vremensku sinkronizaciju i stvaraju se pri svakoj uspješnoj sinkronizaciji.

Naredba timedatectl ne može preuzeti vrijednost hardverskog sata od sistemskog sata. Može postaviti samo vrijeme i datum iz vrijednosti unesene u naredbeni redak. RTC možete postaviti na istu vrijednost kao sistemsko vrijeme pomoću naredbe 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 uopće treba RTC?

Svaka implementacija NTP-a postavit će sistemski sat u vrijeme pokretanja. A zašto onda RTC? To nije sasvim točno: to će se dogoditi samo ako imate mrežnu vezu s vremenskim poslužiteljem. Međutim, mnogi sustavi 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 ono može odstupati od stvarnog vremena.

Zaključak

Ovaj članak je pregledao neke alate za manipuliranje datumom, vremenom i vremenskim zonama. Alat systemd-timesyncd pruža NTP klijenta koji može sinkronizirati vrijeme na lokalnom hostu s NTP poslužiteljem. Međutim, systemd-timesyncd ne pruža uslugu poslužitelja, pa ako vam je potreban NTP poslužitelj na vašoj mreži, morate koristiti nešto drugo, kao što je Chrony, da djeluje kao poslužitelj.

Više volim imati jednu implementaciju za bilo koju uslugu na svojoj mreži, pa koristim Chrony. Ako vam ne treba lokalni NTP poslužitelj ili ako vam ne smeta koristiti Chrony kao poslužitelj i systemd-timesyncd kao SNTP klijent. Uostalom, nema potrebe koristiti dodatne značajke Chronya kao klijenta ako ste zadovoljni funkcionalnošću systemd-timesyncd.

Još jedna napomena: ne morate koristiti alate systemd za implementaciju NTP-a. Možete koristiti stariju verziju ntpd-a, Chrony-ja ili neku drugu implementaciju NTP-a. Uostalom, systemd se sastoji od velikog broja usluga; mnogi od njih su izborni, pa ih možete isključiti i umjesto njih 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 systemd-ova implementacija NTP-a, ali više volim Chrony jer više odgovara mojim potrebama. To je Linux, dušo -)

O pravima oglašavanja

VDSina nudi poslužitelji za bilo koji zadatak, veliki izbor operativnih sustava za automatsku instalaciju, moguće je instalirati bilo koji OS iz vlastitog ISO, udobno Poplavna uprava vlastiti razvoj i dnevno plaćanje. Podsjetimo se da imamo vječne poslužitelje koji su definitivno bezvremenski 😉

Linux vremenska sinkronizacija: NTP, Chrony i systemd-timesyncd

Izvor: www.habr.com

Dodajte komentar