Usawazishaji wa Wakati wa Linux: NTP, Chrony na systemd-timesyncd

Usawazishaji wa Wakati wa Linux: NTP, Chrony na systemd-timesyncd
Watu wengi hufuatilia muda. Tunaamka kwa wakati ili kukamilisha mila zetu za asubuhi na kwenda kazini, kuchukua mapumziko ya mchana, kufikia tarehe za mwisho za mradi, kusherehekea siku za kuzaliwa na likizo, kupanda ndege, na kadhalika.

Zaidi ya hayo: baadhi yetu tunazingatia wakati. Saa yangu inaendeshwa na nishati ya jua na inapata muda sahihi kutoka Taasisi ya Kitaifa ya Viwango na Teknolojia (NIST) hadi Fort Collins, Colorado kupitia redio ya longwave WWVB. Ishara za saa zimelandanishwa na saa ya atomiki, ambayo pia iko Fort Collins. Fitbit yangu inasawazisha na simu yangu ambayo inasawazisha na seva NTP, ambayo hatimaye inasawazisha na saa ya atomiki.

Vifaa hufuatilia wakati pia

Kuna sababu nyingi kwa nini vifaa na kompyuta zetu zinahitaji wakati sahihi. Kwa mfano, katika benki, soko la hisa, na biashara nyingine za kifedha, shughuli lazima zifanyike kwa utaratibu unaofaa, na mlolongo sahihi wa wakati ni muhimu kwa hili.

Simu zetu, kompyuta kibao, magari, mifumo ya GPS na kompyuta zote zinahitaji mipangilio sahihi ya wakati na tarehe. Ninataka saa iliyo kwenye eneo-kazi la kompyuta yangu ionyeshe wakati sahihi. Ninataka vikumbusho vionekane kwenye kalenda yangu ya karibu kwa wakati ufaao. Wakati sahihi pia huhakikisha kuwa kazi za cron na systemd zinafanya kazi kwa wakati sahihi.

Tarehe na wakati pia ni muhimu kwa ukataji miti, kwa hivyo ni rahisi kidogo kupata kumbukumbu fulani kulingana na tarehe na wakati. Kwa mfano, mara moja nilifanya kazi katika DevOps (haikuitwa hivyo wakati huo) na nilikuwa nikiweka mfumo wa barua pepe katika jimbo la North Carolina. Tulikuwa tukichakata zaidi ya barua pepe milioni 20 kwa siku. Kufuatilia barua pepe kupitia mfululizo wa seva, au kubainisha mfuatano kamili wa matukio kwa kutumia faili za kumbukumbu kwenye wapangishi waliotawanywa kijiografia, kunaweza kuwa rahisi zaidi ikiwa kompyuta husika zitasawazishwa kwa wakati.

Wakati mmoja - masaa mengi

Wapangishi wa Linux lazima wazingatie kwamba kuna wakati wa mfumo na wakati wa RTC. RTC (Saa ya Wakati Halisi) ni jina la kushangaza kidogo na sio sahihi sana kwa saa ya vifaa.

Saa ya vifaa huendesha kwa kuendelea hata wakati kompyuta imezimwa, kwa kutumia betri kwenye ubao wa mama wa mfumo. Kazi kuu ya RTC ni kuhifadhi wakati wakati muunganisho kwenye seva ya muda haupatikani. Katika siku ambazo haikuwezekana kuunganisha kwenye seva ya muda kwenye mtandao, kila kompyuta ilipaswa kuwa na saa sahihi ya ndani. Mifumo ya uendeshaji ilibidi kufikia RTC wakati wa kuwasha na mtumiaji alilazimika kuweka mwenyewe wakati wa mfumo kwa kutumia kiolesura cha usanidi wa maunzi ya BIOS ili kuhakikisha kuwa ni sahihi.

Saa za vifaa hazielewi dhana ya maeneo ya saa; RTC huhifadhi tu saa, si saa za eneo au kurekebisha kutoka kwa UTC (Coordinated Universal Time, pia inajulikana kama GMT au Greenwich Mean Time). Unaweza kusakinisha RTC kwa kutumia zana ambayo nitashughulikia baadaye katika makala hii.

Muda wa mfumo ni wakati ambao OS huonyesha kwenye saa ya GUI kwenye eneo-kazi lako, katika matokeo ya amri ya tarehe, katika alama za nyakati za kumbukumbu. Hii inatumika pia wakati faili zinaundwa, kurekebishwa na kufunguliwa.

Kwenye ukurasa mtu kwa rtc kuna maelezo kamili ya RTC na saa ya mfumo.

NTP ina nini?

Kompyuta ulimwenguni pote hutumia NTP (Itifaki ya Muda wa Mtandao) ili kusawazisha muda wao na saa za kawaida za marejeleo kwenye Mtandao kwa kutumia safu ya seva za NTP. Seva za muda kuu ziko kwenye safu ya 1 na zimeunganishwa moja kwa moja na huduma mbalimbali za wakati za kitaifa kwenye safu ya 0 kupitia setilaiti, redio au hata modemu kupitia laini za simu. Huduma za saa za safu 0 zinaweza kuwa saa ya atomiki, kipokezi cha redio ambacho kimeelekezwa kwa mawimbi yanayopitishwa na saa za atomiki, au kipokezi cha GPS kinachotumia mawimbi sahihi zaidi ya saa yanayotumwa na satelaiti za GPS.

Idadi kubwa ya seva za marejeleo zina seva elfu kadhaa za umma za NTP 2 zilizofunguliwa kwa umma. Mashirika na watumiaji wengi (mimi mwenyewe nikiwemo) walio na wapangishi wengi wanaohitaji seva ya NTP huchagua kusanidi seva zao za wakati ili seva pangishi moja tu ya ndani inafikia tabaka la 2 au 3. Kisha wanasanidi nodi zilizosalia kwenye mtandao ili kutumia za ndani. seva ya wakati. Kwa upande wa mtandao wangu wa nyumbani, hii ni safu ya 3 ya seva.

Utekelezaji mbalimbali wa NTP

Utekelezaji wa awali wa NTP ni ntpd. Kisha iliunganishwa na mbili mpya zaidi, chronyd na systemd-timesyncd. Zote tatu zinasawazisha muda wa mwenyeji wa ndani na seva ya saa ya NTP. Huduma ya systemd-timesyncd si ya kuaminika kama chronyd, lakini ni nzuri ya kutosha kwa madhumuni mengi. Ikiwa RTC haijasawazishwa, inaweza kurekebisha muda wa mfumo hatua kwa hatua ili kusawazisha na seva ya NTP wakati muda wa mfumo wa ndani unasogea kidogo. Huduma ya mfumo wa kusawazisha haiwezi kutumika kama seva ya saa.

Chrony ni utekelezaji wa NTP ambao una programu mbili: chronyd daemon na kiolesura cha mstari wa amri kinachoitwa chronyc. Chrony ina baadhi ya vipengele ambavyo ni muhimu katika hali nyingi:

  • Chrony inaweza kusawazisha na seva ya muda haraka zaidi kuliko huduma ya zamani ya ntpd. Hii ni nzuri kwa kompyuta za mkononi au kompyuta za mezani ambazo hazifanyi kazi kila wakati.
  • Inaweza kufidia mabadiliko ya saa, kama vile seva pangishi inapolala au inapoingia katika hali ya usingizi, au saa inapobadilika kutokana na kurukaruka mara kwa mara, ambayo hupunguza kasi ya saa kwenye mizigo ya chini.
  • Hutatua matatizo ya muda yanayohusiana na muunganisho wa mtandao usio imara au msongamano wa mtandao.
  • Inadhibiti ucheleweshaji wa mtandao.
  • Baada ya usawazishaji wa muda wa kwanza, Chrony haachi kamwe saa. Hii hutoa muda thabiti na thabiti kwa huduma na programu nyingi za mfumo.
  • Chrony inaweza kufanya kazi hata bila muunganisho wa mtandao. Katika kesi hii, mwenyeji au seva ya ndani inaweza kusasishwa kwa mikono.
  • Chrony inaweza kufanya kama seva ya NTP.

Kwa mara nyingine tena, NTP ni itifaki inayoweza kutekelezwa kwenye seva pangishi ya Linux kwa kutumia Chrony au systemd-timesyncd.

NTP, Chrony, na systemd-timesyncd RPMs zinapatikana katika hazina za kawaida za Fedora. Systemd-udev RPM ni meneja wa hafla ya kernel ambayo imewekwa kwa chaguo-msingi kwenye Fedora, lakini ni ya hiari.

Unaweza kufunga zote tatu na kubadili kati yao, lakini hii itaunda maumivu ya kichwa ya ziada. Kwa hivyo ni bora sio. Matoleo ya kisasa ya Fedora, CentOS, na RHEL yamehamia Chrony kama utekelezaji chaguo-msingi, na pia yana systemd-timesyncd. Ninaona Chrony kufanya kazi vizuri, kutoa kiolesura bora kuliko huduma ya NTP, kutoa habari zaidi na udhibiti, ambayo wasimamizi wa mfumo watafurahiya.

Inalemaza Huduma za NTP

Huduma ya NTP inaweza kuwa tayari inaendeshwa kwa mwenyeji wako. Ikiwa ndivyo, unahitaji kuizima kabla ya kubadili kitu kingine. Nilikuwa na chronyd inayoendesha kwa hivyo nilitumia amri zifuatazo kuisimamisha na kuizima. Tekeleza amri zinazofaa kwa daemoni yoyote ya NTP unayoendesha kwenye mwenyeji wako:

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

Angalia ikiwa huduma imesimamishwa na imezimwa:

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

Angalia hali kabla ya uzinduzi

Hali ya ulandanishi wa saa ya mfumo hukuruhusu kubainisha kama huduma ya NTP inafanya kazi. Kwa kuwa bado haujaanza NTP, amri ya hali ya timesync itadokeza hivi:

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

Ombi la hali ya moja kwa moja hutoa habari muhimu. Kwa mfano, timedatectl amri bila hoja au chaguzi hutekeleza amri ndogo ya hali kwa chaguo-msingi:

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

Hii itakupa muda wa ndani wa mwenyeji wako, saa ya UTC na saa ya RTC. Katika hali hii, muda wa mfumo umewekwa kwa saa za eneo la Amerika / New_York (TZ), RTC imewekwa kwa saa katika eneo la saa za ndani, na huduma ya NTP haitumiki. Muda wa RTC umeanza kupotoka kidogo kutoka kwa wakati wa mfumo. Hii ni kawaida kwa mifumo ambayo saa zake hazijasawazishwa. Kiasi cha urekebishaji kwenye seva pangishi inategemea muda ambao umepita tangu mfumo ulisawazishwe mara ya mwisho.

Pia tulipokea onyo kuhusu kutumia saa za ndani kwa RTC - hii inatumika kwa mabadiliko ya saa za eneo na mipangilio ya DST. Ikiwa kompyuta imezimwa wakati mabadiliko yanahitajika kufanywa, RTC haitabadilika. Lakini kwa seva au wahudumu wengine wanaoendesha saa nzima, hii sio shida hata kidogo. Kwa kuongeza, huduma yoyote inayotoa usawazishaji wa muda wa NTP itarekebisha muda wa seva pangishi wakati wa awamu ya kwanza ya uanzishaji, kwa hivyo muda utakuwa sahihi tena baada ya uanzishaji kukamilika.

Kuweka eneo la saa

Kawaida, unataja eneo la wakati wakati wa utaratibu wa ufungaji na huna kazi ya kuibadilisha baadaye. Hata hivyo, kuna wakati unahitaji kubadilisha eneo la saa. Kuna zana kadhaa ambazo zinaweza kusaidia. Linux hutumia faili za saa za eneo ili kubaini saa za eneo la mwenyeji. Faili hizi ziko kwenye saraka /usr/share/zoneinfo. Kwa chaguo-msingi, kwa eneo langu la wakati, mfumo unaagiza hivi: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Lakini hauitaji kujua hila kama hizo ili kubadilisha eneo la saa.

Jambo kuu ni kujua jina rasmi la eneo la eneo lako na amri inayolingana. Hebu tuseme unataka kubadilisha saa za eneo kuwa 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>

Sasa unaweza kuweka saa za eneo. Nilitumia amri ya tarehe kuangalia mabadiliko, lakini pia unaweza kutumia 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 ~]#

Sasa unaweza kubadilisha saa za eneo la mwenyeji wako kurudi kwenye saa za ndani.

systemd-timesyncd

Daemon ya systemd timesync hutoa utekelezaji wa NTP ambao ni rahisi kudhibiti katika muktadha wa mfumo. Imewekwa kwa chaguo-msingi kwenye Fedora na Ubuntu. Walakini, huanza tu kwa chaguo-msingi kwenye Ubuntu. Sina hakika kuhusu usambazaji mwingine. Unaweza kujiangalia mwenyewe:

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

Inasanidi systemd-timesyncd

Faili ya usanidi ya systemd-timesyncd ni /etc/systemd/timesyncd.conf. Hii ni faili rahisi iliyo na chaguo chache kuwezeshwa kuliko NTP ya zamani na huduma za chronyd. Hapa kuna yaliyomo kwenye faili hii (bila marekebisho zaidi) kwenye Fedora VM yangu:

#  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

Sehemu pekee iliyomo, kando na maoni, ni [Muda]. Mistari mingine yote imetolewa maoni. Hizi ndizo maadili chaguo-msingi na hazipaswi kubadilishwa (isipokuwa una sababu ya). Iwapo huna seva ya saa ya NTP iliyofafanuliwa katika mstari wa NTP=, Fedora inabadilika kuwa seva mbadala ya wakati wa Fedora. Kawaida mimi huongeza seva yangu ya wakati:

NTP=myntpserver

Inaendesha usawazishaji wa saa

Unaweza kuanza na kufanya systemd-timesyncd kufanya kazi kama hii:

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

Kuweka saa ya vifaa

Hivi ndivyo hali inavyoonekana baada ya kutumia 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    

Hapo awali, tofauti kati ya RTC na saa ya ndani (EDT) ni chini ya sekunde moja, na tofauti hiyo huongezeka kwa sekunde kadhaa katika siku chache zijazo. Kwa kuwa hakuna dhana ya saa za eneo katika RTC, amri ya timedatectl lazima ilinganishe ili kubainisha saa za eneo sahihi. Ikiwa saa ya RTC hailingani kabisa na saa ya ndani, basi hailingani na saa za eneo pia.

Kutafuta habari zaidi, niliangalia hali ya systemd-timesync na nikapata hii:

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

Angalia ujumbe wa kumbukumbu unaosema kwamba muda wa mfumo haujawekwa au umewekwa upya. Huduma ya Timesync huweka muda wa mfumo kulingana na muhuri wa muda. Mihuri ya muda hudumishwa na daemon ya saa na huundwa kwa kila usawazishaji uliofaulu.

Amri ya timedatectl haina njia ya kuchukua thamani ya saa ya vifaa kutoka kwa saa ya mfumo. Inaweza tu kuweka wakati na tarehe kutoka kwa thamani iliyoingia kwenye mstari wa amri. Unaweza kuweka RTC kwa thamani sawa na wakati wa mfumo kwa kutumia amri ya 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

Chaguo --localtime huambia saa ya maunzi ionyeshe saa za ndani, si UTC.

Kwa nini unahitaji RTC kabisa?

Utekelezaji wowote wa NTP utaweka saa ya mfumo wakati wa kuanza. Na kwa nini basi RTC? Hii sio kweli kabisa: hii itatokea tu ikiwa una muunganisho wa mtandao kwenye seva ya wakati. Hata hivyo, mifumo mingi huwa haina ufikiaji wa muunganisho wa mtandao kila wakati, kwa hivyo saa ya maunzi ni muhimu kwa Linux kutumia kuweka muda wa mfumo. Hii ni bora kuliko kuweka wakati mwenyewe, ingawa inaweza kupotoka kutoka kwa wakati halisi.

Hitimisho

Makala haya yamekagua baadhi ya zana za kuchezea tarehe, saa na saa za maeneo. Zana ya systemd-timesyncd hutoa kiteja cha NTP ambacho kinaweza kusawazisha saa kwenye seva pangishi ya ndani na seva ya NTP. Hata hivyo, systemd-timesyncd haitoi huduma ya seva, kwa hivyo ikiwa unahitaji seva ya NTP kwenye mtandao wako, lazima utumie kitu kingine, kama vile Chrony, ili kufanya kazi kama seva.

Ninapendelea kuwa na utekelezaji mmoja wa huduma yoyote kwenye mtandao wangu, kwa hivyo mimi hutumia Chrony. Ikiwa hauitaji seva ya ndani ya NTP, au ikiwa haujali kutumia Chrony kama seva na systemd-timesyncd kama mteja wa SNTP. Baada ya yote, hakuna haja ya kutumia vipengele vya ziada vya Chrony kama mteja ikiwa umeridhika na utendakazi wa systemd-timesyncd.

Ujumbe mwingine: hauhitajiki kutumia zana za mfumo kutekeleza NTP. Unaweza kutumia toleo la zamani la ntpd, Chrony, au utekelezaji mwingine wa NTP. Baada ya yote, systemd ina idadi kubwa ya huduma; nyingi ni za hiari, kwa hivyo unaweza kuzima na kutumia kitu kingine badala yake. Hii sio monster kubwa ya monolithic. Huenda usipende systemd au sehemu zake, lakini unapaswa kufanya uamuzi sahihi.

Ninapenda utekelezaji wa systemd wa NTP, lakini napendelea Chrony kwa sababu inafaa mahitaji yangu bora. Ni Linux, mtoto -)

Haki za Matangazo

VDSina inatoa seva kwa kazi yoyote, uteuzi mkubwa wa mifumo ya uendeshaji kwa ajili ya ufungaji wa moja kwa moja, inawezekana kufunga OS yoyote kutoka kwako mwenyewe ISO, starehe jopo la kudhibiti maendeleo yako mwenyewe na malipo ya kila siku. Kumbuka kwamba tuna seva za milele ambazo hakika hazina wakati πŸ˜‰

Usawazishaji wa Wakati wa Linux: NTP, Chrony na systemd-timesyncd

Chanzo: mapenzi.com

Kuongeza maoni