Sinkronisasi Wektu Linux: NTP, Chrony lan systemd-timesyncd

Sinkronisasi Wektu Linux: NTP, Chrony lan systemd-timesyncd
Umume wong nglacak wektu. Kita tangi ing wektu kanggo ngrampungake ritual esuk lan mangkat kerja, istirahat nedha awan, ngrampungake tenggat wektu proyek, ngrayakake ulang tahun lan preian, numpak pesawat, lan liya-liyane.

Kajaba iku: sawetara kita kepengin banget karo wektu. Jam tanganku didhukung dening tenaga surya lan entuk wektu sing akurat saka Institut Standar lan Teknologi Nasional (NIST) menyang Fort Collins, Colorado liwat radio gelombang panjang WWVB. Sinyal wektu disinkronake karo jam atom, uga ana ing Fort Collins. Fitbitku nyelarasake karo telponku sing nyelarasake karo server NTP, sing pungkasane nyinkronake karo jam atom.

Piranti uga nglacak wektu

Ana akeh alasan kenapa piranti lan komputer kita butuh wektu sing akurat. Contone, ing perbankan, pasar saham, lan bisnis finansial liyane, transaksi kudu ditindakake kanthi urutan sing tepat, lan urutan wektu sing akurat penting kanggo iki.

Telpon, tablet, mobil, sistem GPS lan komputer kita kabeh mbutuhake setelan wektu lan tanggal sing akurat. Aku pengin jam ing desktop komputer nuduhake wektu sing bener. Aku pengin pangeling katon ing tanggalan lokal ing wektu sing tepat. Wektu sing bener uga mesthekake yen proyek cron lan systemd mlaku ing wektu sing bener.

Tanggal lan wektu uga penting kanggo logging, mula luwih gampang golek log tartamtu adhedhasar tanggal lan wektu. Contone, aku tau kerja ing DevOps (ora diarani nalika iku) lan nyetel sistem email ing negara bagian North Carolina. Kita biyen ngolah luwih saka 20 yuta email saben dina. Nelusuri e-mail liwat seri saka server, utawa nemtokake urutan pas acara nggunakake file log ing sarwa dumadi geografis buyar, bisa dadi luwih gampang yen komputer pamilike diselarasake ing wektu.

Siji wektu - akeh jam

Host Linux kudu nganggep manawa ana wektu sistem lan wektu RTC. RTC (Jam Wektu Nyata) iku jeneng rada aneh lan ora akurat banget kanggo jam hardware.

Jam hardware mlaku terus sanajan komputer dipateni, nggunakake baterei ing motherboard sistem. Fungsi utama RTC kanggo nyimpen wektu nalika sambungan menyang server wektu ora kasedhiya. Ing dina nalika ora bisa nyambung menyang server wektu liwat Internet, saben komputer kudu duwe jam internal sing akurat. Sistem operasi kudu ngakses RTC nalika boot, lan pangguna kudu nyetel wektu sistem kanthi manual nggunakake antarmuka konfigurasi hardware BIOS kanggo mesthekake yen iku bener.

Jam hardware ora ngerti konsep zona wektu; RTC mung nyimpen wektu, dudu zona wektu utawa ngimbangi saka UTC (Coordinated Universal Time, uga dikenal minangka GMT utawa Greenwich Mean Time). Sampeyan bisa nginstal RTC nggunakake alat sing bakal dakkandhakake mengko ing artikel iki.

Wektu sistem yaiku wektu sing ditampilake OS ing jam GUI ing desktop, ing output printah tanggal, ing stempel wektu log. Iki uga ditrapake nalika file digawe, diowahi, lan dibukak.

Ing kaca wong kanggo rtc ana gambaran lengkap RTC lan jam sistem.

Apa karo NTP?

Komputer ing saindenging jagad nggunakake NTP (Network Time Protocol) kanggo nyinkronake wektu karo jam referensi standar liwat Internet nggunakake hirarki server NTP. Server wektu utama ana ing lapisan 1 lan langsung nyambung menyang macem-macem layanan wektu nasional ing lapisan 0 liwat satelit, radio utawa malah modem liwat saluran telpon. Layanan wektu Layer 0 bisa dadi jam atom, panrima radio sing disetel kanggo sinyal sing dikirim dening jam atom, utawa panrima GPS sing nggunakake sinyal jam sing akurat banget sing dikirim dening satelit GPS.

Umume server referensi duwe sawetara ewu server NTP stratum 2 umum sing mbukak kanggo umum. Akeh organisasi lan pangguna (kalebu dhewe) kanthi akeh host sing mbutuhake server NTP milih nyetel server wektu dhewe supaya mung siji host lokal ngakses stratum 2 utawa 3. Banjur ngatur simpul sing isih ana ing jaringan kanggo nggunakake lokal. server wektu. Ing kasus jaringan asalku, iki minangka server lapisan 3.

Macem-macem implementasi NTP

Implementasi asli NTP yaiku ntpd. Banjur digabung karo loro sing luwih anyar, chronyd lan systemd-timesyncd. Kabeh telu nyinkronake wektu host lokal karo server wektu NTP. Layanan systemd-timesyncd ora bisa dipercaya kaya chronyd, nanging cukup apik kanggo umume tujuan. Yen RTC ora sinkron, bisa mboko sithik nyetel wektu sistem kanggo nyinkronake karo server NTP nalika wektu sistem lokal drifts rada. Layanan systemd-timesync ora bisa digunakake minangka server wektu.

Kroni minangka implementasine NTP sing ngemot rong program: daemon chronyd lan antarmuka baris perintah sing diarani chronyc. Chrony duwe sawetara fitur sing penting banget ing pirang-pirang kasus:

  • Chrony bisa nyinkronake karo server wektu luwih cepet tinimbang layanan ntpd lawas. Iki apik kanggo laptop utawa desktop sing ora bisa digunakake kabeh wektu.
  • Bisa ngimbangi fluktuasi jam, kayata nalika tuan rumah turu utawa mlebu mode ngaso, utawa nalika jam ganti amarga frekuensi mlumpat, sing nyuda jam kanthi beban sing sithik.
  • Ngatasi masalah wektu sing ana gandhengane karo sambungan jaringan sing ora stabil utawa kemacetan jaringan.
  • Iku ngatur wektu tundha jaringan.
  • Sawise sinkronisasi wektu wiwitan, Chrony ora nate mandhegake jam kasebut. Iki menehi timeslots stabil lan konsisten kanggo akeh layanan sistem lan aplikasi.
  • Chrony bisa digunakake sanajan tanpa sambungan jaringan. Ing kasus iki, host utawa server lokal bisa dianyari kanthi manual.
  • Chrony bisa tumindak minangka server NTP.

Sawise maneh, NTP minangka protokol sing bisa ditindakake ing host Linux nggunakake Chrony utawa systemd-timesyncd.

RPM NTP, Chrony, lan systemd-timesyncd kasedhiya ing repositori Fedora standar. Systemd-udev RPM minangka manajer acara kernel sing diinstal kanthi standar ing Fedora, nanging opsional.

Sampeyan bisa nginstal kabeh telu lan ngalih ing antarane, nanging iki bakal nggawe sirah ekstra. Dadi luwih becik ora. Rilis modern Fedora, CentOS, lan RHEL wis pindhah menyang Chrony minangka implementasine standar, lan uga duwe systemd-timesyncd. Aku nemokake Chrony bisa digunakake kanthi apik, nyedhiyakake antarmuka sing luwih apik tinimbang layanan NTP, nyedhiyakake informasi lan kontrol luwih akeh, sing mesthi bakal disenengi para administrator sistem.

Mateni Layanan NTP

Layanan NTP bisa uga wis mlaku ing host sampeyan. Yen mangkono, sampeyan kudu mateni sadurunge ngalih menyang liyane. Aku wis chronyd mlaku supaya aku nggunakake printah ing ngisor iki kanggo mungkasi lan mateni. Jalanake perintah sing cocog kanggo daemon NTP sing sampeyan lakoni ing host sampeyan:

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

Priksa manawa layanan kasebut mandheg lan dipateni:

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

Priksa status sadurunge diluncurake

Status sinkronisasi jam sistem ngidini sampeyan nemtokake manawa layanan NTP mlaku. Amarga sampeyan durung miwiti NTP, printah timesync-status bakal menehi pitunjuk babagan iki:

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

Panjaluk status langsung menehi informasi penting. Contone, printah timedatectl tanpa argumen utawa opsi nglakokake subcommand status kanthi standar:

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

Iki bakal menehi wektu lokal kanggo host, wektu UTC, lan wektu RTC. Ing kasus iki, wektu sistem disetel menyang zona wektu Amerika / New_York (TZ), RTC disetel kanggo wektu ing zona wektu lokal, lan layanan NTP ora aktif. Wektu RTC wis wiwit nyimpang rada saka wektu sistem. Iki normal kanggo sistem sing jam ora disinkronake. Jumlah offset ing host gumantung ing wektu sing wis liwati wiwit sistem pungkasan diselarasake.

Kita uga nampa bebaya babagan nggunakake wektu lokal kanggo RTC - iki ditrapake kanggo owah-owahan zona wektu lan setelan DST. Yen komputer dipateni nalika owah-owahan kudu digawe, RTC ora bakal ngganti. Nanging kanggo server utawa host liyane sing mbukak watara jam, iki ora masalah ing kabeh. Kajaba iku, layanan apa wae sing nyedhiyakake sinkronisasi wektu NTP bakal nyetel wektu host sajrone tahap wiwitan wiwitan, supaya wektune bakal bener maneh sawise wiwitan rampung.

Nyetel zona wektu

Biasane, sampeyan nemtokake zona wektu sajrone prosedur instalasi lan sampeyan ora duwe tugas kanggo ngganti mengko. Nanging, ana wektu nalika sampeyan kudu ngganti zona wektu. Ana sawetara alat sing bisa mbantu. Linux nggunakake file zona wektu kanggo nemtokake zona wektu lokal host. File-file kasebut ana ing direktori /usr/share/zoneinfo. Kanthi gawan, kanggo zona wektuku, sistem prescribe iki: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Nanging sampeyan ora perlu ngerti subtleties kasebut kanggo ngganti zona wektu.

Sing utama yaiku ngerti jeneng zona wektu resmi kanggo lokasi sampeyan lan prentah sing cocog. Contone, sampeyan pengin ngganti zona wektu menyang 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>

Saiki sampeyan bisa nyetel zona wektu. Aku nggunakake printah tanggal kanggo mriksa owah-owahan, nanging sampeyan uga bisa nggunakake 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 ~]#

Saiki sampeyan bisa ngganti zona wektu host bali menyang wektu lokal.

systemd-timesyncd

Daemon timesync systemd nyedhiyakake implementasi NTP sing gampang diatur ing konteks systemd. Iki diinstal kanthi standar ing Fedora lan Ubuntu. Nanging, mung diwiwiti kanthi standar ing Ubuntu. Aku ora yakin babagan distribusi liyane. Sampeyan bisa mriksa dhewe:

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

Konfigurasi systemd-timesyncd

File konfigurasi kanggo systemd-timesyncd yaiku /etc/systemd/timesyncd.conf. Iki minangka file prasaja kanthi opsi sing luwih sithik tinimbang layanan NTP lan chronyd lawas. Mangkene isi file iki (tanpa modifikasi luwih lanjut) ing 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

Siji-sijine bagean sing ngemot, saliyane komentar, yaiku [Wektu]. Kabeh baris liyane komentar metu. Iki minangka nilai standar lan ora kudu diganti (kajaba sampeyan duwe alesan). Yen sampeyan ora duwe server wektu NTP sing ditetepake ing baris NTP=, standar Fedora menyang server wektu Fedora mundur. Aku biasane nambah server wektu:

NTP=myntpserver

Mlaku timesync

Sampeyan bisa miwiti lan nggawe systemd-timesyncd aktif kaya iki:

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

Nyetel jam hardware

Mangkene kahanan sawise mlaku 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    

Kaping pisanan, prabΓ©dan antarane RTC lan wektu lokal (EDT) kurang saka sedetik, lan bedane mundhak sawetara detik liyane sajrone sawetara dina sabanjure. Amarga ora ana konsep zona wektu ing RTC, printah timedatectl kudu nindakake perbandingan kanggo nemtokake zona wektu sing bener. Yen wektu RTC ora cocog karo wektu lokal, mula uga ora cocog karo zona wektu lokal.

Nggolek informasi luwih lengkap, aku mriksa status systemd-timesync lan nemokake iki:

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

Wigati pesen log sing ujar manawa wektu sistem durung disetel utawa wis direset. Layanan Timesync nyetel wektu sistem adhedhasar cap wektu. Stempel wektu dikelola dening daemon timesync lan digawe ing saben sinkronisasi sing sukses.

Printah timedatectl ora duwe cara kanggo njupuk nilai jam hardware saka jam sistem. Sampeyan mung bisa nyetel wektu lan tanggal saka nilai sing dilebokake ing baris printah. Sampeyan bisa nyetel RTC menyang nilai sing padha karo wektu sistem nggunakake printah 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

Opsi --localtime ngandhani jam hardware kanggo nuduhake wektu lokal, dudu UTC.

Napa sampeyan butuh RTC?

Sembarang implementasi NTP bakal nyetel jam sistem ing wektu wiwitan. Lan kenapa banjur RTC? Iki ora kabeh bener: iki mung bakal kedadeyan yen sampeyan duwe sambungan jaringan menyang server wektu. Nanging, akeh sistem ora tansah nduweni akses menyang sambungan jaringan, mula jam hardware migunani kanggo Linux digunakake kanggo nyetel wektu sistem. Iki luwih apik tinimbang nyetel wektu kanthi manual, sanajan bisa nyimpang saka wektu nyata.

kesimpulan

Artikel iki wis nliti sawetara alat kanggo manipulasi tanggal, wektu, lan zona wektu. Alat systemd-timesyncd nyedhiyakake klien NTP sing bisa nyinkronake wektu ing host lokal karo server NTP. Nanging, systemd-timesyncd ora nyedhiyakake layanan server, dadi yen sampeyan butuh server NTP ing jaringan, sampeyan kudu nggunakake liyane, kayata Chrony, kanggo tumindak minangka server.

Aku luwih seneng duwe implementasi siji kanggo layanan apa wae ing jaringan, mula aku nggunakake Chrony. Yen sampeyan ora mbutuhake server NTP lokal, utawa yen sampeyan ora mikir nggunakake Chrony minangka server lan systemd-timesyncd minangka klien SNTP. Sawise kabeh, ora perlu nggunakake fitur tambahan Chrony minangka klien yen sampeyan puas karo fungsi systemd-timesyncd.

Cathetan liyane: sampeyan ora kudu nggunakake alat systemd kanggo ngetrapake NTP. Sampeyan bisa nggunakake versi lawas saka ntpd, Chrony, utawa implementasine NTP liyane. Sawise kabeh, systemd kasusun saka akeh layanan; akeh sing opsional, supaya sampeyan bisa mateni lan nggunakake liyane tinimbang. Iki ora monster monolithic ageng. Sampeyan bisa uga ora seneng systemd utawa bagΓ©an saka iku, nanging sampeyan kudu nggawe kaputusan informed.

Aku seneng implementasine NTP systemd, nanging aku luwih seneng Chrony amarga luwih cocog karo kabutuhanku. Iku Linux, bayi -)

Ing Hak Iklan

nawakake VDSina server kanggo tugas apa wae, pilihan ageng sistem operasi kanggo instalasi otomatis, iku bisa kanggo nginstal sembarang OS saka dhewe ISO, nyaman panel kontrol pembangunan dhewe lan pembayaran saben dina. Elinga yen kita duwe server langgeng sing mesthi langgeng πŸ˜‰

Sinkronisasi Wektu Linux: NTP, Chrony lan systemd-timesyncd

Source: www.habr.com

Add a comment