Linux vaqtini sinxronlashtirish: NTP, Chrony va systemd-timesyncd

Linux vaqtini sinxronlashtirish: NTP, Chrony va systemd-timesyncd
Ko'pchilik vaqtni kuzatib boradi. Biz ertalabki marosimlarimizni bajarish va ishga borish uchun o'z vaqtida turamiz, tushlik tanaffus qilamiz, loyihaning belgilangan muddatlarini kutib olamiz, tug'ilgan kunlar va bayramlarni nishonlaymiz, samolyotga chiqamiz va hokazo.

Bundan tashqari: ba'zilarimiz vaqtga berilib ketgan. Mening soatim quyosh energiyasidan ishlaydi va Milliy standartlar va texnologiyalar institutidan aniq vaqt oladi (NIST) Fort Kollinzga, Koloradoga uzoq to'lqinli radio orqali WWVB. Vaqt signallari Fort Kollinzda joylashgan atom soati bilan sinxronlashtiriladi. Mening Fitbitim server bilan sinxronlanayotgan telefonim bilan sinxronlanmoqda NTP, bu oxir-oqibat atom soati bilan sinxronlashtiriladi.

Qurilmalar ham vaqtni kuzatib boradi

Bizning qurilmalarimiz va kompyuterlarimiz aniq vaqtga muhtoj bo'lishining ko'p sabablari bor. Masalan, bank, fond bozorlari va boshqa moliyaviy korxonalarda operatsiyalar to'g'ri tartibda amalga oshirilishi kerak va buning uchun aniq vaqt ketma-ketligi juda muhimdir.

Telefonlarimiz, planshetlarimiz, avtomobillarimiz, GPS tizimlari va kompyuterlarimiz aniq vaqt va sana sozlamalarini talab qiladi. Men kompyuterimning ish stolidagi soat to'g'ri vaqtni ko'rsatishini xohlayman. Eslatmalar mahalliy kalendarimda kerakli vaqtda paydo boΚ»lishini xohlayman. To'g'ri vaqt, shuningdek, cron va tizim ishlarining to'g'ri vaqtda bajarilishini ta'minlaydi.

Sana va vaqt jurnalga kirish uchun ham muhim, shuning uchun sana va vaqtga asoslangan ma'lum jurnallarni topish biroz osonroq. Misol uchun, men bir vaqtlar DevOps'da ishlaganman (o'sha paytda u bunday deb atalmagan) va Shimoliy Karolina shtatida elektron pochta tizimini o'rnatganman. Biz kuniga 20 milliondan ortiq elektron pochta xabarlarini qayta ishlaganmiz. Agar tegishli kompyuterlar o'z vaqtida sinxronlangan bo'lsa, bir qator serverlar orqali elektron pochta xabarlarini kuzatish yoki jug'rofiy jihatdan tarqalgan xostlarda jurnal fayllari yordamida voqealarning aniq ketma-ketligini aniqlash ancha oson bo'lishi mumkin.

Bir marta - ko'p soat

Linux xostlari tizim vaqti va RTC vaqti mavjudligini hisobga olishlari kerak. RTC (Real Time Clock) - bu apparat soati uchun biroz g'alati va unchalik aniq bo'lmagan nom.

Tizim anakartidagi batareyadan foydalanib, kompyuter o'chirilgan bo'lsa ham apparat soati uzluksiz ishlaydi. RTC ning asosiy vazifasi vaqt serveriga ulanish mavjud bo'lmaganda vaqtni saqlashdir. Internet orqali vaqt serveriga ulanish imkonsiz bo'lgan kunlarda har bir kompyuterda aniq ichki soat bo'lishi kerak edi. Operatsion tizimlar yuklash vaqtida RTC ga kirishi kerak edi va foydalanuvchi to'g'ri ekanligiga ishonch hosil qilish uchun BIOS apparat konfiguratsiya interfeysi yordamida tizim vaqtini qo'lda o'rnatishi kerak edi.

Uskuna soatlari vaqt zonalari tushunchasini tushunmaydi; RTC faqat vaqtni saqlaydi, vaqt mintaqasi yoki UTC dan ofset emas (Muvofiqlashtirilgan universal vaqt, GMT yoki Grinvich vaqti deb ham ataladi). Siz RTC-ni ushbu maqolada keyinroq muhokama qiladigan vosita yordamida o'rnatishingiz mumkin.

Tizim vaqti - bu OS ish stolingizdagi GUI soatida, sana buyrug'ining chiqishida, jurnallarning vaqt belgilarida ko'rsatadigan vaqt. Bu fayllar yaratilgan, o'zgartirilgan va ochilganda ham amal qiladi.

Sahifada rtc uchun odam RTC va tizim soatining to'liq tavsifi mavjud.

NTP bilan nima?

Butun dunyodagi kompyuterlar NTP serverlari ierarxiyasidan foydalangan holda vaqtlarini Internet orqali standart mos yozuvlar soatlari bilan sinxronlashtirish uchun NTP (Network Time Protocol) dan foydalanadilar. Asosiy vaqt serverlari 1-qavatda joylashgan va ular sun'iy yo'ldosh, radio yoki hatto telefon liniyalari orqali modemlar orqali 0-qatlamdagi turli milliy vaqt xizmatlariga bevosita ulangan. Layer 0 vaqt xizmatlari atom soati, atom soatlari tomonidan uzatiladigan signallarga sozlangan radio qabul qilgich yoki GPS sun'iy yo'ldoshlari tomonidan uzatiladigan yuqori aniqlikdagi soat signallaridan foydalanadigan GPS qabul qilgich bo'lishi mumkin.

Malumot serverlarining katta qismi bir necha ming ommaviy NTP stratum 2 serverlariga ega. NTP serveriga muhtoj bo'lgan ko'plab xostlari bo'lgan ko'plab tashkilotlar va foydalanuvchilar (o'zim ham kiradi) o'zlarining vaqt serverlarini o'rnatishni tanlaydilar, shunda faqat bitta mahalliy xost 2 yoki 3 qatlamga kirishi mumkin. Keyin ular tarmoqdagi qolgan tugunlarni mahalliy tarmoqdan foydalanish uchun sozlashadi. vaqt serveri. Mening uy tarmog'im bo'lsa, bu 3-qatlam serveri.

NTP ning turli xil ilovalari

NTP ning asl ilovasi ntpd. Keyin unga ikkita yangi, chronyd va systemd-timesyncd qo'shildi. Uchalasi ham mahalliy xost vaqtini NTP vaqt serveri bilan sinxronlashtiradi. Systemd-timesyncd xizmati chronyd kabi ishonchli emas, lekin u ko'p maqsadlar uchun etarli. Agar RTC sinxronlashtirilmagan bo'lsa, mahalliy tizim vaqti biroz o'zgarganda u tizim vaqtini NTP serveri bilan sinxronlash uchun asta-sekin sozlashi mumkin. Systemd-timesync xizmatidan vaqt serveri sifatida foydalanish mumkin emas.

Xronika Bu ikkita dasturni o'z ichiga olgan NTP ilovasi: chronyd demoni va chronyc deb nomlangan buyruq qatori interfeysi. Chrony ko'p hollarda ajralmas bo'lgan ba'zi xususiyatlarga ega:

  • Chrony vaqt serveri bilan eski ntpd xizmatiga qaraganda tezroq sinxronlasha oladi. Bu har doim ham ishlamaydigan noutbuklar yoki ish stollari uchun yaxshi.
  • U soat tebranishlarini qoplashi mumkin, masalan, uy egasi uyquga ketganda yoki uyqu rejimiga o'tganda yoki chastotaning sakrashi tufayli soat o'zgarganda, bu past yuklarda soatlarni sekinlashtiradi.
  • Bu beqaror tarmoq ulanishi yoki tarmoq tiqilib qolishi bilan bog'liq vaqt muammolarini hal qiladi.
  • U tarmoqdagi kechikishlarni tartibga soladi.
  • Dastlabki vaqtni sinxronlashdan so'ng, Chrony hech qachon soatni to'xtatmaydi. Bu ko'plab tizim xizmatlari va ilovalari uchun barqaror va izchil vaqt oralig'ini ta'minlaydi.
  • Chrony hatto tarmoqqa ulanmasdan ham ishlashi mumkin. Bunday holda, mahalliy xost yoki server qo'lda yangilanishi mumkin.
  • Chrony NTP serveri vazifasini bajarishi mumkin.

Yana bir bor, NTP Chrony yoki systemd-timesyncd yordamida Linux xostlarida amalga oshirilishi mumkin bo'lgan protokoldir.

NTP, Chrony va systemd-timesyncd RPMs standart Fedora omborlarida mavjud. Systemd-udev RPM - bu Fedora-da sukut bo'yicha o'rnatiladigan yadro hodisalari menejeri, ammo ixtiyoriy.

Siz uchtasini o'rnatishingiz va ular o'rtasida almashishingiz mumkin, ammo bu qo'shimcha bosh og'rig'ini keltirib chiqaradi. Shuning uchun qilmaslik yaxshiroqdir. Fedora, CentOS va RHEL-ning zamonaviy versiyalari standart dastur sifatida Chrony-ga o'tdi va ularda systemd-timesyncd ham mavjud. Men Chrony yaxshi ishlaydi, NTP xizmatiga qaraganda yaxshiroq interfeys bilan ta'minlaydi, ko'proq ma'lumot va boshqaruvni ta'minlaydi, bu tizim ma'murlariga albatta yoqadi.

NTP xizmatlarini o'chirish

NTP xizmati allaqachon hostingizda ishlayotgan bo'lishi mumkin. Agar shunday bo'lsa, boshqa narsaga o'tishdan oldin uni o'chirib qo'yishingiz kerak. Menda chronyd ishlayotgan edi, shuning uchun uni to'xtatish va o'chirish uchun quyidagi buyruqlardan foydalandim. Xostingizda ishlayotgan har qanday NTP demoni uchun tegishli buyruqlarni ishga tushiring:

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

Xizmat to'xtatilgan va o'chirilganligini tekshiring:

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

Ishga tushirishdan oldin holatni tekshirish

Tizim soatini sinxronlash holati NTP xizmati ishlayotganligini aniqlash imkonini beradi. Siz hali NTP ni ishga tushirmaganingiz uchun timesyc-status buyrug'i bunga ishora qiladi:

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

To'g'ridan-to'g'ri holat so'rovi muhim ma'lumotlarni taqdim etadi. Misol uchun, argumentsiz yoki parametrsiz timedatectl buyrug'i sukut bo'yicha status pastki buyrug'ini bajaradi:

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

Bu sizga uy egasi uchun mahalliy vaqt, UTC vaqti va RTC vaqtini beradi. Bunday holda, tizim vaqti Amerika / Nyu-York (TZ) vaqt mintaqasiga o'rnatiladi, RTC mahalliy vaqt mintaqasidagi vaqtga o'rnatiladi va NTP xizmati faol emas. RTC vaqti tizim vaqtidan biroz chetga chiqa boshladi. Bu soatlari sinxronlashtirilmagan tizimlar uchun odatiy holdir. Xostdagi ofset miqdori tizim oxirgi marta sinxronlanganidan beri o'tgan vaqtga bog'liq.

Shuningdek, biz RTC uchun mahalliy vaqtdan foydalanish haqida ogohlantirish oldik - bu vaqt mintaqasi o'zgarishi va DST sozlamalariga tegishli. O'zgartirishlar kiritish kerak bo'lganda kompyuter o'chirilgan bo'lsa, RTC o'zgarmaydi. Ammo tunu kun ishlaydigan serverlar yoki boshqa xostlar uchun bu umuman muammo emas. Bundan tashqari, NTP vaqtini sinxronlashni ta'minlovchi har qanday xizmat boshlang'ich ishga tushirish bosqichida xost vaqtini moslashtiradi, shuning uchun ishga tushirish tugagandan so'ng vaqt yana to'g'ri bo'ladi.

Vaqt mintaqasini o'rnatish

Odatda, siz o'rnatish jarayonida vaqt zonasini belgilaysiz va keyinroq uni o'zgartirish vazifasi yo'q. Biroq, vaqt mintaqasini o'zgartirish kerak bo'lgan vaqtlar mavjud. Bunga yordam beradigan bir nechta vositalar mavjud. Linux xostning mahalliy vaqt mintaqasini aniqlash uchun vaqt mintaqasi fayllaridan foydalanadi. Ushbu fayllar katalogda joylashgan /usr/share/zoneinfo. Odatiy bo'lib, mening vaqt mintaqam uchun tizim buni belgilaydi: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Ammo vaqt mintaqasini o'zgartirish uchun bunday nozikliklarni bilish shart emas.

Asosiysi, joylashuvingiz uchun rasmiy vaqt mintaqasi nomini va tegishli buyruqni bilish. Aytaylik, siz vaqt mintaqasini Los-Anjelesga o'zgartirmoqchisiz:


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

Endi siz vaqt mintaqasini belgilashingiz mumkin. O'zgarishlarni tekshirish uchun sana buyrug'idan foydalandim, lekin siz timedatectl dan ham foydalanishingiz mumkin:

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

Endi siz uy egasining vaqt mintaqasini mahalliy vaqtga o'zgartirishingiz mumkin.

systemd-timesyncd

Tizimli vaqt sinxronlash dasturi tizim kontekstida boshqarish oson bo'lgan NTP dasturini taqdim etadi. U sukut bo'yicha Fedora va Ubuntu-da o'rnatiladi. Biroq, u faqat Ubuntu'da sukut bo'yicha boshlanadi. Boshqa tarqatishlar haqida ishonchim komil emas. Siz o'zingiz tekshirishingiz mumkin:

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

Systemd-timesyncd sozlanmoqda

Systemd-timesyncd uchun konfiguratsiya fayli /etc/systemd/timesyncd.conf. Bu eski NTP va chronyd xizmatlariga qaraganda kamroq imkoniyatlarga ega oddiy fayl. Fedora VM-dagi ushbu faylning mazmuni (qo'shimcha o'zgartirishlarsiz):

#  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

Unda sharhlardan tashqari yagona bo'lim [Vaqt]dir. Boshqa barcha qatorlar izohlanadi. Bu standart qiymatlar va ularni o'zgartirmaslik kerak (agar sizda sabab bo'lmasa). Agar sizda NTP= qatorida belgilangan NTP vaqt serveri bo'lmasa, Fedora sukut bo'yicha zaxira Fedora vaqt serveriga o'tadi. Men odatda vaqt serverimni qo'shaman:

NTP=myntpserver

Ishlash vaqtini sinxronlash

Siz systemd-timesyncd dasturini quyidagicha ishga tushirishingiz va faollashtirishingiz mumkin:

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

Uskuna soatini sozlash

Timesyncd ishga tushirilgandan keyin vaziyat qanday ko'rinadi:

[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    

Dastlab, RTC va mahalliy vaqt (EDT) o'rtasidagi farq bir soniyadan kamroq bo'ladi va keyingi bir necha kun ichida kelishmovchilik yana bir necha soniyaga ortadi. RTC-da vaqt zonalari tushunchasi mavjud emasligi sababli, timedatectl buyrug'i to'g'ri vaqt mintaqasini aniqlash uchun taqqoslashni amalga oshirishi kerak. Agar RTC vaqti mahalliy vaqtga to'liq mos kelmasa, u mahalliy vaqt mintaqasiga ham to'g'ri kelmaydi.

Qo'shimcha ma'lumot olish uchun men systemd-timesync holatini tekshirdim va buni topdim:

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

Tizim vaqti o'rnatilmagan yoki qayta tiklanganligi haqida jurnal xabariga e'tibor bering. Timesync xizmati vaqt tamg'asi asosida tizim vaqtini o'rnatadi. Vaqt belgilari vaqt sinxronlash demoni tomonidan saqlanadi va har bir muvaffaqiyatli sinxronlashda yaratiladi.

Timedatectl buyrug'i apparat soatining qiymatini tizim soatidan olishning imkoni yo'q. U faqat buyruq satriga kiritilgan qiymatdan vaqt va sanani belgilashi mumkin. Siz hwclock buyrug'i yordamida RTC ni tizim vaqti bilan bir xil qiymatga o'rnatishingiz mumkin:

[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

--localtime opsiyasi apparat soatiga UTC emas, balki mahalliy vaqtni ko'rsatishini bildiradi.

Nima uchun sizga umuman RTC kerak?

NTP ning har qanday amalga oshirilishi tizim soatini ishga tushirish vaqtida o'rnatadi. Va nima uchun RTC? Bu mutlaqo to'g'ri emas: bu faqat vaqt serveriga tarmoq ulanishingiz bo'lsa sodir bo'ladi. Biroq, ko'pgina tizimlar har doim ham tarmoqqa ulanish imkoniga ega emas, shuning uchun tizim vaqtini belgilash uchun Linux uchun apparat soati foydalanish uchun foydalidir. Bu vaqtni qo'lda belgilashdan ko'ra yaxshiroqdir, garchi u real vaqtdan chetga chiqishi mumkin.

xulosa

Ushbu maqola sana, vaqt va vaqt zonalarini boshqarish uchun ba'zi vositalarni ko'rib chiqdi. Systemd-timesyncd vositasi mahalliy xostdagi vaqtni NTP serveri bilan sinxronlashtira oladigan NTP mijozini taqdim etadi. Biroq, systemd-timesyncd server xizmatini ta'minlamaydi, shuning uchun agar sizga tarmog'ingizda NTP server kerak bo'lsa, server sifatida ishlash uchun Chrony kabi boshqa narsadan foydalanishingiz kerak.

Men tarmog'imdagi har qanday xizmat uchun yagona dasturga ega bo'lishni afzal ko'raman, shuning uchun men Chrony-dan foydalanaman. Agar sizga mahalliy NTP server kerak bo'lmasa yoki server sifatida Chrony va SNTP mijozi sifatida systemd-timesyncd dan foydalanishga qarshi bo'lmasangiz. Axir, agar siz systemd-timesyncd funksiyasidan qoniqsangiz, mijoz sifatida Chrony-ning qo'shimcha imkoniyatlaridan foydalanishga hojat yo'q.

Yana bir eslatma: NTPni amalga oshirish uchun tizim vositalaridan foydalanish shart emas. Siz ntpd, Chrony yoki boshqa NTP ilovasining eski versiyasidan foydalanishingiz mumkin. Axir, systemd ko'p sonli xizmatlardan iborat; ularning ko'pchiligi ixtiyoriy, shuning uchun siz ularni o'chirib qo'yishingiz va o'rniga boshqa narsadan foydalanishingiz mumkin. Bu ulkan monolit yirtqich hayvon emas. Siz tizim yoki uning qismlarini yoqtirmasligingiz mumkin, ammo siz xabardor qaror qabul qilishingiz kerak.

Men systemd-ning NTP-ni amalga oshirishini yoqtiraman, lekin men Chrony-ni afzal ko'raman, chunki u mening ehtiyojlarimga ko'proq mos keladi. Bu Linux, bolam -)

Reklama huquqlari to'g'risida

VDSina taklif qiladi har qanday vazifa uchun serverlar, avtomatik o'rnatish uchun operatsion tizimlarning katta tanlovi, har qanday OSni o'zingizdan o'rnatishingiz mumkin ISO, qulay boshqaruv paneli o'z rivojlanishi va kunlik to'lov. Eslatib o'tamiz, bizda abadiy serverlarimiz bor, ular shubhasiz abadiydir πŸ˜‰

Linux vaqtini sinxronlashtirish: NTP, Chrony va systemd-timesyncd

Manba: www.habr.com

a Izoh qo'shish