Sincronizazione di u tempu Linux: NTP, Chrony è systemd-timesyncd

Sincronizazione di u tempu Linux: NTP, Chrony è systemd-timesyncd
A maiò parte di a ghjente mantene a traccia di u tempu. Ci alzamu à tempu per compie i nostri rituali di a matina è andemu à travaglià, piglià una pausa per u pranzu, scuntrà i termini di u prugettu, celebrà l'anniversariu è e vacanze, imbarcate in un aviò, etc.

Inoltre: certi di noi sò obsesionati da u tempu. U mo orologio hè alimentatu da l'energia solare è riceve l'ora precisa da l'Istitutu Naziunale di Norme è Tecnulugia (NIST) à Fort Collins, Colorado via radio d'onda longa WWVB. I signali di u tempu sò sincronizati cù u clock atomicu, ancu situatu à Fort Collins. U mo Fitbit hè sincronizatu cù u mo telefunu chì hè sincronizatu cù u servitore NTP, chì eventualmente si sincronizza cù u clock atomicu.

I dispositi mantenenu a traccia di u tempu ancu

Ci hè parechje ragioni per quessa chì i nostri dispusitivi è l'urdinatori necessitanu un tempu precisu. Per esempiu, in i banche, i mercati di borsa, è altre attività finanziarie, e transazzione deve esse realizatu in l'ordine propiu, è e sequenze di tempu precise sò critichi per questu.

I nostri telefoni, tablette, vitture, sistemi GPS è computer necessitanu tutti i paràmetri di data è ora precisa. Vogliu chì u clock in u desktop di u mo urdinatore per indicà l'ora curretta. Vogliu chì i ricordi appariscenu in u mo calendariu lucale à u mumentu propiu. U tempu currettu assicura ancu chì i travaglii di cron è systemd funzionanu à u tempu currettu.

A data è l'ora sò ancu impurtanti per u logu, cusì hè un pocu più faciule per truvà certi logs basati nantu à a data è l'ora. Per esempiu, aghju travagliatu una volta in DevOps (ùn era micca chjamatu cusì à u mumentu) è hà stallatu un sistema di email in u statu di North Carolina. Avemu usatu per processà più di 20 milioni di email à ghjornu. U seguimentu di e-mail attraversu una seria di servitori, o determinà a sequenza esatta di l'avvenimenti utilizendu i schedarii di logu nantu à l'ospiti dispersi geograficamente, pò esse assai più faciule se i rispettivi computers sò sincronizati in u tempu.

Una volta - parechje ore

L'ospiti Linux deve piglià in contu chì ci hè un tempu di sistema è un tempu RTC. RTC (Real Time Clock) hè un nome pocu stranu è micca assai precisu per un clock hardware.

U clock hardware funziona continuamente ancu quandu l'urdinatore hè spento, utilizendu a bateria nantu à a scheda madre di u sistema. A funzione principale di u RTC hè di almacenà u tempu quandu una cunnessione à un servitore di u tempu ùn hè micca dispunibule. In i ghjorni chì era impussibile di cunnette à un servitore di u tempu nantu à Internet, ogni computer avia da avè un clock internu precisu. I sistemi operativi anu da accede à l'RTC à u mumentu di l'iniziu è l'utilizatore hà da stabilisce manualmente l'ora di u sistema utilizendu l'interfaccia di cunfigurazione di hardware BIOS per assicurà chì era curretta.

L'orologio di hardware ùn capisce micca u cuncettu di i fusi orari; RTC guarda solu l'ora, micca u fusu orariu o l'offset da UTC (Tempu Universale Coordinatu, cunnisciutu ancu GMT o Greenwich Mean Time). Pudete installà RTC cù un strumentu chì vi coprerà più tardi in questu articulu.

U tempu di u sistema hè u tempu chì u SO mostra nantu à u clock GUI nantu à u vostru scrittore, in l'output di u cumandamentu di data, in i timestamps di i logs. Questu hè ancu applicà à quandu i schedari sò creati, mudificati è aperti.

In pàgina omu per rtc ci hè una descrizzione completa di u RTC è u clock di u sistema.

Chì ci hè cù NTP?

L'urdinatori in u mondu utilizanu NTP (Network Time Protocol) per sincronizà u so tempu cù l'orologi di riferimentu standard nantu à Internet utilizendu una ghjerarchia di servitori NTP. I servitori di u tempu principali sò in u stratu 1 è sò direttamente cunnessi à diversi servizii di u tempu naziunale in u stratu 0 via satellita, radiu o ancu modem nantu à e linee telefoniche. I servizii di u tempu di Layer 0 ponu esse un clock atomicu, un receptore radio chì hè sintonizatu à i segnali trasmessi da l'orologi atomici, o un ricevitore GPS chì usa signali di clock altamente precisi trasmessi da i satelliti GPS.

A maiò parte di i servitori di riferimentu anu parechji mila servitori publichi NTP stratum 2 aperti à u publicu. Parechje urganisazione è utilizatori (me inclusu) cù assai òspiti chì anu bisognu di un servitore NTP sceglienu di stallà i so servitori di u tempu cusì solu un òspite locale accede à u stratu 2 o 3. Dopu cunfigurà i nodi rimanenti nantu à a reta per utilizà u locale. servitore di tempu. In u casu di a mo rete di casa, questu hè un servitore di capa 3.

Diverse implementazioni di NTP

L'implementazione originale di NTP hè ntpd. Hè statu dopu unitu da dui più novi, chronyd è systemd-timesyncd. Tutti i trè sincronizzanu l'ora di l'ospitu lucale cù un servitore di tempu NTP. U serviziu systemd-timesyncd ùn hè micca cusì affidabile cum'è chronyd, ma hè abbastanza bonu per a maiò parte di i scopi. Se l'RTC hè fora di sincronia, pò aghjustà gradualmente u tempu di u sistema per sincronizà cù u servitore NTP quandu u tempu di u sistema lucale si stende ligeramente. U serviziu systemd-timesync ùn pò micca esse usatu cum'è un servitore di tempu.

Cronia hè una implementazione di NTP chì cuntene dui prugrammi: u daemon chronyd è una interfaccia di linea di cumanda chjamata chronyc. Chrony hà alcune caratteristiche chì sò indispensabili in parechji casi:

  • Chrony pò sincronizà cù un servitore di tempu assai più veloce di u vechju serviziu ntpd. Questu hè bonu per laptops o desktops chì ùn viaghjanu micca sempre.
  • Puderà cumpensà i fluttuazioni di u clock, cum'è quandu l'ospite si mette in dorme o entra in u modu di sonnu, o quandu u clock cambia per via di salti di freccia, chì rallenta l'orologi à carichi bassi.
  • Risolve i prublemi di tempu ligati à a cunnessione di a rete instabile o a congestione di a rete.
  • Regula i ritardi di a rete.
  • Dopu a sincronizazione iniziale di u tempu, Chrony ùn ferma mai u clock. Questu furnisce intervalli di tempu stabili è coerenti per parechji servizii di sistema è applicazioni.
  • Chrony pò travaglià ancu senza una cunnessione di rete. In questu casu, l'ospite o u servitore locale pò esse aghjurnatu manualmente.
  • Chrony pò agisce cum'è un servitore NTP.

Una volta, NTP hè un protokollu chì pò esse implementatu in un host Linux cù Chrony o systemd-timesyncd.

I RPM NTP, Chrony è systemd-timesyncd sò dispunibuli in i repositori Fedora standard. L'RPM systemd-udev hè un gestore d'avvenimenti di u kernel chì hè stallatu per difettu nantu à Fedora, ma hè opzionale.

Pudete installà tutti i trè è cambià trà elli, ma questu crearà un mal di testa extra. Allora hè megliu micca. E versioni muderni di Fedora, CentOS è RHEL anu trasfirutu à Chrony cum'è l'implementazione predeterminata, è anu ancu systemd-timesyncd. Trovu Chrony per travaglià bè, furnisce una interfaccia megliu cà u serviziu NTP, furnisce assai più infurmazione è cuntrollu, chì l'amministratori di u sistema certamenti piaceranu.

Disattivà i servizii NTP

U serviziu NTP pò esse digià in esecuzione nantu à u vostru òspite. Sì cusì, avete bisognu di disattivà prima di passà à qualcosa altru. Aviu chronyd in esecuzione cusì aghju utilizatu i seguenti cumandamenti per piantà è disattivà. Eseguite i cumandamenti adatti per qualsiasi daemon NTP chì site in u vostru òspite:

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

Verificate chì u serviziu hè firmatu è disattivatu:

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

Verificate u statutu prima di u lanciu

U statutu di sincronizazione di l'orologio di u sistema permette di determinà se u serviziu NTP hè in esecuzione. Siccomu ùn avete micca iniziatu NTP ancu, u cumandamentu timesync-status suggerisce questu:

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

Una dumanda di statutu direttu furnisce infurmazioni impurtanti. Per esempiu, u cumandamentu timedatectl senza argumentu o opzioni eseguisce u subcumandamentu di statutu per difettu:

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

Questu vi darà l'ora locale per u vostru òspite, l'ora UTC è l'ora RTC. In questu casu, u tempu di u sistema hè stabilitu in u fusu orariu America / New_York (TZ), l'RTC hè stabilitu à l'ora in u fusu orariu lucale, è u serviziu NTP ùn hè micca attivu. U tempu RTC hà cuminciatu à deviate ligeramente da u tempu di u sistema. Questu hè normale per i sistemi chì l'orologi ùn sò micca stati sincronizati. A quantità di offset nantu à l'ospite dipende da u tempu chì hè passatu da quandu u sistema hè stata sincronizata per l'ultima volta.

Avemu ancu ricevutu un avvisu annantu à l'usu di l'ora locale per RTC - questu hè applicatu à i cambiamenti di u fusu orariu è i paràmetri DST. Se l'urdinatore hè spentu quandu i cambiamenti devenu esse fatte, u RTC ùn cambia micca. Ma per i servitori o altri òspiti chì currenu intornu à u clock, questu ùn hè micca un prublema in tuttu. Inoltre, qualsiasi serviziu chì furnisce a sincronizazione di u tempu NTP aghjustà u tempu di l'ospitu durante a fase iniziale di startup, cusì u tempu serà currettu novu dopu chì l'iniziu hè cumpletu.

Stabbilimentu di u fusu orariu

Di solitu, specificate u fusu orariu durante a prucedura di stallazione è ùn avete micca u compitu di cambià dopu. Tuttavia, ci sò volte quandu avete bisognu di cambià u fusu orariu. Ci hè parechje strumenti chì ponu aiutà. Linux usa i schedarii di u fusu orariu per determinà u fusu orariu lucale di un host. Questi schedari sò in u cartulare /usr/share/zoneinfo. Per automaticamente, per u mo fusu orariu, u sistema prescrive questu: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Ma ùn avete micca bisognu di sapè tali suttilità per cambià u fusu orariu.

A cosa principal hè di cunnosce u nome di u fusu orariu ufficiale per u vostru locu è u cumandamentu currispundente. Diciamu chì vulete cambià u fusu orariu à 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>

Avà pudete stabilisce u fusu orariu. Aghju utilizatu u cumandamentu di data per verificà i cambiamenti, ma pudete ancu aduprà 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 ~]#

Avà pudete cambià u fusu orariu di u vostru òspite torna à l'ora locale.

systemd-timesyncd

U daemon systemd timesync furnisce una implementazione NTP chì hè faciule da gestisce in u cuntestu systemd. Hè stallatu per difettu in Fedora è Ubuntu. Tuttavia, principia solu per difettu in Ubuntu. Ùn sò micca sicuru di altre distribuzioni. Pudete verificà per voi stessu:

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

Configurazione di systemd-timesyncd

U schedariu di cunfigurazione per systemd-timesyncd hè /etc/systemd/timesyncd.conf. Questu hè un schedariu simplice cù menu opzioni attivate da i vechji servizii NTP è chronyd. Eccu u cuntenutu di stu schedariu (senza più mudificazioni) nantu à a mo 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

L'unica sezione chì cuntene, oltre à i cumenti, hè [Time]. Tutte e altre linee sò cummentate. Quessi sò i valori predeterminati è ùn deve micca esse cambiatu (a menu chì ùn avete micca una ragione). Se ùn avete micca un servitore di u tempu NTP definitu in a linea NTP=, Fedora hà predeterminatu à un servitore di tempu Fedora fallback. Di solitu aghjunghje u mo servitore di tempu:

NTP=myntpserver

Esecuzione di timesync

Pudete inizià è fà attivu systemd-timesyncd cusì:

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

Configurazione di l'orologio hardware

Eccu cumu si vede a situazione dopu avè eseguitu timesyncd:

[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    

Inizialmente, a diffarenza trà l'RTC è l'ora locale (EDT) hè menu di un secondu, è a discrepanza aumenta da un altru coppiu di seconde in i prossimi ghjorni. Siccomu ùn ci hè micca cuncettu di fusi orari in RTC, u cumandamentu timedatectl deve fà un paragone per determinà u fusu orariu currettu. Se l'ora RTC ùn currisponde micca esattamente à l'ora locale, allora ùn currisponde micca à u fusu orariu lucale.

In cerca di più infurmazione, aghju verificatu u statutu di systemd-timesync è trovu questu:

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

Avvisu u missaghju di logu chì dice chì u tempu di u sistema ùn hè statu stabilitu o hè statu resettatu. U serviziu Timesync stabilisce u tempu di u sistema basatu annantu à u timestamp. Timestamps sò mantinuti da u daemon timesync è sò creati in ogni sincronia successu.

U cumandamentu timedatectl ùn hà micca manera di piglià u valore di u clock hardware da u clock di u sistema. Pò esse solu l'ora è a data da u valore inseritu in a linea di cummanda. Pudete stabilisce l'RTC à u listessu valore cum'è u tempu di u sistema usendu u cumandamentu 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

L'opzione --localtime dice à u clock hardware per mostra l'ora locale, micca UTC.

Perchè avete bisognu di RTC in tuttu?

Ogni implementazione di NTP stabiliscerà u clock di u sistema à l'ora di l'iniziu. E perchè allora RTC ? Questu ùn hè micca veramente veru: questu succede solu s'ellu avete una cunnessione di rete à u servitore di u tempu. In ogni casu, assai sistemi ùn anu micca sempre accessu à una cunnessione di rete, cusì un clock hardware hè utile per Linux per aduprà per stabilisce l'ora di u sistema. Questu hè megliu cà stabilisce u tempu manualmente, ancu s'ellu pò deviate da u tempu reale.

cunchiusioni

Questu articulu hà rivisatu qualchi strumenti per manipulà data, ora è fusi orari. L'uttellu systemd-timesyncd furnisce un cliente NTP chì pò sincronizà l'ora nantu à l'ospite locale cù un servitore NTP. In ogni casu, systemd-timesyncd ùn furnisce micca un serviziu di servitore, perchè se avete bisognu di un servitore NTP in a vostra reta, duvete aduprà qualcosa altru, cum'è Chrony, per agisce cum'è un servitore.

Preferite avè una implementazione unica per qualsiasi serviziu in a mo reta, cusì aghju utilizatu Chrony. Se ùn avete micca bisognu di un servitore NTP locale, o s'ellu ùn importa micca aduprà Chrony cum'è u servitore è systemd-timesyncd cum'è u cliente SNTP. Dopu tuttu, ùn ci hè micca bisognu di utilizà e funzioni supplementari di Chrony cum'è un cliente se site cuntentu cù a funziunalità di systemd-timesyncd.

Un'altra nota: ùn hè micca necessariu di utilizà l'arnesi systemd per implementà NTP. Pudete utilizà una versione più vechja di ntpd, Chrony, o una altra implementazione NTP. Dopu tuttu, systemd hè custituitu da un gran numaru di servizii; assai di elli sò opzionali, cusì pudete disattivà è aduprà qualcosa d'altru invece. Questu ùn hè micca un grande mostru monoliticu. Ùn pudete micca piace systemd o parti di questu, ma duvete piglià una decisione infurmata.

Mi piace l'implementazione di NTP di systemd, ma preferite Chrony perchè si adatta megliu à i mo bisogni. Hè Linux, criatura -)

I diritti di publicità

VDSina offre servitori per ogni compitu, una vasta selezzione di sistemi operativi per a stallazione automatica, hè pussibule installà qualsiasi OS da u vostru propiu ISO, cunfortu pannellu di cuntrollu sviluppu propiu è pagamentu di ogni ghjornu. Ricurdativi chì avemu servitori eterni chì sò definitivamente senza tempu 😉

Sincronizazione di u tempu Linux: NTP, Chrony è systemd-timesyncd

Source: www.habr.com

Add a comment