chrony时间同步
1853 字
9 分钟
chrony时间同步

chrony时间同步
[TOC]
==RHEL 使用 chrony 作为默认 NTP 客户端/服务器(替代了旧版的 ntpd)==
[root@R11 ~]# rpm -qa chronychrony-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] +/- 65msImportant
chronyd
-
启动服务名
systemctl restart chronyd -
可以 ==触发时间同步==
chronyc
-
具体命令
chronyc sources
🔍 chronyc sources -v输出解析
-
这个命令用于查看 NTP(或 Chrony)客户端当前连接的时间源状态
-
它会列出所有已知的时间源及其同步状态、延迟、误差等信息
✅ 字段说明表
| 字段 | 说明 | 示例值 | 备注 |
|---|---|---|---|
| MS | 同步源模式和状态 • 第一个字符:模式 • 第二个字符:状态 | ^* | 模式:^=服务器,==对等体,#=本地时钟 状态:*=最佳源,+=可选,-=排除,x=错误,~=波动大,?=不可用 |
| Name/IP address | 时间源的名称或 IP 地址 | 10.200.0.2 | 实际的 NTP 服务器地址 |
| Stratum | 层级(层数越小越接近权威时间源) | 1 | 1 是最高等级,最大为 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
练习①
'服务端配置'[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.confserver 10.0.0.111 iburst# 只需要配置一行[root@R39 ~]# systemctl restart chronyd# 测试验证'服务端'pool cn.pool.ntp.org iburst
'客户端'server 10.0.0.111 iburst

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

- ==模拟上层NTP服务中断==
[root@R11 ~]# nmcli device down ens160 ; nmcli device down ens224# 把网卡down掉,就访问不了外网了# 相当于屏蔽掉了上层NTP服务来源'服务端再次查看'应看到:#* 127.0.0.1 10 ...(# 表示本地时钟,* 表示当前使用)'客户端'^* 10.0.0.111 11 ...✅ 证明:即使 服务端 失去外网,仍能为 客户端 提供时间服务!练习②
题目要求:
两台主机各自从不同的公网 NTP 服务器获取时间
并且彼此建立对等(peer)关系以增强时间同步的可靠性和容错能力
'A服务器'[root@R11 ~]# egrep -v '^$|^#' /etc/chrony.confpool cn.pool.ntp.org iburst✅peer 10.0.0.139 iburst# 只多了一行配置allow 10.0.0.0/24local 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 iburstlocal stratum 10[root@R39 ~]# systemctl restart chronyd
测试验证:[root@R11 ~]# chronyc sourcesMS 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 sourcesMS 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相互同步!'文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



