GNU/Linux >> Znalost Linux >  >> Linux

Spravujte NTP pomocí Chrony

"Opravdu někdo ví, kolik je hodin? Opravdu to někoho zajímá?"

– Chicago, 1969

Možná té rockové skupině bylo jedno, kolik je hodin, ale naše počítače potřebují znát přesný čas. Měření času je pro počítačové sítě velmi důležité. V bankovnictví, na akciových trzích a v jiných finančních podnicích musí být transakce udržovány ve správném pořadí a přesné časové sekvence jsou pro to rozhodující. Pro systémové správce a profesionály DevOps je snazší sledovat stopu e-mailu přes řadu serverů nebo určit přesnou sekvenci událostí pomocí souborů protokolu na geograficky rozptýlených hostitelích, když jsou na příslušných počítačích uchovávány přesné časy.

Kdysi jsem pracoval v organizaci, která přijímala přes 20 milionů e-mailů denně a měla čtyři servery, aby přijala a provedla základní filtr na příchozí záplavu e-mailů. Odtud byly e-maily odesílány na jeden ze čtyř dalších serverů, aby provedly složitější antispamová hodnocení, a poté byly doručeny na jeden z několika dalších serverů, kde byly e-maily umístěny do správných schránek. Na každé vrstvě by byly e-maily odesílány na jeden ze serverů další úrovně, vybraný pouze na základě náhodnosti systému DNS typu round-robin. Někdy jsme museli sledovat novou zprávu v systému, dokud jsme nemohli určit, kde se "ztratila", podle špičatých šéfů. Museli jsme to dělat s děsivou pravidelností.

Většina těchto e-mailů se ukázala jako spam. Někteří lidé si ve skutečnosti stěžovali, že jejich [vtip, kočičí obrázek, recept, inspirativní výrok nebo jiný-podivný-e-mail] dne chybí, a požádali nás, abychom to našli. Tyto příležitosti jsme odmítli.

Naše e-mailové a další transakční vyhledávání napomáhaly záznamy v protokolu s časovými razítky, které – dnes – dokážou rozlišit až nanosekundu i na těch nejpomalejších moderních linuxových počítačích. V prostředí s velmi velkým objemem transakcí může i několik mikrosekund rozdílu v systémových hodinách znamenat seřazení tisíců transakcí, abyste našli tu správnou.

Hierarchie serveru NTP

Počítače po celém světě používají protokol NTP (Network Time Protocol) k synchronizaci svých časů s internetovými standardními referenčními hodinami prostřednictvím hierarchie serverů NTP. Primární servery jsou na vrstvě 1 a jsou připojeny přímo k různým národním časovým službám ve vrstvě 0 přes satelit, rádio nebo dokonce modemy přes telefonní linky. Časovou službou ve vrstvě 0 mohou být atomové hodiny, rádiový přijímač naladěný na signály vysílané atomovými hodinami nebo přijímač GPS využívající vysoce přesné hodinové signály vysílané satelity GPS.

Aby časové požadavky z časových serverů nižších v hierarchii (tj. s vyšším číslem vrstvy) nepřehlušily primární referenční servery, existuje několik tisíc veřejných serverů NTP vrstvy 2, které jsou otevřené a dostupné pro kohokoli. Mnoho organizací s velkým počtem hostitelů, kteří potřebují server NTP, nastaví své vlastní časové servery tak, že pouze jeden místní hostitel přistupuje k časovým serverům vrstvy 2, poté nakonfigurují zbývající síťové hostitele tak, aby používali místní časový server, který v mém případě , je server vrstvy 3.

Volby NTP

Původní démon NTP, ntpd , se připojil novější, chronyd . Oba udržují čas místního hostitele synchronizovaný s časovým serverem. Obě služby jsou dostupné a nevidím nic, co by naznačovalo, že se to v dohledné době změní.

Chrony má funkce, díky kterým je lepší volbou pro většinu prostředí z následujících důvodů:

  • Chrony se dokáže synchronizovat s časovým serverem mnohem rychleji než NTP. To je dobré pro notebooky nebo stolní počítače, které neběží neustále.

  • Dokáže kompenzovat kolísající taktovací frekvence, například když hostitel přejde do režimu spánku nebo hibernace, nebo když se rychlost hodin mění v důsledku krokování frekvence, které zpomaluje rychlost hodin při nízké zátěži.

  • Zvládá přerušovaná síťová připojení a saturaci šířky pásma.

  • Přizpůsobuje se zpožděním a latenci sítě.

  • Po počáteční synchronizaci času Chrony nikdy nepřekročí hodiny. To zajišťuje stabilní a konzistentní časové intervaly pro systémové služby a aplikace.

  • Chrony může fungovat i bez připojení k síti. V tomto případě lze místního hostitele nebo server aktualizovat ručně.

Balíčky NTP a Chrony RPM jsou dostupné ze standardních repozitářů Fedory. Můžete nainstalovat oba a přepínat mezi nimi, ale moderní verze Fedory, CentOS a RHEL se přesunuly z NTP na Chrony jako výchozí implementace pro udržování času. Zjistil jsem, že Chrony funguje dobře, poskytuje lepší rozhraní pro správce systému, poskytuje mnohem více informací a zvyšuje kontrolu.

Aby bylo jasno, NTP je protokol, který je implementován buď s NTP nebo Chrony. Pokud se chcete dozvědět více, přečtěte si toto srovnání mezi NTP a Chrony jako implementacemi protokolu NTP.

Tento článek vysvětluje, jak nakonfigurovat klienty a servery Chrony na hostiteli Fedory, ale konfigurace pro aktuální vydání CentOS a RHEL funguje stejně.

Chrony struktura

Démon Chrony, chronyd , běží na pozadí a sleduje čas a stav časového serveru uvedeného v chrony.conf soubor. Pokud je potřeba upravit místní čas, chronyd dělá to hladce bez programového traumatu, ke kterému by došlo, kdyby se hodiny okamžitě přestavily na nový čas.

Chronyho chronyc nástroj umožňuje někomu sledovat aktuální stav Chrony a v případě potřeby provádět změny. chronyc obslužný program lze použít jako příkaz, který přijímá dílčí příkazy, nebo jej lze použít jako interaktivní program v textovém režimu. Tento článek vysvětlí obě použití.

Konfigurace klienta

Konfigurace klienta NTP je jednoduchá a vyžaduje malý nebo žádný zásah. NTP server může být definován během instalace Linuxu nebo poskytnut DHCP serverem při bootování. Výchozí /etc/chrony.conf soubor (zobrazený jako celek níže) nevyžaduje žádný zásah, aby správně fungoval jako klient. Pro Fedoru používá Chrony fond Fedora NTP a CentOS a RHEL mají své vlastní fondy serverů NTP. Stejně jako mnoho distribucí založených na Red Hatu je konfigurační soubor dobře okomentován.

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.fedora.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).


# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

Podívejme se na aktuální stav NTP na virtuálním počítači, který používám k testování. chronyc při použití s ​​sledováním dílčí příkaz, poskytuje statistiky, které hlásí, jak daleko je lokální systém od referenčního serveru.

[root@studentvm1 ~]# chronyc tracking 
Reference ID    : 23ABED4D (ec2-35-171-237-77.compute-1.amazonaws.com)
Stratum         : 3
Ref time (UTC)  : Fri Nov 16 16:21:30 2018
System time     : 0.000645622 seconds slow of NTP time
Last offset     : -0.000308577 seconds
RMS offset      : 0.000786140 seconds
Frequency       : 0.147 ppm slow
Residual freq   : -0.073 ppm
Skew            : 0.062 ppm
Root delay      : 0.041452706 seconds
Root dispersion : 0.022665167 seconds
Update interval : 1044.2 seconds
Leap status     : Normal
[root@studentvm1 ~]#

Referenční ID v prvním řádku výsledku je server, se kterým je hostitel synchronizován – v tomto případě referenční server vrstvy 3, který byl hostitelem naposledy kontaktován v 16:21:30 2018. Další řádky jsou popsány v manuálová stránka chronyc(1).

Zdroje dílčí příkaz je také užitečný, protože poskytuje informace o zdroji času nakonfigurovaném v chrony.conf .

[root@studentvm1 ~]# chronyc sources
210 Number of sources = 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^+ 192.168.0.51                  3   6   377     0  -2613us[-2613us] +/-   63ms
^+ dev.smatwebdesign.com         3  10   377   28m  -2961us[-3534us] +/-  113ms
^+ propjet.latt.net              2  10   377   465  -1097us[-1085us] +/-   77ms
^* ec2-35-171-237-77.comput>     2  10   377    83  +2388us[+2395us] +/-   95ms
^+ PBX.cytranet.net              3  10   377   507  -1602us[-1589us] +/-   96ms
[root@studentvm1 ~]#

Prvním zdrojem v seznamu je časový server, který jsem nastavil pro svou osobní síť. Ostatní poskytl bazén. I když se můj NTP server nezobrazuje v konfiguračním souboru Chrony výše, můj DHCP server poskytuje svou IP adresu pro NTP server. Sloupec „S“ – stav zdroje – je označen hvězdičkou (* ) server, se kterým je synchronizován náš hostitel. To je v souladu s údaji ze sledování dílčí příkaz.

-v Tato volba poskytuje pěkný popis polí v tomto výstupu.

[root@studentvm1 ~]# chronyc sources -v
210 Number of sources = 5

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^+ 192.168.0.51                  3   7   377    28  -2156us[-2156us] +/-   63ms
^+ triton.ellipse.net            2  10   377    24  +5716us[+5716us] +/-   62ms
^+ lithium.constant.com          2  10   377   351   -820us[ -820us] +/-   64ms
^* t2.time.bf1.yahoo.com         2  10   377   453   -992us[ -965us] +/-   46ms
^- ntp.idealab.com               2  10   377   799  +3653us[+3674us] +/-   87ms
[root@studentvm1 ~]#

Pokud bych chtěl, aby můj server byl preferovaným zdrojem referenčního času pro tohoto hostitele, přidal bych řádek níže do /etc/chrony.conf soubor.

server 192.168.0.51 iburst prefer

Obvykle umístím tento řádek těsně nad první příkaz pool serveru blízko horní části souboru. Není pro to žádný zvláštní důvod, kromě toho, že mám rád výpisy serveru pohromadě. Fungovalo by to stejně dobře ve spodní části souboru a udělal jsem to na několika hostitelích. Tento konfigurační soubor není závislý na sekvenci.

Přednost možnost označí toto jako preferovaný referenční zdroj. Jako takový bude tento hostitel vždy synchronizován s tímto referenčním zdrojem (pokud je dostupný). Můžeme také použít plně kvalifikovaný název hostitele pro vzdálený referenční server nebo pouze název hostitele (bez názvu domény) pro místní zdroj referenčního času, pokud je výraz hledání nastaven v /etc/resolv.conf soubor. Preferuji IP adresu, abych zajistil, že zdroj času bude dostupný, i když DNS nefunguje. Ve většině prostředí je název serveru pravděpodobně lepší volbou, protože NTP bude nadále fungovat, i když se změní IP adresa serveru.

Pokud nemáte konkrétní referenční zdroj, se kterým chcete synchronizovat, je dobré použít výchozí hodnoty.

Konfigurace serveru NTP pomocí Chrony

Pěkná věc na konfiguračním souboru Chrony je, že tento jediný soubor konfiguruje hostitele jako klienta i jako server. Abychom k našemu hostiteli přidali funkci serveru – vždy to bude klient, který získá svůj čas z referenčního serveru – stačí provést několik změn v konfiguraci Chrony a poté nakonfigurovat bránu firewall hostitele tak, aby přijímala požadavky NTP.

Otevřete /etc/chrony .conf soubor ve svém oblíbeném textovém editoru a odkomentujte místní vrstvu 10 čára. To umožňuje serveru Chrony NTP pokračovat v chování, jako by byl připojen ke vzdálenému referenčnímu serveru, pokud selže internetové připojení; to umožňuje hostiteli zůstat NTP serverem pro ostatní hostitele v místní síti.

Restartujeme chronyd a několik minut sledujte, jak služba funguje. Než povolíme našeho hostitele jako NTP server, chceme to trochu otestovat.

[root@studentvm1 ~]# systemctl restart chronyd ; watch chronyc tracking

Výsledky by měly vypadat takto. hodinky příkaz spustí chronyc tracking příkaz každé dvě sekundy, abychom mohli sledovat změny, ke kterým dochází v průběhu času.

Every 2.0s: chronyc tracking                                           studentvm1: Fri Nov 16 20:59:31 2018

Reference ID    : C0A80033 (192.168.0.51)
Stratum         : 4
Ref time (UTC)  : Sat Nov 17 01:58:51 2018
System time     : 0.001598277 seconds fast of NTP time
Last offset     : +0.001791533 seconds
RMS offset      : 0.001791533 seconds
Frequency       : 0.546 ppm slow
Residual freq   : -0.175 ppm
Skew            : 0.168 ppm
Root delay      : 0.094823152 seconds
Root dispersion : 0.021242738 seconds
Update interval : 65.0 seconds
Leap status     : Normal

Všimněte si, že můj NTP server, studentvm1 hostitel, synchronizuje se s hostitelem na 192.168.0.51, což je můj interní síťový NTP server, na vrstvě 4. Synchronizace přímo se stroji fondu Fedora by vedla k synchronizaci na vrstvě 3. Všimněte si také, že množství chyb se časem snižuje. Nakonec by se měl stabilizovat s malou odchylkou kolem poměrně malého rozsahu chyb. Velikost chyby závisí na vrstvě a dalších faktorech sítě. Po několika minutách použijte Ctrl+C k opuštění smyčky sledování.

Abychom z našeho hostitele udělali NTP server, musíme mu umožnit naslouchat v místní síti. Odkomentujte následující řádek, aby hostitelé v místní síti měli přístup k našemu serveru NTP.

# Allow NTP client access from local network.
allow 192.168.0.0/16

Všimněte si, že server může naslouchat požadavkům v jakékoli místní síti, ke které je připojen. IP adresa v řádku "povolit" je určena pouze pro ilustrativní účely. Nezapomeňte změnit IP síť a masku podsítě v tomto řádku tak, aby odpovídaly vaší místní síti.

Restartujte chronyd .

[root@studentvm1 ~]# systemctl restart chronyd

Chcete-li povolit ostatním hostitelům ve vaší síti přístup k tomuto serveru, nakonfigurujte bránu firewall tak, aby povolovala příchozí pakety UDP na portu 123. Postup naleznete v dokumentaci brány firewall.

Testování

Váš hostitel je nyní server NTP. Můžete to otestovat s jiným hostitelem nebo virtuálním počítačem, který má přístup k síti, na které NTP server naslouchá. Nakonfigurujte klienta tak, aby používal nový NTP server jako preferovaný server v /etc/chrony.conf a poté tohoto klienta monitorujte pomocí chronyc nástroje, které jsme použili výše.

Chronyc jako interaktivní nástroj

Jak jsem již zmínil, chronyc lze použít jako interaktivní příkazový nástroj. Jednoduše spusťte příkaz bez dílčího příkazu a získáte chronyc příkazový řádek.

[root@studentvm1 ~]# chronyc
chrony version 3.4
Copyright (C) 1997-2003, 2007, 2009-2018 Richard P. Curnow and others
chrony comes with ABSOLUTELY NO WARRANTY.  This is free software, and
you are welcome to redistribute it under certain conditions.  See the
GNU General Public License version 2 for details.

chronyc>

Na tuto výzvu můžete zadat pouze dílčí příkazy. Zkuste použít sledování , ntpdata a zdroje příkazy. chronyc příkazový řádek umožňuje vyvolání a úpravy příkazů pro chronyc dílčí příkazy. Můžete použít nápovědu dílčím příkazem získáte seznam možných příkazů a jejich syntaxi.

Závěr

Chrony je výkonný nástroj pro synchronizaci časů klientských hostitelů, ať už jsou všichni v místní síti nebo rozptýleni po celém světě. Je snadné jej nakonfigurovat, protože navzdory velkému počtu dostupných možností je pro většinu okolností vyžadováno pouze několik konfigurací.

Poté, co se mé klientské počítače synchronizují se serverem NTP, rád bych nastavil systémové hardwarové hodiny ze systémového (OS) času pomocí následujícího příkazu:

/sbin/hwclock --systohc

Tento příkaz lze přidat jako úlohu cron nebo skript do cron.daily aby byly hardwarové hodiny synchronizovány se systémovým časem.

Chrony a NTP (služba) používají stejnou konfiguraci a obsah souborů je zaměnitelný. Manuálové stránky pro chronyd, chronyc a chrony.conf obsahují úžasné množství informací, které vám mohou pomoci začít nebo se dozvědět o možnostech esoterické konfigurace.

Provozujete svůj vlastní NTP server? Dejte nám vědět v komentářích a nezapomeňte nám sdělit, jakou implementaci používáte, NTP nebo Chrony.


Linux
  1. Time Sync Linux

  2. Čas zahájení procesu s časovým pásmem?

  3. Spravujte páry klíčů SSH pro cloudové servery pomocí python-novaclient

  1. Time Sync Linux

  2. Jak nastavit časové pásmo a synchronizovat čas serveru s NTP v Linuxu

  3. Synchronizujte čas serveru Linux se serverem času sítě

  1. Začněte s cloudovými servery

  2. Použijte CloudFlare s Rackspace

  3. CentOS / RHEL 7:Tipy pro řešení problémů s NTP / chronickými problémy