Linux Zaman Senkronizasyonu: NTP, Chrony ve systemd-timesyncd

Linux Zaman Senkronizasyonu: NTP, Chrony ve systemd-timesyncd
Çoğu insan zamanı takip eder. Sabah ritüellerimizi tamamlamak ve işe gitmek, öğle yemeği molası vermek, proje teslim tarihlerini karşılamak, doğum günlerini ve tatilleri kutlamak, uçağa binmek vb. için zamanında kalkarız.

Dahası: bazılarımız zamana takıntılı. Saatim güneş enerjisiyle çalışıyor ve doğru zamanı Ulusal Standartlar ve Teknoloji Enstitüsü'nden alıyor (NIST) uzun dalga radyo aracılığıyla Fort Collins, Colorado'ya WWVB. Zaman sinyalleri, yine Fort Collins'te bulunan atomik saatle senkronize edilir. Fitbit'im, sunucuyla senkronize olan telefonumla senkronize oluyor NTP, sonunda atom saati ile senkronize olur.

Cihazlar da zamanı takip ediyor

Cihazlarımızın ve bilgisayarlarımızın doğru zamana ihtiyaç duymasının birçok nedeni vardır. Örneğin, bankacılık, borsalar ve diğer finansal işlerde, işlemlerin doğru sırada gerçekleştirilmesi gerekir ve bunun için doğru zaman dizileri çok önemlidir.

Telefonlarımız, tabletlerimiz, arabalarımız, GPS sistemlerimiz ve bilgisayarlarımızın tümü doğru saat ve tarih ayarları gerektirir. Bilgisayarımın masaüstündeki saatin doğru zamanı göstermesini istiyorum. Hatırlatıcıların yerel takvimimde doğru zamanda görünmesini istiyorum. Doğru zaman aynı zamanda cron ve systemd işlerinin de doğru zamanda çalışmasını sağlar.

Günlüğe kaydetme için tarih ve saat de önemlidir, bu nedenle belirli günlükleri tarih ve saate göre bulmak biraz daha kolaydır. Örneğin, bir zamanlar DevOps'ta çalışıyordum (o zamanlar böyle adlandırılmıyordu) ve Kuzey Karolina eyaletinde bir e-posta sistemi kuruyordum. Eskiden günde 20 milyondan fazla e-postayı işlerdik. Bir dizi sunucu aracılığıyla e-postayı izlemek veya coğrafi olarak dağınık ana bilgisayarlardaki günlük dosyalarını kullanarak olayların tam sırasını belirlemek, ilgili bilgisayarlar zamanında senkronize edilirse çok daha kolay olabilir.

Bir kez - birçok saat

Linux ana bilgisayarları, bir sistem zamanı ve bir RTC zamanı olduğunu hesaba katmalıdır. RTC (Gerçek Zamanlı Saat), bir donanım saati için biraz garip ve pek doğru olmayan bir addır.

Donanım saati, sistem ana kartındaki pili kullanarak bilgisayar kapalıyken bile sürekli olarak çalışır. RTC'nin ana işlevi, bir zaman sunucusuna bağlantı olmadığında zamanı depolamaktır. İnternet üzerinden bir zaman sunucusuna bağlanmanın imkansız olduğu günlerde, her bilgisayarın doğru bir dahili saate sahip olması gerekiyordu. İşletim sistemlerinin önyükleme sırasında RTC'ye erişmesi gerekiyordu ve kullanıcının doğru olduğundan emin olmak için BIOS donanım yapılandırma arabirimini kullanarak sistem saatini manuel olarak ayarlaması gerekiyordu.

Donanım saatleri, zaman dilimleri kavramını anlamaz; RTC yalnızca saati saklar, saat dilimini veya UTC'den farkı (GMT veya Greenwich Ortalama Saati olarak da bilinen Eşgüdümlü Evrensel Saat) değil. Bu makalenin ilerleyen kısımlarında ele alacağım bir aracı kullanarak RTC'yi kurabilirsiniz.

Sistem saati, işletim sisteminin masaüstünüzdeki GUI saatinde, tarih komutunun çıktısında, günlüklerin zaman damgalarında gösterdiği saattir. Bu, dosyalar oluşturulduğunda, değiştirildiğinde ve açıldığında da geçerlidir.

Sayfasında rtc için adam RTC ve sistem saatinin tam bir açıklaması vardır.

NTP'nin nesi var?

Tüm dünyadaki bilgisayarlar, bir NTP sunucuları hiyerarşisi kullanarak zamanlarını İnternet üzerinden standart referans saatleriyle senkronize etmek için NTP'yi (Ağ Zaman Protokolü) kullanır. Ana zaman sunucuları 1. katmandadır ve 0. katmandaki çeşitli ulusal saat servislerine uydu, radyo ve hatta telefon hatları üzerinden modemler aracılığıyla doğrudan bağlıdır. Katman 0 zaman hizmetleri, bir atomik saat, atomik saatler tarafından iletilen sinyallere ayarlanmış bir radyo alıcısı veya GPS uyduları tarafından iletilen yüksek doğrulukta saat sinyallerini kullanan bir GPS alıcısı olabilir.

Referans sunucularının büyük çoğunluğu halka açık birkaç bin genel NTP katman 2 sunucusuna sahiptir. Bir NTP sunucusuna ihtiyaç duyan çok sayıda ana bilgisayara sahip birçok kuruluş ve kullanıcı (ben dahil) kendi zaman sunucularını kurmayı seçer, böylece yalnızca bir yerel ana bilgisayar katman 2 veya 3'e erişir. zaman sunucusu Ev ağım söz konusu olduğunda, bu bir katman 3 sunucusudur.

NTP'nin çeşitli uygulamaları

NTP'nin orijinal uygulaması ntpd'dir. Daha sonra iki yenisi, chronyd ve systemd-timesyncd ile birleştirildi. Üçü de yerel ana bilgisayar saatini bir NTP zaman sunucusuyla senkronize eder. systemd-timesyncd hizmeti, chronyd kadar güvenilir değildir, ancak çoğu amaç için yeterince iyidir. RTC senkronize değilse, yerel sistem zamanı biraz değiştiğinde sistem zamanını NTP sunucusuyla senkronize olacak şekilde kademeli olarak ayarlayabilir. systemd-timesync hizmeti, bir zaman sunucusu olarak kullanılamaz.

kroni iki program içeren bir NTP uygulamasıdır: chronyd arka plan programı ve chronyc adlı bir komut satırı arabirimi. Chrony, birçok durumda vazgeçilmez olan bazı özelliklere sahiptir:

  • Chrony, eski ntpd hizmetinden çok daha hızlı bir zaman sunucusuyla eşitlenebilir. Bu, her zaman çalışmayan dizüstü veya masaüstü bilgisayarlar için iyidir.
  • Ana bilgisayarın uyku moduna geçmesi veya uyku moduna girmesi veya düşük yüklerde saatleri yavaşlatan frekans atlama nedeniyle saatin değişmesi gibi saat dalgalanmalarını telafi edebilir.
  • Kararsız ağ bağlantısı veya ağ tıkanıklığı ile ilgili zaman problemlerini çözer.
  • Ağ gecikmelerini düzenler.
  • İlk zaman eşitlemesinden sonra, Chrony saati asla durdurmaz. Bu, birçok sistem hizmeti ve uygulaması için kararlı ve tutarlı zaman aralıkları sağlar.
  • Chrony, ağ bağlantısı olmadan da çalışabilir. Bu durumda, yerel ana bilgisayar veya sunucu manuel olarak güncellenebilir.
  • Chrony bir NTP sunucusu olarak çalışabilir.

Bir kez daha NTP, Chrony veya systemd-timesyncd kullanılarak bir Linux ana bilgisayarında uygulanabilen bir protokoldür.

NTP, Chrony ve systemd-timesyncd RPM'ler standart Fedora havuzlarında mevcuttur. systemd-udev RPM, Fedora'da varsayılan olarak yüklenen ancak isteğe bağlı olan bir çekirdek olay yöneticisidir.

Üçünü de kurabilir ve aralarında geçiş yapabilirsiniz, ancak bu ekstra bir baş ağrısı yaratacaktır. Bu yüzden yapmamak daha iyi. Fedora, CentOS ve RHEL'in modern sürümleri, varsayılan uygulama olarak Chrony'ye taşındı ve ayrıca systemd-timesyncd'ye sahipler. Chrony'nin iyi çalıştığını, NTP hizmetinden daha iyi bir arayüz sağladığını, sistem yöneticilerinin kesinlikle keyif alacağı çok daha fazla bilgi ve kontrol sağladığını düşünüyorum.

NTP Hizmetlerini Devre Dışı Bırakma

NTP hizmeti, ana makinenizde zaten çalışıyor olabilir. Öyleyse, başka bir şeye geçmeden önce devre dışı bırakmanız gerekir. Chronyd çalışıyordu, bu yüzden onu durdurmak ve devre dışı bırakmak için aşağıdaki komutları kullandım. Ana bilgisayarınızda çalıştırdığınız herhangi bir NTP arka plan programı için uygun komutları çalıştırın:

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

Hizmetin durdurulduğunu ve devre dışı bırakıldığını kontrol edin:

[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şlatmadan önce durum kontrolü

Sistem saati eşitleme durumu, NTP hizmetinin çalışıp çalışmadığını belirlemenizi sağlar. Henüz NTP'yi başlatmadığınız için, timesync-status komutu şuna işaret edecektir:

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

Doğrudan durum isteği önemli bilgiler sağlar. Örneğin, argüman veya seçenek içermeyen timedatectl komutu, varsayılan olarak durum alt komutunu yürütür:

[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 size sunucunuzun yerel saatini, UTC saatini ve RTC saatini verecektir. Bu durumda sistem saati Amerika / New_York (TZ) saat dilimine, RTC ise yerel saat dilimindeki saate ayarlanır ve NTP hizmeti etkin olmaz. RTC zamanı, sistem zamanından biraz sapmaya başladı. Bu, saatleri senkronize edilmemiş sistemler için normaldir. Ana bilgisayardaki ofset miktarı, sistemin en son senkronize edilmesinden bu yana geçen süreye bağlıdır.

Ayrıca, yerel saatin RTC için kullanılmasıyla ilgili bir uyarı aldık - bu, saat dilimi değişiklikleri ve DST ayarları için geçerlidir. Değişiklik yapılması gerektiğinde bilgisayar kapatılırsa, RTC değişmez. Ancak XNUMX saat çalışan sunucular veya diğer ana bilgisayarlar için bu hiç sorun değil. Ek olarak, NTP zaman senkronizasyonu sağlayan herhangi bir hizmet, ilk başlatma aşamasında ana bilgisayarın saatini ayarlayacaktır, böylece başlatma tamamlandıktan sonra saat tekrar doğru olacaktır.

Saat dilimini ayarlama

Genellikle, kurulum prosedürü sırasında saat dilimini belirtirsiniz ve daha sonra bunu değiştirme göreviniz olmaz. Ancak, saat dilimini değiştirmeniz gereken zamanlar vardır. Yardımcı olabilecek birkaç araç var. Linux, bir ana bilgisayarın yerel saat dilimini belirlemek için saat dilimi dosyalarını kullanır. Bu dosyalar dizinde /usr/paylaş/bölgebilgisi. Varsayılan olarak, benim saat dilimim için sistem şunu belirtir: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Ancak saat dilimini değiştirmek için bu tür incelikleri bilmenize gerek yok.

Önemli olan, konumunuz için resmi saat dilimi adını ve ilgili komutu bilmektir. Saat dilimini Los Angeles olarak değiştirmek istediğinizi varsayalım:


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

Şimdi saat dilimini ayarlayabilirsiniz. Değişiklikleri kontrol etmek için tarih komutunu kullandım, ancak timedatectl'i de kullanabilirsiniz:

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

Artık sunucunuzun saat dilimini yerel saate döndürebilirsiniz.

systemd-timesyncd

systemd timesync arka plan programı, systemd bağlamında yönetimi kolay olan bir NTP uygulaması sağlar. Fedora ve Ubuntu'da varsayılan olarak kuruludur. Ancak, yalnızca Ubuntu'da varsayılan olarak başlar. Diğer dağıtımlardan emin değilim. Kendiniz kontrol edebilirsiniz:

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

systemd-timesyncd'yi yapılandırma

systemd-timesyncd için yapılandırma dosyası /etc/systemd/timesyncd.conf. Bu, eski NTP ve chronyd hizmetlerinden daha az seçeneğin etkinleştirildiği basit bir dosyadır. Fedora VM'mdeki bu dosyanın içeriği (daha fazla değişiklik yapılmadan):

#  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

Yorumların yanı sıra içerdiği tek bölüm [Zaman]. Diğer tüm satırlar yorumlanır. Bunlar varsayılan değerlerdir ve değiştirilmemelidir (bir nedeniniz yoksa). NTP= satırında tanımlanmış bir NTP zaman sunucunuz yoksa, Fedora varsayılan olarak yedek bir Fedora zaman sunucusuna geçer. Genellikle zaman sunucumu eklerim:

NTP=myntpserver

Zaman senkronizasyonu çalıştırılıyor

systemd-timesyncd'yi şu şekilde başlatabilir ve etkinleştirebilirsiniz:

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

Donanım saatini ayarlama

Timesyncd çalıştırıldıktan sonra durum şöyle 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    

Başlangıçta, RTC ile yerel saat (EDT) arasındaki fark bir saniyeden azdır ve sonraki birkaç gün içinde tutarsızlık birkaç saniye daha artar. RTC'de saat dilimleri kavramı olmadığından, timedatectl komutu doğru saat dilimini belirlemek için bir karşılaştırma yapmalıdır. RTC saati yerel saatle tam olarak eşleşmiyorsa, yerel saat dilimiyle de eşleşmiyor demektir.

Daha fazla bilgi ararken systemd-timesync durumunu kontrol ettim ve şunu buldum:

[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 saatinin ayarlanmadığını veya sıfırlandığını belirten günlük mesajına dikkat edin. Timesync hizmeti, sistem saatini zaman damgasına göre ayarlar. Zaman damgaları, zaman eşitleme arka plan programı tarafından korunur ve her başarılı eşitlemede oluşturulur.

timedatectl komutunun, donanım saatinin değerini sistem saatinden alma yolu yoktur. Saat ve tarihi sadece komut satırına girilen değerden ayarlayabilir. hwclock komutunu kullanarak RTC'yi sistem saati ile aynı değere ayarlayabilirsiniz:

[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çeneği, donanım saatine UTC'yi değil yerel saati göstermesini söyler.

Neden RTC'ye ihtiyacınız var?

NTP'nin herhangi bir uygulaması, sistem saatini başlangıç ​​zamanında ayarlayacaktır. Peki neden o zaman RTC? Bu tamamen doğru değil: bu, yalnızca zaman sunucusuna bir ağ bağlantınız varsa gerçekleşir. Bununla birlikte, birçok sistemin her zaman bir ağ bağlantısına erişimi yoktur, bu nedenle Linux'un sistem saatini ayarlamak için kullanması için bir donanım saati kullanışlıdır. Bu, gerçek zamandan farklı olsa bile, saati manuel olarak ayarlamaktan daha iyidir.

Sonuç

Bu makale tarih, saat ve saat dilimlerini değiştirmek için bazı araçları gözden geçirdi. systemd-timesyncd aracı, yerel ana bilgisayardaki zamanı bir NTP sunucusuyla senkronize edebilen bir NTP istemcisi sağlar. Ancak systemd-timesyncd bir sunucu hizmeti sağlamaz, bu nedenle ağınızda bir NTP sunucusuna ihtiyacınız varsa, sunucu görevi görmesi için Chrony gibi başka bir şey kullanmanız gerekir.

Ağımdaki herhangi bir hizmet için tek bir uygulamaya sahip olmayı tercih ediyorum, bu yüzden Chrony kullanıyorum. Yerel bir NTP sunucusuna ihtiyacınız yoksa veya sunucu olarak Chrony'yi ve SNTP istemcisi olarak systemd-timesyncd'yi kullanmakta sakınca görmüyorsanız. Sonuçta, systemd-timesyncd'nin işlevselliğinden memnunsanız, Chrony'nin ek özelliklerini bir istemci olarak kullanmanıza gerek yoktur.

Başka bir not: NTP'yi uygulamak için systemd araçlarını kullanmanız gerekmez. Ntpd, Chrony veya başka bir NTP uygulamasının daha eski bir sürümünü kullanabilirsiniz. Sonuçta, systemd çok sayıda hizmetten oluşur; birçoğu isteğe bağlıdır, yani bunları kapatabilir ve onun yerine başka bir şey kullanabilirsiniz. Bu devasa bir yekpare canavar değil. Sistemi veya parçalarını beğenmeyebilirsiniz, ancak bilinçli bir karar vermelisiniz.

Systemd'nin NTP uygulamasını seviyorum, ancak ihtiyaçlarımı daha iyi karşıladığı için Chrony'yi tercih ediyorum. Bu Linux, bebeğim -)

Reklam gibi

VDSina teklifleri herhangi bir görev için sunucular, otomatik kurulum için çok çeşitli işletim sistemleri, kendi işletim sisteminizden herhangi bir işletim sistemi kurmak mümkündür ISO, rahat панель управления kendi gelişimi ve günlük ödeme. Kesinlikle zamansız olan sonsuz sunucularımız olduğunu hatırlayın 😉

Linux Zaman Senkronizasyonu: NTP, Chrony ve systemd-timesyncd

Kaynak: habr.com

Yorum ekle