linux下NTP服务器实战(chrony软件)

linux下NTP服务器实战(chrony软件)

记录linux下NTP服务器搭建及相关管理操作,使用chrony软件包安装部署。相比ntp服务,Chrony服务适用于更高精度、更高稳定性、自动化等场景。

1. 安装 chrony

在大多数Linux发行版上,chrony可以通过包管理器直接安装。

  • CentOS/RHEL:

    sudo yum install chrony   # CentOS 7 及之前的版本
    sudo dnf install chrony   # CentOS 8 和 Fedora
    
  • Ubuntu/Debian:

    sudo apt install chrony
    

chrony 守护进程的默认位置为 /usr/sbin/chronyd。命令行工具将安装到 /usr/bin/chronyc

2. 配置chrony

chrony的配置文件通常位于/etc/chrony.conf。要将机器配置为NTP服务器,需进行如下修改:

编辑 /etc/chrony.conf 文件:

sudo vim /etc/chrony.conf
  1. 允许网络客户端访问:
    找到并修改或添加以下配置,允许特定网段或所有网络客户端访问:

    allow 192.168.0.0/24   # 允许指定网段访问
    allow all              # 允许所有客户端访问
    
  2. 选择上游时间源:
    可以设置NTP服务器来同步本地时间。以下是一些常用的NTP服务器:

    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    
  3. 设置NTP服务器为本地时间主机:
    如果此NTP服务器在不与外界同步的情况下应保持提供时间服务,可以启用本地时间作为时间源:

    local stratum 10
    

    这里设置的stratum值较高,以避免本地时间被优先用于其他时间服务器。

配置文件示例:

[root@ntp ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 10.210.10.220 iburst
# 指定了一个 NTP 服务器的地址(10.210.10.220)。iburst 选项使得当客户端第一次与服务器进行通信时,如果无法立即建立连接,客户端会发送一组加速的请求(通常为 4 个包),以加快与时间服务器的同步速度。

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# driftfile 参数指定了存储系统时钟漂移数据的文件。系统定期测量其内部时钟的漂移(增快或减慢的速率)并记录到该文件中,这可以帮助 chrony 更好地调整系统时钟。

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# 允许在前 3 次时间更新时,如果系统时钟的偏差超过 1 秒,chrony 可以直接调整系统时钟,而不是渐进调整。这在系统启动后可以快速纠正较大的时间偏差。

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# 启用内核的 RTC(实时时钟)同步。当系统时钟与 NTP 服务器同步时,内核会自动同步硬件时钟(通常是 BIOS 中的时钟)与系统时钟,以确保即使系统关机,硬件时钟也能保持准确。

# 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
# 如果启用,将设置系统调整时钟时所需的最少可用时间源数目为 2。这有助于确保同步的时间更为可靠。

# Allow NTP client access from local network.
# allow 192.168.0.0/16	# 允许特定的网络范围(如 192.168.0.0/16)内的客户端访问本地 NTP 服务。
# 默认情况下,远程的 NTP 客户端是无法与该 chrony 服务器进行时间同步的。需要通过 allow 指令明确地允许特定的网络范围或 IP 地址进行时间同步。
allow all  # 允许所有客户端同步时间。
# Serve time even if not synchronized to a time source.
#local stratum 10
# 如果启用,即使本机没有与外部时间源同步,也会向网络上的其他设备提供时间服务,并将本地服务器的 stratum 设置为 10(即优先级较低的时间源)。

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys
# 如果启用,它会指定一个包含 NTP 身份验证密钥的文件。这用于在服务器和客户端之间进行身份验证,确保同步时间的安全性。

# Specify directory for log files.
logdir /var/log/chrony
# logdir 参数指定了 chrony 写日志的目录路径。在这里,日志文件将存储在 /var/log/chrony 目录下。 	

# Select which information is logged.
#log measurements statistics tracking
# 如果启用,chrony 会记录测量值、统计信息以及时间跟踪等详细日志信息。

3. 启动chrony服务

保存配置文件后,启动并启用chrony服务:

sudo systemctl start chronyd
sudo systemctl enable chronyd

4. 检查NTP服务状态

确认chrony正在运行并同步时间:

chronyc tracking

此命令会显示本地系统与NTP服务器的同步状态。

5. 客户端配置

在客户端机器上,确保chronyntpd安装完成并且配置好指向你的NTP服务器:

编辑客户端的/etc/chrony.conf/etc/ntp.conf,添加你的NTP服务器IP地址:

server <NTP服务器的IP地址> iburst

保存后,重启客户端的chronydntpd服务:

sudo systemctl restart chronyd  # 或 ntpd

6. 验证同步

在客户端上,可以通过以下命令检查是否与服务器同步:

chronyc sources

这会列出当前的时间源,确保NTP服务器显示为活动时间源。

示例输出:

210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- time1.google.com              1   6    377    48   -176us[ -199us] +/-  15ms
^* time2.google.com              1   6    377    47   +245us[ +220us] +/-  13ms
^- time3.google.com              1   6    377    47   -310us[ -332us] +/-  16ms
^+ time4.google.com              1   6    377    48   +129us[ +105us] +/-  14ms
[root@dns ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.210.10.45                  5   6    37    15    +18us[+1062us] +/-   11ms

字段解释:

  • MS: 这列表示当前时间源的状态标记。

    • ^ 表示该时间源是NTP服务器。
    • * 表示当前使用的时间源(同步的主源)。
    • + 表示备用时间源,可能被选为候选同步源。
    • - 表示被排除的时间源,当前不会同步该时间源。
    • = 表示该时间源是peer节点。
    • ?:表示该服务器的状态未知,可能无法到达或正在等待响应。
    • x:表示该时间源的时间可能有错误,因此不能被信任。
    • ~:表示该时间源的时间变化太大,波动性过高,无法稳定同步。
  • Name/IP address:

    这是时间源的主机名或IP地址。它显示的是你系统上配置的时间源。

  • Stratum:

    NTP层级值,表示时间源的层次。stratum越低,时间源越靠近参考时钟(例如原子钟)。本地时钟通常会被设置为较高的stratum值(如15),表示优先级较低。

  • Poll:

    表示轮询间隔,单位是秒的对数(2^Poll)。在这个示例中,值6表示当前的轮询间隔是2^6 = 64秒。

  • Reach:

    这是一个八位的二进制数值,表示最近的查询是否成功。377的十六进制表示是11111111,表示最近8次查询全部成功。

  • LastRx:

    上次接收到NTP服务器响应的时间,单位是秒。

  • Last sample:

    该列表示时间偏差(时间源与本地时钟的差异)和误差范围:

    • +245us[ +220us]:表示偏差为+245微秒,括号内表示的是过滤后的估计值+220微秒
    • +/- 13ms:这是该时间源的误差范围。

7. chronyc相关命令

  1. chronyc tracking

    • chronyc 跟踪,查看本地系统的时间同步状态,包括与时间源的偏差、同步源的 stratum 层级、本地时钟漂移等信息。
    • 输出示例:
      Reference ID    : 203.0.113.1 (ntp.example.com)
      Stratum         : 3
      Ref time (UTC)  : Tue Aug 29 12:00:00 2024
      System time     : 0.000000001 seconds fast of NTP time
      Last offset     : -0.000000002 seconds
      RMS offset      : 0.000000003 seconds
      Frequency       : 12.345 ppm slow
      Residual freq   : -0.001 ppm
      Skew            : 0.005 ppm
      
  2. chronyc sources

    • 显示当前配置的所有时间源的信息,包括其状态、stratum 层级、延迟、偏差等。
    • 输出示例:
      MS Name/IP address         Stratum Poll Reach LastRx Last sample
      ===============================================================================
      ^* ntp.example.com              2   6    377    30   -240us[ -310us] +/-  16ms
      ^+ ntp2.example.com             2   6    377    31   -124us[ -154us] +/-  12ms
      

    可以指定可选的 -v 参数来打印更详细的信息。在这种情况下,会输出额外的标头行显示字段含义的信息。

  3. chronyc sourcestats

    • 显示时间源的统计信息,包括标准偏差、延迟等。
    • 输出示例:
      Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
      ===============================================================================
      ntp.example.com            12   6   198    +0.000     0.005  +12ns    16us
      

    可以使用可选参数 -v 来包括详细信息。在这种情况下,会输出额外的标头行显示字段含义的信息。

  4. chronyc ntpdata

    • 查看与某个特定时间源的NTP数据,包括该源的stratum、延迟、偏差、抖动等详细信息。
    • 用法:
      chronyc ntpdata ntp.example.com
      
  5. chronyc sources -v

    • 以详细模式显示时间源的信息。
    • 输出示例:
      210 Number of sources = 2
      MS Name/IP address            Stratum Poll Reach LastRx Last sample
      ===============================================================================
      ^* ntp.example.com                 2   6   377   30    -240us[ -310us] +/-  16ms
      ^+ ntp2.example.com                2   6   377   31    -124us[ -154us] +/-  12ms
      
  6. chronyc activity

    • 显示当前chrony服务的活动状态,如使用的时间源数量、已处理的请求数量等。
    • 命令:
      chronyc activity
      
  7. chronyc makestep

    • 强制进行时间跳步校正。适用于时间偏差较大(通常大于 1 秒)的情况。
    • 命令:
      chronyc -a makestep
      
  8. chronyc waitsync

    • 等待本地系统与NTP源同步完成,通常用于系统启动时确保时间已同步。
    • 命令:
      chronyc waitsync
      
  9. chronyc clients

    • 显示已连接到此 NTP 服务器的客户端信息。
    • 命令:
      chronyc clients
      
  10. chronyc serverstats

    • 显示当前NTP服务器的统计信息,包括已处理的NTP请求数量、拒绝的请求数量等。
    • 命令:
      chronyc serverstats
      
  11. chronyc add server <server_ip>

    • 动态添加一个新的NTP服务器作为时间源。
    • 命令:
      chronyc add server ntp.example.com iburst
      
  12. chronyc delete server <server_ip>

    • 动态删除一个时间源。
    • 命令:
      chronyc delete server ntp.example.com
      

说明:

动态修改不会永久保存,重启 Chrony 后会丢失。要永久更改,请编辑配置文件。

8. ntp服务与chrony服务对比

Chrony服务和NTP服务对比:

时间同步服务使用场景时间同步精度稳定性简介
Chrony服务适用于高精度、高稳定性、自动化等场景。较高能够更好地适应高延迟和不稳定的网络环境。Chrony是一个实现网络时间协议(NTP)的软件包,用于同步计算机的系统时间与世界各地的NTP服务器。Chrony特别适合在变化的网络环境中运行,能够以快速和高效的方式调整系统时间。更多信息,请参见Chrony
NTP服务适用于大多数无需太高精度要求的普通场景。正常仅能适应一定程度的网络不稳定。NTP是一种经典的时间同步服务,是NTP协议的一个实现。NTP适用于长期运行的服务器,特别是在网络条件比较稳定的环境下。更多信息,请参见NTP

ntp服务文件和chrony服务文件对比:

ntp namechrony name
/etc/ntp.conf/etc/chrony.conf
/etc/ntp/keys/etc/chrony.keys
ntpdchronyd
ntpqchronyc
ntpd.servicechronyd.service
ntp-wait.servicechrony-wait.service

将ntp服务器迁移到chrony服务器:

在chrony包(/usr/share/doc/chrony)的文档中,包含了一个名为ntp2chrony.py的Python脚本。该脚本用于自动将现有的NTP配置转换为chrony配置。详情参考下面链接:

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/configuring-time-synchronization_configuring-basic-system-settings#proc_migrating-to-chrony_using-chrony-to-configure-ntp

9. 相关资料

  1. Chapter 18. Configuring NTP Using the chrony Suite | Red Hat Product Documentation
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值