Sinkronizacija vremena u Linuxu: NTP, Chrony i systemd-timesyncd

Sinkronizacija vremena u Linuxu: NTP, Chrony i systemd-timesyncd
Većina ljudi prati vrijeme. Ustajemo na vrijeme da obavimo naše jutarnje rituale i krenemo na posao, uzmemo pauzu za ručak, ispune rokove projekta, proslavimo rođendane i praznike, ukrcamo se na avion i slično.

Štoviše, neki od nas su opsjednuti vremenom. Moji satovi rade na sunčevu energiju i precizno vrijeme dobivaju od Nacionalnog instituta za standarde i tehnologiju (NIST) u Fort Collinsu (saveznoj državi Colorado) preko dugovalne radio stanice. WWVBSignals vremena sinhronizirani su s atomskim satovima, također smještenim u Fort Collinsu. Moj Fitbit se sinhronizira s mojim telefonom, koji se sinhronizira s poslužiteljem NTP, koji se na kraju sinhronizira s atomskim satovima.

Uređaji također prate vrijeme.

Postoji mnogo razloga zašto našim uređajima i računalima treba precizno vrijeme. Na primjer, u bankarskom sektoru, na burzama i drugim financijskim poslovima, transakcije moraju biti izvršene u pravilnom redoslijedu, a za to su kritične točne vremenske sekvence.

Naši telefoni, tableti, automobili, GPS sustavi i računala zahtijevaju točnu postavku vremena i datuma. Želim da sat na radnoj površini mog računala pokazuje točno vrijeme. Želim da u mom lokalnom kalendaru podsjetnici iskaču u pravo vrijeme. Točno vrijeme također osigurava da se cron zadaci i systemd pokreću u pravo vrijeme.

Datum i vrijeme također su važni za vođenje dnevnika, pa je malo lakše pronaći određene logove orijentirajući se prema datumu i vremenu. Na primjer, jednom sam radio u DevOpsu (tada se to još nije zvalo tako) i radio na postavljanju sustava elektroničke pošte u saveznoj državi Sjeverna Karolina. Prije smo obradili više od 20 milijuna poruka dnevno. Praćenje elektroničke pošte kroz niz poslužitelja ili određivanje točnog redoslijeda događaja korištenjem datoteka dnevnika na geografski udaljenim hostovima može biti mnogo lakše ako su odgovarajući računala sinhronizirana po vremenu.

Vrijeme je jedno — sati su mnogi.

Linux poslužitelji moraju u obzir uzeti da postoji sistemsko vrijeme i vrijeme RTC. RTC (Real Time Clock — sat realnog vremena) je pomalo neobično i ne posebno točno ime za hardverske sate.

Hardverski sati rade neprekidno, čak i kada je računar isključen, koristeći bateriju na matičnoj ploči sistema. Osnovna funkcija RTC-a je da čuva vreme kada veza sa serverom vremena nije dostupna. U vremenima kada nije bilo moguće povezati se sa serverom vremena preko interneta, svaki računar je morao imati tačne unutrašnje sate. Operativni sistemi morali su se obratiti RTC-u tokom podizanja sistema, a korisnik je morao ručno postaviti sistemsko vreme koristeći hardverski interfejs za konfiguraciju BIOS-a da bi bio siguran da je ispravno.

Hardverski sati ne razumeju koncept vremenskih zona; u RTC se čuva samo vreme, a ne vremenska zona ili pomeraj od UTC-a (Koordinirano svetsko vreme, koje je takođe poznato kao GMT ili srednje vreme po Grinviču). RTC možete postaviti pomoću alata o kojem ću govoriti kasnije u ovom članku.

Sistemsko vreme je vreme koje OS prikazuje na GUI satu na vašem radnom stolu, u izlazu komande date, u vremenskim oznakama dnevnika. Takođe se odnosi na vreme kreiranja, promena i otvaranja datoteka.

korisnik postavlja ime novo stvorene mreže. man za rtc ima potpuno opisivanje RTC-a i sistemskih sati.

Šta se dešava sa NTP-om?

Računari širom sveta koriste NTP (Network Time Protocol) za sinhronizaciju svog vremena sa standardnim referentnim satima preko interneta koristeći hijerarhiju NTP servera. Glavni serveri vremena nalaze se na nivou 1 i direktno su povezani sa raznim nacionalnim službama vremena na nivou 0 putem satelita, radija ili čak modema preko telefonskih linija. Servisi vremena na nivou 0 mogu biti atomski satovi, radio prijemnik podešen na signale koje emitiraju atomski satovi, ili GPS prijemnik koji koristi visoko precizne signale sati koje isporučuju GPS sateliti.

Na većini referentnih poslužitelja otvoreno je nekoliko tisuća javnih NTP poslužitelja stratum 2, koji su dostupni svima. Mnoge organizacije i korisnici (uključujući mene) s velikim brojem hostova kojima je potreban NTP poslužitelj, radije postavljaju vlastite poslužitelje vremena, tako da samo jedan lokalni host pristupa stratum 2 ili 3. Zatim konfiguriraju preostale čvorove u mreži da koriste lokalni poslužitelj vremena. U slučaju moje kućne mreže, to je poslužitelj razine 3.

Različite implementacije NTP

Prvotna implementacija NTP je ntpd. Nakon toga, pridružila su joj se dva novija, chronyd i systemd-timesyncd. Sve tri sinkroniziraju vrijeme lokalnog hosta s NTP poslužiteljem. Usluga systemd-timesyncd nije tako pouzdana kao chronyd, ali dovoljna je za većinu svrha. Ako RTC nije sinkroniziran, postupno može prilagoditi sistemsko vrijeme kako bi se uskladilo s NTP poslužiteljem kada se lokalno sistemsko vrijeme malo pomakne. Usluga systemd-timesync ne može se koristiti kao poslužitelj vremena.

Chrony — to je implementacija NTP koja se sastoji od dva programa: demon chronyd i sučelje naredbenog retka pod nazivom chronyc. Chrony ima neke funkcije koje su u mnogim slučajevima jednostavno nezamjenjive:

  • Chrony se može sinkronizirati s poslužiteljem vremena mnogo brže nego stara usluga ntpd. To je dobro za prijenosna računala ili desktop računala koja ne rade neprekidno.
  • Može kompenzirati oscilacije taktnog signala, na primjer, kada se host prebacuje u način spavanja ili kad se promijeni frekvencija zbog nagle promjene frekvencije koja usporava takt pri niskim opterećenjima.
  • Rješava probleme s vremenom povezane s nestabilnom mrežnom vezom ili preopterećenjem mreže.
  • Regulira kašnjenja u mreži.
  • Nakon početne vremenske sinkronizacije, Chrony nikada ne zaustavlja satove. To osigurava stabilne i konzistentne vremenske intervale za mnoge sistemske usluge i aplikacije.
  • Chrony može raditi čak i bez mrežne povezanosti. U tom slučaju lokalni host ili poslužitelj može 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 hostu koristeći Chrony ili systemd-timesyncd.

RPM paketi NTP, Chrony i systemd-timesyncd dostupni su u standardnim repozitorijima Fedora. RPM systemd-udev je upravitelj događaja jezgre, koji je u Fedori zadano instaliran, ali nije obavezan za korištenje.

Možete instalirati sve tri i prelaziti između njih, ali to će stvoriti dodatne komplikacije. Stoga, bolje da ne radite to. Moderni izdanci Fedore, CentOS-a i RHEL-a prešli su na Chrony kao standardnu implementaciju, a osim toga imaju i systemd-timesyncd. Smatram da Chrony dobro radi, nudi bolji sučelje od NTP usluge, pruža puno više informacija i poboljšava kontrolu, što će sigurno odgovarati sistemskim administratorima.

Onemogućavanje NTP usluga

Moguće je da je na vašem hostu već pokrenuta NTP usluga. Ako je to slučaj, trebate je onemogućiti prije nego što pređete na nešto drugo. Ja sam imao pokrenut chronyd, stoga sam koristio sljedeće komande za zaustavljanje i onemogućavanje. Pokrenite odgovarajuće komande za bilo koji NTP demon koji koristite na svom hostu:

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

Provjerite da li je usluga zaustavljena i onemogućena:

[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP klijent/server
     Učitan: učitan (/usr/lib/systemd/system/chronyd.service; onemogućeno; tvornički postavka: omogućeno)
     Aktivno: neaktivno (mrtvo)
       Dokumenti: man:chronyd(8)
             man:chrony.conf(5)
[root@testvm1 ~]#

Provjera statusa prije pokretanja

Status sistemske sinhronizacije sati omogućuje utvrđivanje je li NTP usluga pokrenuta. Budući da NTP još niste pokrenuli, naredba timesync-status daje naznaku o tome:

[root@testvm1 ~]# timedatectl timesync-status
Neuspjeh u upitu poslužitelju: Nije moguće aktivirati udaljenog partnera.

Direktno upit za status daje važne informacije. Na primjer, naredba timedatectl bez argumenata ili parametara izvršava podkomandu status prema zadanim postavkama:

[root@testvm1 ~]# timedatectl status
           Lokalno vrijeme: Pet 2020-05-15 08:43:10 EDT  
           Univerzalno vrijeme: Pet 2020-05-15 12:43:10 UTC  
                 RTC vrijeme: Pet 2020-05-15 08:43:08      
                Vremenska zona: Amerika/New_York (EDT, -0400)
Sustavni sat usklađen: ne                          
              NTP usluga: neaktivna                    
          RTC u lokalnoj TZ: da                    

Upozorenje: Sustav je konfiguriran za čitanje RTC vremena u lokalnoj vremenskoj zoni.
         Ovaj način rada se ne može u potpunosti podržati. To će stvoriti razne probleme
         s promjenama vremenske zone i prilagodbama ljetnog računanja vremena. RTC
         vrijeme nikada nije ažurirano, oslanja se na vanjske uređaje za održavanje.
         Ako je ikako moguće, koristite RTC u UTC pozivom
         'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#

Tako ćete dobiti lokalno vrijeme za vaš host, vrijeme UTC i RTC vrijeme. U ovom slučaju, sustavno vrijeme je postavljeno na vremensku zonu Amerika/New_York (TZ), RTC je postavljeno na vrijeme u lokalnoj vremenskoj zoni, a NTP usluga nije aktivna. RTC vrijeme počinje se malo odmicati od sistemskog vremena. To je normalno za sustave čiji satovi nisu sinkronizirani. Veličina odstupanja na hostu ovisi o vremenu koje je prošlo od posljednje sinkronizacije sustava.

Također smo primili upozorenje o korištenju lokalnog vremena za RTC — to se odnosi na promjene vremenskih zona i postavke ljetnog računanja vremena. Ako je računar isključen u trenutku kada je potrebno izvršiti promjene, RTC vrijeme se neće promijeniti. No, za servere ili druge hostove koji rade 24/7, to nije problem. Osim toga, bilo koja usluga koja osigurava NTP sinkronizaciju će ispraviti vrijeme hosta već u početnim fazama pokretanja, tako da će nakon završetka pokretanja vrijeme ponovno biti ispravno.

Postavljanje vremenske zone

Obično postavljate vremensku zonu tijekom postupka instalacije, i nemate potrebe mijenjati je kasnije. Međutim, postoje slučajevi kada je potrebno promijeniti vremensku zonu. Postoji nekoliko alata koji vam mogu pomoći. Za određivanje lokalne vremenske zone, Linux koristi datoteke vremenskih zona. Ove datoteke se nalaze u direktoriju /usr/share/zoneinfo. Zadano, za moju vremensku zonu sustav postavlja ovo: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. No, nije potrebno poznavati takve detalje da biste promijenili vremensku zonu.

Glavno je znati službeni naziv vremenske zone za vašu lokaciju i odgovarajuću naredbu. Recimo, želite promijeniti vremensku zonu na 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

Sada možete postaviti vremensku zonu. Koristio sam naredbu date za provjeru promjena, 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 ponovo promijeniti vremensku zonu svog hosta na lokalno vrijeme.

systemd-timesyncd

Demon systemd timesync pruža NTP implementaciju koja se lako upravlja u okviru systemd-a. Predefiniran je u Fedora i Ubuntu. Međutim, u Ubuntu-u se po defaultu pokreće tek kasnije. Nisam siguran za druge distribucije. Možete provjeriti kod sebe:

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

Konfiguracija systemd-timesyncd

Datoteka s konfiguracijama za systemd-timesyncd je /etc/systemd/timesyncd.conf. To je jednostavna datoteka s manje mogućnosti u odnosu na starije NTP i chronyd servise. Evo sadržaja te datoteke (bez dodatnih promjena) na mojoj virtualnoj mašini s Fedore:

#  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 [Time]. Sve ostale linije su komentirane. To su zadane vrijednosti, koje ne treba mijenjati (osim ako nemate specifičan razlog). Ako nemate definirani NTP server u liniji NTP =, po defaultu se koristi rezervni Fedora vremenski server. Obično dodajem svoj NTP server:

NTP=myntpserver

Pokretanje timesynca

Za pokretanje i aktiviranje systemd-timesyncd možete učiniti sljedeće:

[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 izgledaju stvari nakon pokretanja timesyncd-a:

[root@testvm2 systemd]# timedatectl
               Lokalno vrijeme: Sat 2020-05-16 14:34:54 EDT  
           Univerzalno vrijeme: Sat 2020-05-16 18:34:54 UTC  
                 RTC vrijeme: Sat 2020-05-16 14:34:53      
                Vremenska zona: America/New_York (EDT, -0400)
Sistematski sat sinkroniziran: da                          
              NTP usluga: aktivna                      
          RTC u lokalnoj TZ: ne    

Isprva razlika između RTC-a i lokalnog vremena (EDT) ne prelazi sekundu, a razlika se povećava za par sekundi tijekom sljedećih nekoliko dana. Budući da RTC ne priznaje pojmove vremenskih zona, tim timedatectl mora izvršiti usporedbu kako bi odredio potrebnu vremensku zonu. Ako vrijeme RTC-a ne odgovara točno lokalnom vremenu, to znači da ne odgovara ni lokalnoj vremenskoj zoni.

U potrazi za dodatnim informacijama provjerio sam stanje systemd-timesync i otkrio sljedeće:

[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Sinhronizacija mrežnog vremena
     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: "Početna sinhronizacija sa vremenskim serverom 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]: Pokretanje sinhronizacije mrežnog vremena...
May 16 09:57:24 testvm2.both.org systemd-timesyncd[822]: Vrijeme sistemskog sata nije postavljeno ili je unazadilo, obnavljam iz zabilježene vremenske oznake: Sat 2020-05-16 13:56:53 EDT
May 16 13:56:53 testvm2.both.org systemd[1]: Pokretnuta sinhronizacija mrežnog vremena.
May 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Početna sinhronizacija sa vremenskim serverom 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#

Obratite pažnju na poruku u dnevniku koja kaže da sistemsko vrijeme nije postavljeno ili je unazadilo. Usluga Timesync postavlja sistemsko vrijeme na temelju vremenske oznake. Vremenske oznake podržava demon timesync i stvaraju se pri svakoj uspješnoj sinhronizaciji.

Komanda timedatectl ne može uzeti vrijednost hardverskog sata iz sistemskog sata. Može postaviti vrijeme i datum samo iz vrijednosti unijete u komandnoj liniji. Možete postaviti RTC na istu vrijednost kao i sistemsko vrijeme, koristeći komandu hwclock:

[root@testvm2 ~]# /sbin/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
               Lokalno vrijeme: Pon 2020-05-18 13:56:46 EDT  
           Univerzalno vrijeme: Pon 2020-05-18 17:56:46 UTC  
                 RTC vrijeme: Pon 2020-05-18 13:56:46      
                Vremenska zona: Amerika/New_York (EDT, -0400)
Sistem clock sinhroniziran: da                          
              NTP usluga: aktivna                      
          RTC u lokalnoj TZ: da

Opcija --localtime ukazuje na to da hardverski sat pokazuje lokalno vrijeme, a ne UTC.

Zašto vam uopće treba RTC?

Svaka implementacija NTP-a postavit će sistemsko vrijeme pri pokretanju. A zašto onda RTC? To nije sasvim točno: to će se dogoditi samo ako imate mrežnu vezu s vremenom poslužitelja. Međutim, mnogi sustavi nemaju neprekidni pristup mrežnoj vezi, stoga su hardverski satovi korisni kako bi Linux mogao postaviti sistemsko vrijeme na temelju njih. To je bolje od ručne postavke vremena, čak i ako se može razlikovati od stvarnog vremena.

Zaključak

U ovom članku razmatramo neke alate za upravljanje datumom, vremenom i vremenskim zonama. Alat systemd-timesyncd pruža NTP klijent koji može sinkronizirati vrijeme na lokalnom hostu s NTP poslužiteljem. Međutim, systemd-timesyncd ne pruža poslužiteljsku uslugu, stoga, ako vam treba NTP poslužitelj u vašoj mreži, trebate koristiti nešto drugo — na primjer, Chrony, za rad kao poslužitelj.

Preferiram imati jedinstvenu implementaciju za bilo koju uslugu u mojoj 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 mogućnosti Chrony-a kao klijenta, ako vam odgovara funkcionalnost systemd-timesyncd.

Još jedna napomena: niste obavezni koristiti alate systemd za implementaciju NTP-a. Možete koristiti stariju verziju ntpd, Chrony ili drugu implementaciju NTP-a. Uostalom, systemd se sastoji od niza usluga; mnoge od njih su opcionalne, tako da ih možete isključiti i koristiti nešto drugo umjesto njih. To nije ogroman monolitni monstruozan sustav. Možete ne voljeti systemd ili njegove dijelove, ali trebate donijeti utemeljenu odluku.

Sviđa mi se NTP implementacija u systemd, ali preferiram Chrony jer bolje odgovara mojim potrebama. To je Linux, dušo -)

U okviru reklame

VDSina nudi poslužitelji za bilo koje zadatke, ogroman izbor operativnih sustava za automatsku instalaciju, postoji mogućnost instalacije bilo kojeg OS-a s vlastitog ISO, zgodan upravljačka ploča vlastitog razvoja i dnevno plaćanje. Podsjećamo, imamo vječne poslužitelje koji su zaista otporni na vrijeme 😉

Sinkronizacija vremena u Linuxu: NTP, Chrony i systemd-timesyncd

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster