如何安裝和設定 Chrony 作為 NTP 用戶端?

2019-05-06 14:56:00

NTP 伺服器和 NTP 用戶端可以讓我們通過網路來同步時鐘。之前,我們已經撰寫了一篇關於 的文章。

如果你想看這些內容,點選上述的 URL 存取。

Chrony 用戶端

Chrony 是 NTP 用戶端的替代品。它能以更精確的時間和更快的速度同步時鐘,並且它對於那些不是全天候線上的系統非常有用。

chronyd 更小、更節能,它佔用更少的記憶體且僅當需要時它才喚醒 CPU。即使網路擁塞較長時間,它也能很好地執行。它支援 Linux 上的硬體時間戳,允許在本地網路進行極其準確的同步。

它提供下列兩個服務。

  • chronyc:Chrony 的命令列介面。
  • chronyd:Chrony 守護行程服務。

如何在 Linux 上安裝和設定 Chrony?

由於安裝包在大多數發行版的官方倉庫中可用,因此直接使用包管理器去安裝它。

對於 Fedora 系統,使用 DNF 命令 去安裝 chrony。

$ sudo dnf install chrony

對於 Debian/Ubuntu 系統,使用 APT-GET 命令 或者 APT 命令 去安裝 chrony。

$ sudo apt install chrony

對基於 Arch Linux 的系統,使用 Pacman 命令 去安裝 chrony。

$ sudo pacman -S chrony

對於 RHEL/CentOS 系統,使用 YUM 命令 去安裝 chrony。

$ sudo yum install chrony

對於 openSUSE Leap 系統,使用 Zypper 命令 去安裝 chrony。

$ sudo zypper install chrony

在這篇文章中,我們將使用下列設定去測試。

  • NTP 伺服器:主機名:CentOS7.2daygeek.com,IP:192.168.1.5,OS:CentOS 7
  • Chrony 用戶端:主機名:Ubuntu18.2daygeek.com,IP:192.168.1.3,OS:Ubuntu 18.04

伺服器的安裝請存取 的 URL。

我已經在 CentOS7.2daygeek.com 這台主機上安裝和設定了 NTP 伺服器,因此,將其附加到所有的用戶端機器上。此外,還包括其他所需資訊。

chrony.conf 檔案的位置根據你的發行版不同而不同。

對基於 RHEL 的系統,它位於 /etc/chrony.conf

對基於 Debian 的系統,它位於 /etc/chrony/chrony.conf

# vi /etc/chrony/chrony.confserver CentOS7.2daygeek.com prefer iburstkeyfile /etc/chrony/chrony.keysdriftfile /var/lib/chrony/chrony.driftlogdir /var/log/chronymaxupdateskew 100.0makestep 1 3cmdallow 192.168.1.0/24

更新設定後需要重新啟動 Chrony 服務。

對於 sysvinit 系統。基於 RHEL 的系統需要去執行 chronyd 而不是 chrony

# service chronyd restart# chkconfig chronyd on

對於 systemctl 系統。 基於 RHEL 的系統需要去執行 chronyd 而不是 chrony

# systemctl restart chronyd# systemctl enable chronyd

使用像 tackingsourcessourcestats 這樣的子命令去檢查 chrony 的同步細節。

去檢查 chrony 的追蹤狀態。

# chronyc trackingReference ID    : C0A80105 (CentOS7.2daygeek.com)Stratum         : 3Ref time (UTC)  : Thu Mar 28 05:57:27 2019System time     : 0.000002545 seconds slow of NTP timeLast offset     : +0.001194361 secondsRMS offset      : 0.001194361 secondsFrequency       : 1.650 ppm fastResidual freq   : +184.101 ppmSkew            : 2.962 ppmRoot delay      : 0.107966967 secondsRoot dispersion : 1.060455322 secondsUpdate interval : 2.0 secondsLeap status     : Normal

執行 sources 命令去顯示當前時間源的資訊。

# chronyc sources210 Number of sources = 1MS Name/IP address         Stratum Poll Reach LastRx Last sample===============================================================================^* CentOS7.2daygeek.com          2   6    17    62    +36us[+1230us] +/- 1111ms

sourcestats 命令顯示有關 chronyd 當前正在檢查的每個源的漂移率和偏移估計過程的資訊。

# chronyc sourcestats210 Number of sources = 1Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev==============================================================================CentOS7.2daygeek.com        5   3    71    -97.314     78.754   -469us   441us

當 chronyd 設定為 NTP 用戶端或對等端時,你就能通過 chronyc ntpdata 命令向每一個 NTP 源傳送/接收時間戳模式和交錯模式的報告。

# chronyc ntpdataRemote address  : 192.168.1.5 (C0A80105)Remote port     : 123Local address   : 192.168.1.3 (C0A80103)Leap status     : NormalVersion         : 4Mode            : ServerStratum         : 2Poll interval   : 6 (64 seconds)Precision       : -23 (0.000000119 seconds)Root delay      : 0.108994 secondsRoot dispersion : 0.076523 secondsReference ID    : 85F3EEF4 ()Reference time  : Thu Mar 28 06:43:35 2019Offset          : +0.000160221 secondsPeer delay      : 0.000664478 secondsPeer dispersion : 0.000000178 secondsResponse time   : 0.000243252 secondsJitter asymmetry: +0.00NTP tests       : 111 111 1111Interleaved     : NoAuthenticated   : NoTX timestamping : KernelRX timestamping : KernelTotal TX        : 46Total RX        : 46Total valid RX  : 46

最後執行 date 命令。

# dateThu Mar 28 03:08:11 CDT 2019

為了立即跟進系統時鐘,繞過任何正在進行的緩步調整,請以 root 身份執行以下命令(以手動調整系統時鐘)。

# chronyc makestep