chrony时间同步

1853 字
9 分钟
chrony时间同步

chrony时间同步#

[TOC]


==RHEL 使用 chrony 作为默认 NTP 客户端/服务器(替代了旧版的 ntpd)==

Terminal window
[root@R11 ~]# rpm -qa chrony
chrony-4.6.1-2.el10.x86_64
# 先查看自己服务器是否安装
[root@R11 ~]# rpm -qc chrony
/etc/chrony.conf
/etc/chrony.keys
/etc/logrotate.d/chrony
/etc/sysconfig/chronyd
# 第一个是主要的配置文件
[root@R39 ~]# systemctl enable --now chronyd
'修改完对应的配置文件后,开启自启&立刻启动'
[root@R39 ~]# ss -lntup | grep chrony
# 看一下监听的端口
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=1217,fd=5))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=1217,fd=6))
[root@R39 ~]# chronyc sources
'这个是粗略的看一下,你也可以跟-v选项!'
MS Name/IP address Stratum Poll Reach LastRx Last sample
==================================================================
^- 106.54.244.49 3 7 377 124 +2321us[+2321us] +/- 46ms
^- 139.199.215.251 2 6 377 59 -4650us[-4650us] +/- 48ms
^* time.nju.edu.cn 1 7 377 123 +6558ns[+7304ns] +/- 17ms
^- 111.230.189.174 2 7 377 30 +726us[ +726us] +/- 65ms
Important

chronyd

  • 启动服务名

    systemctl restart chronyd

  • 可以 ==触发时间同步==

chronyc

  • 具体命令

    chronyc sources

🔍 chronyc sources -v输出解析#

  • 这个命令用于查看 NTP(或 Chrony)客户端当前连接的时间源状态

  • 它会列出所有已知的时间源及其同步状态、延迟、误差等信息


✅ 字段说明表#

字段说明示例值备注
MS同步源模式和状态 • 第一个字符:模式 • 第二个字符:状态^*模式:^=服务器,==对等体,#=本地时钟 状态:*=最佳源,+=可选,-=排除,x=错误,~=波动大,?=不可用
Name/IP address时间源的名称或 IP 地址10.200.0.2实际的 NTP 服务器地址
Stratum层级(层数越小越接近权威时间源)11 是最高等级,最大为 15
Poll轮询间隔的 log₂7表示轮询周期是 2⁷ = 128 秒
Reach可达性寄存器(八进制)377表示最近 8 次轮询都成功(理想值为 377,即全1)

🧩 关键点详解#

MS 字段详解

符号含义
^该源是 服务器(server),即我们主动向其请求时间
=对等体(peer),双向同步
#本地时钟(本机自己作为时间源)
*当前 最佳同步源(被选中用来同步系统时间)
+可用但未选中的时间源
-已被排除的时间源(可能不稳定)
x可能出错的时间源
~波动太大,不可靠
?连接失败或未通过测试

例如:^* 表示这是一个服务器,并且是当前最佳同步源


Poll 字段

  • Poll = 7 → 轮询间隔 = 27=12827=128 秒
  • 即每 128 秒 向该时间源发送一次请求
  • 值越大,轮询越慢(节省带宽),但响应延迟更高

Reach 字段

  • 八进制数,共 8 位,每一位代表过去 8 次轮询是否成功
  • 377(八进制)= 11111111(二进制)→ 所有轮询都成功了
  • 如果是 0 或小于 377,表示有丢包或连接问题

Stratum(层级)#

Stratum(层) 是 NTP 协议中用来表示时间源 距离原始准确时间源的层级

  • 层级越小,时间越准确
Stratum含义
0原始时间源(如 GPS 卫星、原子钟),==不参与网络同步==
1直接连接到 Stratum 0 的设备(如授时仪、GPS 接收器)
2从 Stratum 1 获取时间的服务器(NTP Server)
3从 Stratum 2 获取时间的客户端或服务器
逐级递增,最大为 15
Note

⚠️ 注意: Stratum 0 不直接参与 NTP 网络通信 ,它只是提供时间信号

简单实验#

背景#

  • 服务器 A(10.0.0.111)

    • 角色:上游 NTP 客户端 + 下游 NTP 服务器
    • 同步源:公共 NTP 服务器(如 cn.pool.ntp.org
    • 需要为 B 提供时间服务
  • 服务器 B(10.0.0.139)

    • 角色:纯客户端

    • 同步源:只从 A 同步

Important

是否需要 peer?是否用 server 还是 pool

🔧是否需要互相 peer#

不需要

✅正确做法:

  • A 是服务器,B 是客户端 → 使用 server 指令
  • peer 是用于对等体同步(比如两个数据中心互为备份),双方都既当客户端又当服务器
  • 你这里明显是 主从架构(A → B),所以 B 只需写 server 10.0.0.111 iburst

📌 结论:B 直接写 server 10.0.0.111 iburst 即可,不要 peer

🔧 用 server 还是 pool#

指令用途适用场景
server IP指定单个固定 IP 服务器用于指定某个确定的ntp服务器
pool 域名解析域名得到多个 IP(地址池)公共 NTP 服务(如 cn.pool.ntp.org

所以:

  • A 同步公共NTP服务 → 可用 pool cn.pool.ntp.org iburst

    可以解析出多个ntp服务器

  • B 同步 A → 用 server 10.0.0.111 iburst

local stratum 10是什么?需要开启吗?#

  • 启用 本地时钟 作为后备时间源
  • 当所有外部时间源都不可用时,本机仍可作为 Stratum 10 的时间服务器提供服务
  • 防止“时间断崖”(即完全失去时间同步能力)

当外网连接极不稳定时,开启此项可确保即使短暂断网,内网的服务器群依然能维持相对一致的时间

场景建议
A(主服务器)建议开启(高可用)
B(普通客户端)不建议开启(除非它也要给其他机器授时)

🎯 你的需求: 即使没有同步源,A 也继续提供授时服务必须开启 local stratum 10

练习①#

Terminal window
'服务端配置'
[root@R11 ~]# egrep -v '^$|^#' /etc/chrony.conf
=======================
pool cn.pool.ntp.org iburst
# pool:地址池
# server:单一ntp服务器
# cn.pool.ntp.org:上游服务器可解析为多个IP
# iburst:加速时间同步
'server ntp1.aliyun.com iburst'
# 单个稳定的阿里云ntp服务器
makestep 1.0 3
# 避免长时间偏差
rtcsync
# 定期将系统时间同步到硬件
allow 10.0.0.0/24
# 允许那些网段的NTP客户端访问
# 客户端无需配置
local stratum 10
# 启用本地时钟,作为后备时间源
logdir /var/log/chrony
# 指定日志目录
=======================
[root@R11 ~]# systemctl restart chronyd
# 重启服务
'客户端配置'
[root@R39 ~]# egrep -v '^$|^#' /etc/chrony.conf
server 10.0.0.111 iburst
# 只需要配置一行
[root@R39 ~]# systemctl restart chronyd
Terminal window
# 测试验证
'服务端'
pool cn.pool.ntp.org iburst

image-20260313191517607
image-20260313191517607

Terminal window
'客户端'
server 10.0.0.111 iburst

image-20260313191648059
image-20260313191648059

image-20260314101108060
image-20260314101108060

  • ==A服务端验证已连接的客户端==

image-20260314100952977
image-20260314100952977

  • ==模拟上层NTP服务中断==
Terminal window
[root@R11 ~]# nmcli device down ens160 ; nmcli device down ens224
# 把网卡down掉,就访问不了外网了
# 相当于屏蔽掉了上层NTP服务来源
'服务端再次查看'
应看到:
#* 127.0.0.1 10 ...
(# 表示本地时钟,* 表示当前使用)
'客户端'
^* 10.0.0.111 11 ...
证明:即使 服务端 失去外网,仍能为 客户端 提供时间服务!

练习②#

题目要求:

  • 两台主机各自从不同的公网 NTP 服务器获取时间

  • 并且彼此建立对等(peer)关系以增强时间同步的可靠性和容错能力

Terminal window
'A服务器'
[root@R11 ~]# egrep -v '^$|^#' /etc/chrony.conf
pool cn.pool.ntp.org iburst
✅peer 10.0.0.139 iburst
# 只多了一行配置
allow 10.0.0.0/24
local stratum 10
[root@R11 ~]# systemctl restart chronyd
'B服务器'
[root@R39 ~]# egrep -v '^$|^#' /etc/chrony.conf
✅server ntp1.aliyun.com iburst
✅peer 10.0.0.111 iburst
local stratum 10
[root@R39 ~]# systemctl restart chronyd
测试验证:
[root@R11 ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
=================================================================
^* 119.28.183.184 2 6 17 7 +837us[ +13ms] +/- 45ms
^+ ntp7....e.cx 2 6 17 12 -26ms[ -13ms] +/- 139ms
^+ time....e.com 3 6 17 17 +17ms[ +29ms] +/- 92ms
^? ti....iak.ch 1 7 11 14 +4279us[+4279us] +/- 110ms
=- 10.0.0.139 0 6 0 - +0ns[ +0ns] +/- 0ns
'最后一行A、B相互同步!'
-------------------------------------
`=` (Peer) 表示该源是一个对等节点(Peer)
而不是传统的客户端/服务器关系
-------------------------------------
[root@R39 ~]# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
==================================================================
^* 118.31.3.89 2 6 143 25 -17us[ -83us] +/- 32ms
=- 10.0.0.111 4 6 1 38 +4756us[+3513us] +/- 91ms
'最后一行A、B相互同步!'

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

chrony时间同步
https://www.kpyun.fun/posts/basics/extension/extension06/
作者
久棹
发布于
2025-09-20
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录