Linux Tan Synchronization: NTP, Chrony ak systemd-timesyncd

Linux Tan Synchronization: NTP, Chrony ak systemd-timesyncd
Pifò moun kenbe tras de tan. Nou leve alè pou konplete rituèl maten nou yo epi ale travay, pran repo pou manje midi, respekte dat limit pwojè yo, selebre anivèsè nesans ak jou ferye, monte nan yon avyon, ak sou sa.

Anplis: kèk nan nou obsede ak tan. Mont mwen an mache ak solè epi li jwenn lè egzat li nan Enstiti Nasyonal Estanda ak Teknoloji (NIST) rive Fort Collins, Kolorado atravè radyo ond long WWVB. Siyal tan yo senkronize ak yon revèy atomik ki sitiye tou nan Fort Collins. Fitbit mwen an senkronize ak telefòn mwen an, ki senkronize ak sèvè a NTP, ki evantyèlman senkronize ak revèy atomik la.

Aparèy tou kenbe tras de tan.

Gen anpil rezon ki fè aparèy nou yo ak òdinatè yo bezwen tan egzat. Pou egzanp, nan bank, mache dechanj ak lòt biznis finansye, tranzaksyon yo dwe fèt nan lòd ki kòrèk la, ak sekans tan egzak yo kritik nan sa a.

Telefòn nou yo, tablèt yo, machin yo, sistèm GPS ak òdinatè nou yo bezwen paramèt tan ak dat egzat. Mwen vle revèy la sou Desktop òdinatè mwen an montre tan ki kòrèk la. Mwen vle rapèl yo parèt nan kalandriye lokal mwen an nan bon moman. Distribisyon kòrèk tou asire ke travay cron ak systemd yo kòmanse nan moman kòrèk la.

Dat ak lè yo enpòtan tou pou antre, kidonk li se yon ti kras pi fasil jwenn sèten mòso bwa ki baze sou dat ak lè. Pou egzanp, yon fwa mwen te travay nan DevOps (yo pa t 'rele li nan moman an) mete kanpe yon sistèm imel nan North Carolina State. Nou te konn trete plis pase 20 milyon imèl pa jou. Trase imel atravè yon seri de serveurs oswa detèmine sekans egzak la nan evènman lè l sèvi avèk fichye boutèy demi lit sou hôtes jeyografik dispèse ka pi fasil si òdinatè yo korespondan yo tan senkronize.

Yon sèl fwa - anpil èdtan

Gen tout pouvwa a Linux yo dwe konnen ke gen tan sistèm ak tan RTC. RTC (Real Time Clock) se yon ti jan nan yon non etranj epi yo pa patikilyèman egzat pou yon revèy pyès ki nan konpitè.

Revèy pyès ki nan konpitè kouri kontinyèlman, menm lè òdinatè a etenn, lè l sèvi avèk batri a sou plak mèr sistèm lan. Fonksyon prensipal RTC se pou estoke tan lè yon koneksyon ak yon sèvè tan pa disponib. Nan epòk sa yo lè li te enposib konekte ak yon sèvè tan atravè entènèt la, chak òdinatè te dwe gen yon revèy egzat entèn. Sistèm operasyon yo te gen aksè a RTC a pandan demaraj, epi itilizatè a te oblije mete tan sistèm nan lè l sèvi avèk koòdone konfigirasyon pyès ki nan konpitè BIOS la pou asire li kòrèk.

Revèy pyès ki nan konpitè pa konprann konsèp zòn tan yo; RTC estoke sèlman tan, pa zòn tan oswa konpanse ak UTC (Kowòdone Tan Inivèsèl, ki rele tou GMT oswa Greenwich Mean Time). Ou ka enstale RTC lè l sèvi avèk yon zouti ke mwen pral diskite pita nan atik sa a.

Tan sistèm se tan ke OS la montre nan revèy GUI sou Desktop ou a, nan pwodiksyon an nan lòd dat la, nan horodatage boutèy demi lit. Sa a aplike tou nan moman yo lè dosye yo kreye, modifye, ak louvri.

Nan paj la nonm pou rtc gen yon deskripsyon konplè RTC ak revèy sistèm lan.

Ki sa ki nan ak NTP?

Òdinatè atravè mond lan itilize NTP (Network Time Protocol) pou senkronize tan yo ak revèy referans estanda sou entènèt la lè l sèvi avèk yon yerachi nan serveurs NTP. Sèvè tan prensipal yo sitiye nan Kouch 1, epi yo konekte dirèkteman ak divès sèvis tan nasyonal nan Kouch 0 atravè satelit, radyo, oswa menm modèm sou liy telefòn. Sèvis tan nan nivo 0 ta ka yon revèy atomik, yon reseptè radyo ki branche sou siyal ki transmèt pa revèy atomik, oswa yon reseptè GPS ki sèvi ak siyal revèy ki gen gwo presizyon transmèt pa satelit GPS.

A vas majorite de serveurs referans gen plizyè milye piblik NTP stratum 2 serveurs ouvè a tout moun. Anpil òganizasyon ak itilizatè (mwen enkli ladan li) ak yon gwo kantite lame ki mande pou yon sèvè NTP chwazi enstale pwòp serveurs tan yo, kidonk sèlman yon sèl lame lokal jwenn aksè nan strat 2 oswa 3. sèvè tan lokal yo. Nan ka rezo lakay mwen, sa a se yon sèvè kouch 3.

Plizyè aplikasyon NTP

Aplikasyon orijinal NTP se ntpd. Lè sa a, li te ansanm ak de plus, chronyd ak systemd-timesyncd. Tout twa senkronize localhost tan ak yon sèvè tan NTP. Sèvis systemd-timesyncd la pa serye tankou chronyd, men li ase pou pifò rezon. Si RTC a pa senkronize, li ka piti piti ajiste tan sistèm nan senkronize ak sèvè NTP a lè tan sistèm lokal la deplase yon ti kras. Sèvis systemd-timesync la pa ka itilize kòm yon sèvè tan.

Kwonik se yon aplikasyon NTP ki gen de pwogram: Chronyd daemon ak yon koòdone liy lòd ki rele chronyc. Chrony gen kèk karakteristik ki tou senpleman endispansab nan anpil ka:

  • Chrony ka senkronize ak yon sèvè tan pi vit pase ansyen sèvis ntpd la. Sa a bon pou laptops oswa Desktop ki pa kouri tout tan tout tan an.
  • Li ka konpanse pou fluctuations nan vitès revèy, tankou lè lame a dòmi oswa antre nan mòd dòmi, oswa lè vitès revèy la chanje akòz so frekans, ki ralanti vitès revèy yo anba chaj ki ba.
  • Li rezoud pwoblèm distribisyon ki gen rapò ak koneksyon rezo enstab oswa konjesyon rezo.
  • Li kontwole latansi rezo a.
  • Apre premye senkronizasyon tan an, Chrony pa janm sispann revèy la. Sa a bay distribisyon ki estab ak konsistan pou anpil sèvis ak aplikasyon sistèm.
  • Chrony ka travay menm san yon koneksyon rezo. Nan ka sa a, lame lokal la oswa sèvè ka mete ajou manyèlman.
  • Chrony ka aji kòm yon sèvè NTP.

Yon fwa ankò, NTP se yon pwotokòl ki ka aplike sou yon lame Linux lè l sèvi avèk Chrony oswa systemd-timesyncd.

Pakè NTP, Chrony, ak systemd-timesyncd RPM yo disponib nan depo Fedora estanda yo. Systemd-udev RPM a se yon manadjè evènman nwayo ki enstale pa default sou Fedora, men li pa obligatwa pou itilize.

Ou ka enstale tout twa epi chanje ant yo, men sa a pral kreye tèt fè mal nesesè. Se konsa, li pi bon pa fè sa. Version modèn Fedora, CentOS ak RHEL te chanje an Chrony kòm yon aplikasyon estanda, epi anplis yo gen systemd-timesyncd. Mwen panse ke Chrony travay byen, bay yon pi bon koòdone pase sèvis NTP, bay plis enfòmasyon ak pi gwo kontwòl, ki pral sètènman fè apèl kont administratè sistèm yo.

Enfim sèvis NTP

Lame ou a ka deja gen yon sèvis NTP ap kouri. Si se konsa, ou bezwen enfim li anvan ou chanje nan yon lòt bagay. Mwen te gen chronyd kouri Se konsa, mwen te itilize kòmandman sa yo sispann ak enfim li. Kouri kòmandman ki apwopriye yo pou kèlkeswa demon NTP w ap kouri sou lame ou a:

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

Tcheke si sèvis la sispann ak enfim:

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

Tcheke estati anvan ou kòmanse

Estati senkronizasyon revèy sistèm lan pèmèt ou detèmine si sèvis NTP la ap kouri. Kòm ou poko kòmanse NTP, lòd timesync-status la pral allusion sou sa a:

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

Yon demann estati dirèk bay enfòmasyon enpòtan. Pou egzanp, lòd timedatectl la ki pa gen okenn agiman oswa paramèt egzekite sou kòmand estati a pa default:

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

Sa ap ba ou lè lokal lame w la, lè UTC, ak lè RTC. Nan ka sa a, tan sistèm lan fikse nan zòn tan Amerik/New_York (TZ), RTC a mete nan zòn lè lokal la, epi sèvis NTP a pa aktif. Tan RTC a te kòmanse devye yon ti kras nan tan sistèm lan. Sa a nòmal pou sistèm ki gen revèy yo pa te senkronize. Kantite konpanse sou lame a depann de tan ki pase depi sistèm lan te senkronize dènye.

Nou te resevwa yon avètisman tou sou itilizasyon lè lokal pou RTC - sa a aplikab pou chanjman nan zòn lè ak paramèt lè vapè. Si òdinatè a etenn lè chanjman yo bezwen fè, lè RTC a p ap chanje. Men, pou serveurs oswa lòt lame ki travay nan revèy la, sa a se pa yon pwoblèm nan tout. Anplis de sa, nenpòt sèvis ki bay senkronizasyon tan NTP pral ajiste tan lame a pandan faz demaraj inisyal la, pou yon fwa demaraj konplè, lè a pral kòrèk ankò.

Mete zòn lè a

Tipikman, ou presize zòn tan an pandan pwosedi enstalasyon an, epi ou pa oblije chanje li pita. Sepandan, gen kèk fwa lè ou bezwen chanje zòn tan ou. Gen plizyè zouti ki ka ede. Linux itilize fichye zòn lè pou detèmine zòn lè lokal lame a. Fichye sa yo sitiye nan anyè a /usr/share/zoneinfo. Pa default, pou zòn tan mwen an, sistèm nan ekri sa a: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Men, ou pa bezwen konnen sibtilite sa yo chanje zòn tan ou.

Kle a se konnen non ofisyèl zòn lè pou kote ou ye a ak lòd ki koresponn lan. Ann di ou vle chanje zòn lè a nan 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>

Koulye a, ou ka mete zòn tan ou. Mwen te itilize lòd dat la pou tcheke chanjman, men ou ka tou itilize 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 ~]#

Kounye a ou ka chanje zòn tan lame w la an lè lokal ankò.

systemd-timesyncd

Systemd timesync daemon bay yon aplikasyon NTP ki fasil pou jere nan yon kontèks systemd. Li enstale pa default sou Fedora ak Ubuntu. Sepandan, li kouri pa default sèlman sou Ubuntu. Mwen pa sèten sou lòt distribisyon. Ou ka tcheke pou tèt ou:

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

Konfigirasyon systemd-timesyncd

Fichye konfigirasyon pou systemd-timesyncd se /etc/systemd/timesyncd.conf. Sa a se yon dosye senp ak mwens opsyon pèmèt pase ansyen sèvis NTP ak chronyd yo. Men sa ki nan fichye sa a (san chanjman adisyonèl) sou machin vityèl Fedora mwen an:

#  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

Sèl seksyon li genyen lòt pase kòmantè se [Tan]. Tout lòt liy yo kòmante soti. Sa yo se valè default yo epi yo pa bezwen chanje (sòf si ou gen yon rezon pou fè sa). Si ou pa gen yon sèvè tan NTP defini nan liy NTP=, Fedora pa default nan sèvè tan Fedora. Mwen anjeneral ajoute sèvè tan mwen an:

NTP=myntpserver

Kouri timesync

Ou ka kòmanse epi fè systemd-timesyncd aktif tankou sa a:

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

Mete revèy pyès ki nan konpitè

Men sa sitiyasyon an sanble apre kouri 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    

Okòmansman, diferans ki genyen ant RTC ak lè lokal (EDT) se mwens pase yon segonn, ak diferans lan ogmante pa yon koup plis segonn sou kèk jou kap vini yo. Piske RTC pa gen okenn konsèp nan zòn tan, lòd timedatectl la dwe fè yon konparezon pou detèmine zòn tan ki kòrèk la. Si lè RTC a pa egzakteman koresponn ak lè lokal, Lè sa a, li pa koresponn ak zòn lè lokal la.

Chèche plis enfòmasyon, mwen tcheke estati systemd-timesync epi mwen jwenn sa a:

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

Remake mesaj boutèy la ki di tan sistèm lan pa fikse oswa yo te reset. Sèvis Timesync la fikse tan sistèm lan ki baze sou yon timestamp. Timestamps yo konsève pa demon timesync la epi yo kreye chak fwa yon senkronizasyon siksè rive.

Kòmandman timedatectl la pa gen kapasite pou pran valè revèy pyès ki nan konpitè nan revèy sistèm lan. Li ka sèlman mete lè ak dat nan valè ki te antre nan liy lòd la. Ou ka mete RTC a menm valè ak tan sistèm lan lè l sèvi avèk lòd hwclock la:

[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

Opsyon --localtime di revèy pyès ki nan konpitè pou montre lè lokal olye ke UTC.

Poukisa ou bezwen RTC nan tout?

Nenpòt aplikasyon NTP pral mete revèy sistèm lan pandan demaraj. E poukisa lè sa a RTC? Sa a se pa totalman vre: sa a pral rive sèlman si ou gen yon koneksyon rezo a sèvè tan an. Sepandan, anpil sistèm pa gen aksè konstan nan yon koneksyon rezo, kidonk yon revèy pyès ki nan konpitè itil pou Linux ka fikse tan sistèm lan ki baze sou li. Sa a se pi bon pase mete tan an manyèlman, menm si li ka devye de tan reyèl.

Konklizyon

Atik sa a kouvri kèk zouti pou jere dat, lè, ak zòn lè. Zouti systemd-timesyncd la bay yon kliyan NTP ki ka senkronize tan an sou lame lokal la ak yon sèvè NTP. Sepandan, systemd-timesyncd pa bay yon sèvis sèvè, kidonk si ou bezwen yon sèvè NTP sou rezo ou, ou dwe itilize yon lòt bagay - tankou Chrony - pou aji kòm sèvè a.

Mwen prefere gen yon sèl aplikasyon pou nenpòt sèvis sou rezo mwen an, kidonk mwen itilize Chrony. Si ou pa bezwen yon sèvè NTP lokal oswa si ou pa gen lide itilize Chrony kòm sèvè a ak systemd-timesyncd kòm kliyan SNTP. Apre yo tout, pa gen okenn bezwen sèvi ak karakteristik adisyonèl nan Chrony kòm yon kliyan si ou satisfè ak fonksyonalite a nan systemd-timesyncd.

Yon lòt nòt: ou pa oblije sèvi ak zouti systemd pou aplike NTP. Ou ka itilize yon vèsyon ki pi gran nan ntpd, Chrony, oswa yon lòt aplikasyon NTP. Apre yo tout, systemd konsiste de yon gwo kantite sèvis; anpil nan yo se opsyonèl, kidonk ou ka enfim yo epi sèvi ak yon lòt bagay pito. Sa a se pa yon gwo mons monolitik. Ou ka pa renmen systemd oswa pati nan li, men ou ta dwe pran yon desizyon enfòme.

Mwen renmen aplikasyon NTP systemd a, men mwen pito Chrony paske li adapte bezwen mwen pi byen. Li nan Linux, ti bebe -)

Sou Dwa yo nan Piblisite

VDSina ofri sèvè pou nenpòt travay, yon seleksyon gwo sistèm opere pou enstalasyon otomatik, li posib enstale nenpòt OS soti nan pwòp ou yo ISO, konfòtab panèl kontwòl pwòp devlopman ak peman chak jou. Se pou nou raple nou ke nou gen sèvè etènèl ki definitivman etènèl 😉

Linux Tan Synchronization: NTP, Chrony ak systemd-timesyncd

Sous: www.habr.com

Add nouvo kòmantè