linux--chrony时间同步以及局域网同步


注意

有时候重启不起来,可以查看/var/log/message,博主因为chronyc版本是最新的,但是不兼容linux的内核,需要升级系统版本或者直接yum -y update

Chrony介绍

概述
Chrony 是一款多功能的网络时间协议(NTP)实现,它能够通过NTP服务器来同步系统时钟。此外,它还可以作为NTPv4(RFC 5905)服务器和对等体,为网络中的其他计算机提供时间服务。

适用环境
Chrony 设计用于在广泛的条件下表现出色,包括间歇性网络连接、网络拥堵严重、温度变化(普通计算机时钟对温度敏感)以及非持续运行的系统,或在虚拟机上运行的系统。Chrony 的适应性使其成为了在各种复杂环境中保持时间同步的理想选择。

同步精度
在实际应用中,Chrony 的同步精度非常高。对于通过互联网同步的两台机器,典型的精度可以达到几毫秒以内;而在局域网(LAN)中,精度通常在几十微秒内。如果使用硬件时间戳或硬件参考时钟,甚至可以达到亚微秒级的精度。

组件与功能
Chrony 包含两个主要程序:

  1. chronyd:这是一个守护进程,可以在系统启动时运行。
  2. chronyc:这是一个命令行界面程序,可以用于监控 chronyd 的性能,并在其运行时更改各种操作参数。

Chrony 的设计使得它不仅适用于传统的服务器和桌面系统,还能够胜任一些更加苛刻的环境,如移动设备或间歇连接的系统。因此,Chrony 已成为许多对时间同步有高要求的用户和组织的首选方案。

Chrony 支持的系统与联系方式

支持的系统
Chrony 软件支持以下操作系统:

  • Linux
  • FreeBSD
  • NetBSD
  • macOS
  • illumos

此外,与这些系统紧密相关的操作系统也可能兼容。如果是其他系统,则可能需要进行移植工作才能运行 Chrony。

联系方式
Chrony 项目提供了两个邮件列表来帮助用户解决问题和参与开发:

  1. chrony-user:用于用户提问、提交错误报告。
  2. chrony-devel:用于提交补丁和开发讨论。

有关邮件列表的更多信息,请访问 Chrony 官方网站

对于安全漏洞,建议直接使用加密方式联系维护者进行报告。

开发和维护者
Chrony 最初由 Richard Curnow 编写,目前由 Miroslav Lichvar 维护和开发(PGP 密钥可用)。

官方网址
欲了解更多信息,请访问 Chrony 官方网站

Chrony Git 仓库

Chrony 的 Git 仓库托管在 GitLab 上,可以通过以下链接访问:

要克隆这个仓库,可以使用以下命令:

git clone https://gitlab.com/chrony/chrony.git

通过克隆仓库,您可以获得 Chrony 的最新源代码,并可以参与开发或定制。

环境准备

主机名IP用途
10-255-101-14710.255.101.147时间服务器,需要安装chrony
10-255-101-20310.255.101.203客户端服务器,同步时间,也需要安装chrony

服务端

确认是否安装chrony

systemctl status chronyd

在这里插入图片描述

如果没有安装,那就执行以下命令进行安装

# 安装
yum -y install chrony
# 开机自启
systemctl enable chronyd
# 启动
systemctl start chronyd

配置文件/etc/chrony.conf

默认的可以删除,也可以对比看一下,我主要是中文注释,不是英文其他都一样,配置很多可以参考官网的配置

# 这个配置文件用于Chrony的时间同步配置

# 使用阿里云的NTP服务器池进行时间同步。
pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst
pool ntp3.aliyun.com iburst
pool ntp4.aliyun.com iburst
pool ntp5.aliyun.com iburst
pool ntp6.aliyun.com iburst

# 使用Rocky Linux的NTP服务器池进行时间同步。
pool 2.rocky.pool.ntp.org iburst

# 从DHCP获取的NTP服务器。
sourcedir /run/chrony-dhcp

# 记录系统时钟的漂移率,即系统时钟增速或减速的速率。
driftfile /var/lib/chrony/drift

# 允许在前3次更新中,如果时间偏差超过1秒,可以立即调整系统时钟。
makestep 1.0 3

# 启用内核对实时时钟 (RTC) 的同步。
rtcsync

# 启用所有支持硬件时间戳的接口上的硬件时间戳。
#hwtimestamp *

# 增加调整系统时钟所需的最少可选择源的数量。
#minsources 2

# 允许本地网络中的NTP客户端访问,不指定就是允许所有,默认不开启
# 允许10.255.101.0的地址段同步
allow 10.255.101.0/24
# 允许192.168.1.0的地址段同步
allow 192.168.1.0/24

# 即使没有同步到时间源,也允许提供时间服务。
#local stratum 10

# 为所有NTP源要求身份验证 (nts 或 key 选项)。
#authselectmode require

# 指定包含NTP身份验证密钥的文件。
keyfile /etc/chrony.keys

# 保存NTS密钥和cookies。
ntsdumpdir /var/lib/chrony

# 通过slew(渐变调整)插入/删除闰秒,而不是通过stepping(步进调整)。
#leapsecmode slew

# 从系统时区数据库获取TAI-UTC偏移量和闰秒信息。
leapsectz right/UTC

# 指定日志文件的目录。
logdir /var/log/chrony

# 选择要记录的信息。
#log measurements statistics tracking

注意看allow是允许那个地址段的,不设置表示所有客户端都可同步
修改完进行重启

systemctl restart chronyd

命令参数讲解

基本用法

chronyc [OPTION]... [COMMAND]...

选项

  • -4:仅将主机名解析为 IPv4 地址。
  • -6:仅将主机名解析为 IPv6 地址。
  • -n:禁用 IP 地址到主机名的解析。
  • -m:允许在命令行上指定多个命令。
  • -h host:指定要联系的 chronyc 主机。
  • -p port:指定目标 chronyd 使用的 UDP 端口号(默认为 323)。
  • -v, --version:显示 chronyc 的版本号并退出。
  • --help:显示帮助信息并退出。

命令

系统时钟命令
  • tracking:显示系统时钟性能的参数。
  • makestep:使系统时钟立即跳到正确的时间。
  • waitsync:等待 chronyd 同步。
时间源命令
  • sources:显示当前时间源的信息。
  • sourcestats:显示每个时间源的漂移率和偏移估计过程信息。
  • selectdata:显示时间源选择的具体信息。
  • selectopts:修改 NTP 源的配置选择选项。
  • reselect:强制 chronyd 重新选择最佳同步源。
  • add peeradd pooladd server:添加新的 NTP 对等端、服务器池或服务器。
  • delete:删除 NTP 服务器或对等端。
  • burst:让 chronyd 在短时间内对每个 NTP 源进行一系列测量。
NTP 访问命令
  • accheck:检查特定主机是否允许 NTP 访问。
  • clients:显示访问 NTP 服务器的客户端列表。
  • serverstats:显示 NTP 和命令服务器统计信息。
  • allowdeny:配置允许或拒绝 NTP 访问的主机。
执行命令参考

在这里插入图片描述

# 检查 Chrony 的时间同步状态
[root@10-255-101-147 ~]# chronyc tracking

# 输出解释:
# Reference ID: 当前参考时间源的IP地址或主机名。
# Stratum: 时间源的层级,值越小,离实际时间源越近。
# Ref time (UTC): 上次与时间源同步的时间(UTC时间)。
# System time: 系统时间与NTP时间的差异,单位为秒。
# Last offset: 上次同步的时间偏移量。
# RMS offset: 均方根偏差,即所有时间偏移的均方根值。
# Frequency: 系统时钟的频率误差,单位为ppm(百万分之一)。
# Residual freq: 剩余频率误差。
# Skew: 系统时钟的频率误差不确定性,单位为ppm。
# Root delay: 本地系统与参考时间源之间的总网络延迟。
# Root dispersion: 时间源的不确定性。
# Update interval: 两次同步之间的时间间隔。
# Leap status: 闰秒状态,Normal表示正常。

Reference ID    : CA701D52 (dns1.synet.edu.cn)
Stratum         : 2
Ref time (UTC)  : Tue Aug 13 07:44:24 2024
System time     : 0.000010633 seconds fast of NTP time
Last offset     : -0.000089578 seconds
RMS offset      : 0.000145360 seconds
Frequency       : 16.293 ppm fast
Residual freq   : -0.001 ppm
Skew            : 0.025 ppm
Root delay      : 0.014218345 seconds
Root dispersion : 0.000804991 seconds
Update interval : 1032.6 seconds
Leap status     : Normal

# 查看当前Chrony同步的时间源
[root@10-255-101-147 ~]# chronyc sources

# 输出解释:
# MS: 标记同步的状态符号。^表示备选时间源,*表示当前正在使用的时间源。
# Name/IP address: 时间源的主机名或IP地址。
# Stratum: 时间源的层级。
# Poll: 轮询时间间隔。
# Reach: Reachability, 表示与该时间源的最近轮询是否成功。
# LastRx: 上次收到时间更新的时间。
# Last sample: 最后一次采样的偏差量和它的时间差异。

MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- ntp5.flashdance.cx            2  10   175   33m    -26ms[  -26ms] +/-  130ms
^- stratum2-1.ntp.mow01.ru.>     2  10    72   46m    -16ms[  -16ms] +/-   63ms
^- 1.117.63.30                   3   9   377   160  -4752us[-4752us] +/-  158ms
^- ntp7.flashdance.cx            2  10   377   672    -32ms[  -32ms] +/-  154ms
^- 120.25.115.20                 2  10    20   85m   +168us[  +80us] +/-   20ms
^+ 203.107.6.88                  2  10   377   218   +242us[ +242us] +/-   16ms
^* dns1.synet.edu.cn             1  10   377   506   -469us[ -559us] +/- 7377us
^- ntp.wdc2.us.leaseweb.net      2  10   157   34m  +6404us[+6338us] +/-  252ms
^- 119.28.206.193                2  10   374   96m   -281us[ -462us] +/-   53ms
^- time.cloudflare.com           3  10   213   23m    +25ms[  +25ms] +/-  139ms

# 手动执行系统时钟的步进调整,使其立即与时间源同步
[root@10-255-101-147 ~]# chronyc makestep
200 OK

# 查看连接到本地NTP服务器的客户端
[root@10-255-101-147 ~]# chronyc clients

# 输出解释:
# Hostname: 客户端主机名或IP地址。
# NTP: 接收的NTP数据包数。
# Drop: 丢弃的NTP数据包数。
# Int: 时间间隔。
# IntL: 上次接收时间间隔。
# Last: 上次接收NTP数据包的时间。
# Cmd: 接收的命令包数。

Hostname                      NTP   Drop Int IntL Last     Cmd   Drop Int  Last
===============================================================================
10.255.98.6                   263      0   8   -   156       0      0   -     -
10.255.101.203                271      0   8   -   107       0      0   -     -

客户端

客户端同步时间也使用chrony守护进程进行同步

确认是否安装chrony

systemctl status chronyd

如果没有安装,那就执行以下命令进行安装

# 安装
yum -y install chrony
# 开机自启
systemctl enable chronyd
# 启动
systemctl start chronyd

编辑/etc/chrony.conf,添加时间服务器为服务端地址,其余配置不用动

[root@10-255-101-203 ~]# 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 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 10.255.101.147 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).
rtcsync

# 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

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

# Select which information is logged.
#log measurements statistics tracking
[root@10-255-101-203 ~]#

修改完进行重启

systemctl restart chronyd

常用chronyc命令如下

# 查看 NTP 服务器列表及其详细信息
chronyc sources -v

# 查看 NTP 服务器的统计信息和性能数据
chronyc sourcestats -v

# 检查 NTP 服务器的在线状态
chronyc activity -v

# 查看系统时钟的跟踪状态和性能参数
chronyc tracking -v

# 强制系统时钟立即同步(慎用,可能影响正在运行的服务)
chronyc -a makestep

# 查看访问 NTP 服务器的客户端列表
chronyc clients

# 等待 Chrony 同步完成
chronyc waitsync

# 添加新的 NTP 服务器
chronyc add server <ntp_server_ip_or_hostname> [options]

# 删除现有的 NTP 服务器
chronyc delete <ntp_server_ip_or_hostname>

# 刷新 NTP 服务器的 IP 地址(如果服务器使用动态 DNS)
chronyc refresh

# 允许或拒绝特定主机访问 NTP 服务
chronyc allow <subnet_or_host>
chronyc deny <subnet_or_host>

# 查看 RTC(实时时钟)的参数
chronyc rtcdata

# 校正 RTC 时钟到系统时钟
chronyc trimrtc

# 查看 NTP 服务器统计信息
chronyc serverstats

# 查看当前 Chrony 守护进程的版本
chronyc -v

场景

监控时候,如果没有外网,服务端可以直接指定到自己,例如服务端那可以配置

server 10.255.101.147 iburst

其他的局域网内都可以向这里进行同步,这种情况就不需要外网了

### NTP在ARM架构上的移植 对于NTP在网络设备中的应用,特别是在基于ARM架构的嵌入式系统里实现其功能,通常涉及几个核心方面。为了确保系统的时钟能够被精确同步到互联网标准时间服务器的时间,开发者需关注底层硬件支持、操作系统层面的服务配置以及应用程序接口的设计。 #### 底层驱动程序的支持 针对特定平台如PolarFire FPGA SoC开发板,在准备部署NTP服务之前,确认该平台上已经具备了稳定运行的操作环境是非常重要的[^1]。这不仅意味着要有一个适合目标处理器系列(例如RISC-V或ARM)的工作内核版本,还需要有配套完善的网卡驱动来处理数据包收发操作。此外,由于NTP依赖于高精度定时器来进行延迟测量与补偿计算,因此也需要检查是否存在相应的硬件资源并编写对应的驱动代码以供调用。 #### 时间戳管理机制 当涉及到跨不同体系结构间的兼容性问题时,理解所选用RTOS(实时操作系统)或者Linux发行版内部是如何管理和更新本地实时时钟(RTC)就显得尤为关键。某些情况下可能需要修改源码以便更好地适配具体应用场景下的需求;而在其他时候,则可以通过调整参数设置或是加载额外模块的方式达成目的。例如,在AppArmor的安全框架文档中提到过关于文件路径访问控制策略定制的内容虽然不直接关联于此话题,但同样体现了软件组件间相互作用的重要性[^2]。 #### 用户空间工具链构建 最后一步便是安装和配置必要的用户态进程用于发起请求并与远程主机交换信息。一般而言,GNU/Linux环境中自带`ntpd`守护进程可以满足大部分场合的要求;而对于那些追求极致性能优化或者是希望获得更灵活特性的项目来说,则可以选择编译最新发布的开源库比如Chrony作为替代方案之一。值得注意的是,如果计划利用专用API函数完成更加复杂的任务——像读取MAC地址寄存器内的值那样——那么事先查阅官方手册将是不可或缺的一环[^3]。 ```bash sudo apt-get install ntp ``` 上述命令展示了在一个典型的Debian系分发版上快速获取并激活默认NTP客户端的方法。当然实际工作中往往还需进一步微调各项选项直至达到预期效果为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XMYX-0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值