Linux Vaxt Sinxronizasiyası: NTP, Chrony və systemd-timesyncd

Linux Vaxt Sinxronizasiyası: NTP, Chrony və systemd-timesyncd
İnsanların çoxu vaxtı izləyir. Səhər rituallarımızı tamamlamaq və işə getmək, nahar fasiləsi etmək, layihənin son tarixlərini qarşılamaq, ad günləri və bayramları qeyd etmək, təyyarəyə minmək və s. üçün vaxtında qalxırıq.

Üstəlik: bəzilərimiz zamanla bağlıyıq. Saatım günəş enerjisi ilə işləyir və Milli Standartlar və Texnologiya İnstitutundan dəqiq vaxt alır (NIST) Fort Collins, Koloradoya uzun dalğalı radio vasitəsilə WWVB. Vaxt siqnalları həm də Fort Collins-də yerləşən atom saatı ilə sinxronlaşdırılır. Mənim Fitbitim serverlə sinxronizasiya edilən telefonumla sinxronizasiya olunur NTP, nəticədə atom saatı ilə sinxronlaşır.

Cihazlar da vaxtı izləyir

Cihazlarımızın və kompüterlərimizin dəqiq vaxta ehtiyacı olmasının bir çox səbəbi var. Məsələn, bank, fond bazarları və digər maliyyə bizneslərində əməliyyatlar düzgün qaydada aparılmalıdır və bunun üçün dəqiq vaxt ardıcıllığı çox vacibdir.

Telefonlarımız, planşetlərimiz, avtomobillərimiz, GPS sistemlərimiz və kompüterlərimiz dəqiq vaxt və tarix parametrlərini tələb edir. İstəyirəm ki, kompüterimin iş masasındakı saat düzgün vaxtı göstərsin. Xatırlatmaların lazımi vaxtda yerli təqvimimdə görünməsini istəyirəm. Düzgün vaxt həm də cron və sistem işlərinin düzgün vaxtda işləməsini təmin edir.

Tarix və vaxt da giriş üçün vacibdir, ona görə də tarix və vaxta əsasən müəyyən qeydləri tapmaq bir az asandır. Məsələn, mən bir dəfə DevOps-da işləyirdim (o vaxt belə adlanırdı) və Şimali Karolina ştatında e-poçt sistemi qururdum. Biz gündə 20 milyondan çox e-poçtu emal edirdik. Bir sıra serverlər vasitəsilə e-poçtu izləmək və ya coğrafi cəhətdən səpələnmiş hostlarda log fayllarından istifadə edərək hadisələrin dəqiq ardıcıllığını müəyyən etmək, əgər müvafiq kompüterlər vaxtında sinxronlaşdırılarsa, daha asan ola bilər.

Bir dəfə - çox saat

Linux hostları sistem vaxtı və RTC vaxtının olduğunu nəzərə almalıdırlar. RTC (Real Time Clock) aparat saatı üçün bir qədər qəribə və çox dəqiq olmayan bir addır.

Aparat saatı sistem anakartındakı batareyadan istifadə edərək kompüter söndürüldükdə belə davamlı olaraq işləyir. RTC-nin əsas funksiyası vaxt serverinə qoşulma olmadıqda vaxtı saxlamaqdır. İnternet üzərindən vaxt serverinə qoşulmağın qeyri-mümkün olduğu günlərdə hər bir kompüterin dəqiq daxili saatı olmalı idi. Əməliyyat sistemləri yükləmə zamanı RTC-yə daxil olmalı idi və istifadəçi onun düzgün olduğuna əmin olmaq üçün BIOS aparat konfiqurasiya interfeysindən istifadə edərək sistem vaxtını əl ilə təyin etməli idi.

Avadanlıq saatları saat qurşağı anlayışını başa düşmür; RTC yalnız vaxtı saxlayır, vaxt qurşağını və ya UTC-dən (Əlaqələndirilmiş Universal Saat, GMT və ya Qrinviç Orta Saatı kimi də tanınır) ofset deyil. Siz RTC-ni bu məqalədə daha sonra əhatə edəcəyim alətdən istifadə edərək quraşdıra bilərsiniz.

Sistem vaxtı, OS-nin masaüstünüzdəki GUI saatında, tarix əmrinin çıxışında, qeydlərin vaxt işarələrində göstərdiyi vaxtdır. Bu, faylların yaradıldığı, dəyişdirildiyi və açıldığı zamanlara da aiddir.

Səhifədə rtc üçün adam RTC və sistem saatının tam təsviri var.

NTP ilə nə var?

Bütün dünyada kompüterlər NTP serverlərinin iyerarxiyasından istifadə edərək vaxtlarını İnternet üzərindən standart istinad saatları ilə sinxronlaşdırmaq üçün NTP-dən (Şəbəkə Vaxt Protokolu) istifadə edirlər. Əsas vaxt serverləri 1-ci səviyyədədir və onlar birbaşa peyk, radio və ya hətta telefon xətləri üzərindən modemlər vasitəsilə 0-cı səviyyədə müxtəlif milli vaxt xidmətləri ilə bağlıdır. Layer 0 vaxt xidmətləri atom saatı, atom saatları ilə ötürülən siqnallara uyğunlaşdırılmış radio qəbuledicisi və ya GPS peykləri tərəfindən ötürülən yüksək dəqiqlikli saat siqnallarından istifadə edən GPS qəbuledicisi ola bilər.

İstinad serverlərinin böyük əksəriyyətində ictimaiyyət üçün açıq olan bir neçə min ictimai NTP stratum 2 serveri var. NTP serverinə ehtiyacı olan çoxlu hostları olan bir çox təşkilat və istifadəçilər (mənim də daxil olmaqla) öz vaxt serverlərini qurmağı seçirlər ki, yalnız bir yerli host 2 və ya 3-cü təbəqəyə daxil olsun. Sonra onlar şəbəkədə qalan qovşaqları yerli şəbəkədən istifadə etmək üçün konfiqurasiya edirlər. vaxt serveri. Mənim ev şəbəkəmdə bu, 3-cü səviyyə serveridir.

NTP-nin müxtəlif tətbiqləri

NTP-nin orijinal tətbiqi ntpd-dir. Daha sonra ona iki yeni, chronyd və systemd-timesyncd qoşuldu. Hər üçü yerli host vaxtını NTP vaxt serveri ilə sinxronlaşdırır. systemd-timesyncd xidməti chronyd kimi etibarlı deyil, lakin əksər məqsədlər üçün kifayət qədər yaxşıdır. Əgər RTC sinxronizasiya olunmursa, o, yerli sistem vaxtı bir qədər sürüşən zaman NTP serveri ilə sinxronizasiya etmək üçün sistem vaxtını tədricən tənzimləyə bilər. systemd-timesync xidməti vaxt serveri kimi istifadə edilə bilməz.

Xronika iki proqramı ehtiva edən NTP-nin tətbiqidir: chronyd demonu və chronyc adlı komanda xətti interfeysi. Chrony bir çox hallarda əvəzolunmaz olan bəzi xüsusiyyətlərə malikdir:

  • Chrony köhnə ntpd xidmətindən daha sürətli vaxt serveri ilə sinxronizasiya edə bilər. Bu, hər zaman işləməyən noutbuklar və ya masaüstü kompüterlər üçün yaxşıdır.
  • O, ev sahibi yuxuya getdikdə və ya yuxu rejiminə daxil olduqda və ya tezliyin hoppanması səbəbindən saatın dəyişməsi kimi saat dalğalanmalarını kompensasiya edə bilər, bu da aşağı yüklərdə saatları yavaşlatır.
  • Qeyri-sabit şəbəkə bağlantısı və ya şəbəkə sıxlığı ilə bağlı vaxt problemlərini həll edir.
  • Şəbəkə gecikmələrini tənzimləyir.
  • İlkin vaxt sinxronizasiyasından sonra Chrony heç vaxt saatı dayandırmır. Bu, bir çox sistem xidmətləri və tətbiqləri üçün sabit və ardıcıl vaxt intervalları təmin edir.
  • Chrony hətta şəbəkə bağlantısı olmadan da işləyə bilər. Bu halda, yerli host və ya server əl ilə yenilənə bilər.
  • Chrony NTP server kimi çıxış edə bilər.

Yenə də, NTP Chrony və ya systemd-timesyncd istifadə edərək Linux hostunda həyata keçirilə bilən bir protokoldur.

NTP, Chrony və systemd-timesyncd RPM-ləri standart Fedora depolarında mövcuddur. systemd-udev RPM, standart olaraq Fedora-da quraşdırılmış, lakin isteğe bağlı olan nüvə hadisə meneceridir.

Siz hər üçünü quraşdırıb aralarında keçid edə bilərsiniz, lakin bu, əlavə baş ağrısı yaradacaq. Buna görə etməmək daha yaxşıdır. Fedora, CentOS və RHEL-in müasir buraxılışları standart tətbiq kimi Chrony-ə keçdi və onlar da systemd-timesyncd-ə malikdir. Mənə elə gəlir ki, Chrony yaxşı işləyir, NTP xidmətindən daha yaxşı interfeys təmin edir, daha çox məlumat və nəzarət təmin edir.

NTP xidmətlərinin söndürülməsi

NTP xidməti artıq hostunuzda işləyir. Əgər belədirsə, başqa bir şeyə keçməzdən əvvəl onu söndürməlisiniz. Məndə chronyd işləyirdi, ona görə də onu dayandırmaq və söndürmək üçün aşağıdakı əmrlərdən istifadə etdim. Hostunuzda işlədiyiniz hər hansı NTP demonu üçün müvafiq əmrləri işə salın:

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

Xidmətin dayandırıldığını və söndürüldüyünü yoxlayın:

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

Başlamadan əvvəl vəziyyəti yoxlayın

Sistem saatının sinxronizasiya statusu NTP xidmətinin işlədiyini müəyyən etməyə imkan verir. Hələ NTP-ni işə salmadığınız üçün timeync-status əmri buna işarə edəcək:

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

Birbaşa status sorğusu vacib məlumat verir. Məsələn, heç bir arqument və ya seçimləri olmayan timedatectl əmri defolt olaraq status alt əmrini yerinə yetirir:

[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 sizə ev sahibiniz üçün yerli vaxt, UTC vaxtı və RTC vaxtını verəcəkdir. Bu halda, sistem vaxtı Amerika / New_York (TZ) saat qurşağına, RTC yerli saat qurşağındakı vaxta təyin edilir və NTP xidməti aktiv deyil. RTC vaxtı sistem vaxtından bir qədər kənara çıxmağa başlayıb. Bu, saatları sinxronlaşdırılmamış sistemlər üçün normaldır. Hostda ofsetin miqdarı sistemin sonuncu sinxronizasiyasından sonra keçən vaxtdan asılıdır.

Biz həmçinin RTC üçün yerli vaxtdan istifadə ilə bağlı xəbərdarlıq aldıq - bu, saat qurşağı dəyişikliklərinə və DST parametrlərinə aiddir. Dəyişikliklər edilməli olduqda kompüter söndürülürsə, RTC dəyişməyəcək. Ancaq gecə-gündüz işləyən serverlər və ya digər hostlar üçün bu heç də problem deyil. Bundan əlavə, NTP vaxtının sinxronizasiyasını təmin edən hər hansı xidmət ilkin işə salınma mərhələsində ev sahibinin vaxtını tənzimləyəcək, beləliklə, başlanğıc tamamlandıqdan sonra vaxt yenidən düzgün olacaq.

Saat qurşağının təyin edilməsi

Adətən quraşdırma proseduru zamanı saat qurşağını təyin edirsiniz və sonra onu dəyişdirmək vəzifəniz yoxdur. Bununla belə, vaxt qurşağını dəyişməli olduğunuz vaxtlar olur. Kömək edə biləcək bir neçə vasitə var. Linux, hostun yerli saat qurşağını müəyyən etmək üçün saat qurşağı fayllarından istifadə edir. Bu fayllar kataloqdadır /usr/share/zoneinfo. Varsayılan olaraq, mənim saat qurşağım üçün sistem bunu təyin edir: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Amma saat qurşağını dəyişmək üçün belə incəlikləri bilmək lazım deyil.

Əsas odur ki, yerinizin rəsmi saat qurşağı adını və müvafiq əmri bilməkdir. Tutaq ki, siz saat qurşağını Los-Ancelesə dəyişmək istəyirsiniz:


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

İndi saat qurşağını təyin edə bilərsiniz. Dəyişiklikləri yoxlamaq üçün tarix əmrindən istifadə etdim, lakin siz timedatectl də istifadə edə bilərsiniz:

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

İndi siz ev sahibinin vaxt qurşağını yerli vaxta dəyişə bilərsiniz.

systemd-timesyncd

Systemd timesync demonu sistem kontekstində idarə etmək asan olan NTP tətbiqini təmin edir. Fedora və Ubuntu-da standart olaraq quraşdırılmışdır. Bununla belə, o, yalnız Ubuntu-da default olaraq başlayır. Digər paylamalardan əmin deyiləm. Özünüz yoxlaya bilərsiniz:

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

systemd-timesyncd konfiqurasiya edilir

systemd-timesyncd üçün konfiqurasiya faylı belədir /etc/systemd/timesyncd.conf. Bu köhnə NTP və chronyd xidmətlərindən daha az seçim aktivləşdirilmiş sadə bir fayldır. Fedora VM-də bu faylın məzmunu (əlavə dəyişiklik etmədən) budur:

#  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

Şərhlərdən başqa onun ehtiva etdiyi yeganə bölmə [Vaxtdır]. Bütün digər sətirlər şərh olunur. Bunlar standart dəyərlərdir və dəyişdirilməməlidir (səbəbiniz yoxdursa). Əgər NTP= xəttində müəyyən edilmiş NTP vaxt serveriniz yoxdursa, Fedora defolt olaraq ehtiyat Fedora vaxt serverinə keçir. Mən adətən vaxt serverimi əlavə edirəm:

NTP=myntpserver

İş vaxtı sinxronizasiyası

Siz systemd-timesyncd-ni bu şəkildə başlaya və aktiv edə bilərsiniz:

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

Aparat saatının qurulması

Timesyncd-ni işə saldıqdan sonra vəziyyət belə görünür:

[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    

Əvvəlcə RTC ilə yerli vaxt (EDT) arasındakı fərq bir saniyədən azdır və növbəti bir neçə gün ərzində uyğunsuzluq daha bir neçə saniyə artır. RTC-də saat qurşağı anlayışı olmadığı üçün timedatectl əmri düzgün vaxt qurşağını müəyyən etmək üçün müqayisə aparmalıdır. Əgər RTC vaxtı yerli vaxta tam uyğun gəlmirsə, o zaman yerli saat qurşağına da uyğun gəlmir.

Daha çox məlumat axtarmaq üçün systemd-timesync statusunu yoxladım və bunu tapdım:

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

Sistem vaxtının təyin edilmədiyini və ya sıfırlandığını bildirən jurnal mesajına diqqət yetirin. Timesync xidməti zaman damğası əsasında sistem vaxtını təyin edir. Zaman ştampları timesync demonu tərəfindən saxlanılır və hər bir uğurlu sinxronizasiyada yaradılır.

timedatectl əmrinin sistem saatından aparat saatının dəyərini götürmək imkanı yoxdur. O, yalnız komanda xəttinə daxil edilmiş dəyərdən vaxtı və tarixi təyin edə bilər. Siz hwclock əmrindən istifadə edərək RTC-ni sistem vaxtı ilə eyni dəyərə təyin edə bilərsiniz:

[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 seçimi aparat saatına UTC deyil, yerli vaxtı göstərməyi bildirir.

Niyə ümumiyyətlə RTC lazımdır?

NTP-nin hər hansı bir tətbiqi sistem saatını başlanğıc vaxtına təyin edəcəkdir. Bəs niyə RTC? Bu tamamilə doğru deyil: bu, yalnız vaxt serverinə şəbəkə bağlantınız olduqda baş verəcəkdir. Bununla belə, bir çox sistemlərin həmişə şəbəkə bağlantısına çıxışı olmur, ona görə də sistem vaxtını təyin etmək üçün Linux-un istifadə etməsi üçün aparat saatı faydalıdır. Bu, real vaxtdan kənara çıxsa da, vaxtı əl ilə təyin etməkdən daha yaxşıdır.

Nəticə

Bu məqalə tarix, vaxt və saat qurşaqlarını manipulyasiya etmək üçün bəzi alətləri nəzərdən keçirmişdir. Systemd-timesyncd aləti yerli hostda vaxtı NTP serveri ilə sinxronlaşdıra bilən NTP müştərisini təmin edir. Bununla belə, systemd-timesyncd server xidməti təmin etmir, ona görə də şəbəkənizdə NTP serverinə ehtiyacınız varsa, server kimi fəaliyyət göstərmək üçün Chrony kimi başqa bir şeydən istifadə etməlisiniz.

Şəbəkəmdə hər hansı bir xidmət üçün vahid tətbiqə üstünlük verirəm, ona görə də Chrony-dən istifadə edirəm. Əgər yerli NTP serverinə ehtiyacınız yoxdursa və ya server kimi Chrony-dən və SNTP müştərisi kimi systemd-timesyncd-dən istifadə etməkdən çəkinmirsinizsə. Axı, systemd-timesyncd funksionallığından razısınızsa, müştəri kimi Chrony-nin əlavə funksiyalarından istifadə etməyə ehtiyac yoxdur.

Başqa bir qeyd: NTP tətbiq etmək üçün sistem alətlərindən istifadə etməyiniz tələb olunmur. Siz ntpd, Chrony və ya başqa NTP tətbiqinin köhnə versiyasından istifadə edə bilərsiniz. Axı systemd çoxlu sayda xidmətlərdən ibarətdir; onların çoxu isteğe bağlıdır, ona görə də siz onları söndürə və yerinə başqa bir şey istifadə edə bilərsiniz. Bu nəhəng monolit canavar deyil. Siz systemd və ya onun hissələrini bəyənməyə bilərsiniz, lakin məlumatlı qərar verməlisiniz.

Mən systemd-nin NTP tətbiqini bəyənirəm, lakin mən Chrony-ə üstünlük verirəm, çünki o, mənim ehtiyaclarıma daha uyğundur. Bu Linuxdur, balam -)

Reklam Hüquqları haqqında

VDSina təklif edir istənilən tapşırıq üçün serverlər, avtomatik quraşdırma üçün əməliyyat sistemlərinin böyük bir seçimi, hər hansı bir OS-ni özünüz quraşdırmaq mümkündür ISO, rahat nəzarət paneli öz inkişafı və gündəlik ödəniş. Xatırladaq ki, bizim əbədi serverlərimiz var ki, onlar mütləq zamansızdır 😉

Linux Vaxt Sinxronizasiyası: NTP, Chrony və systemd-timesyncd

Mənbə: www.habr.com

Добавить комментарий