Linux中的时间同步
一、时间同步服务扩展总结
1. 时间同步的重要性
-
多主机协作需求:在分布式系统、集群、微服务架构中,时间一致性是日志排序、事务顺序、数据一致性的基础。
-
安全协议依赖:TLS/SSL证书、Kerberos认证等依赖时间有效性,时间偏差可能导致身份验证失败或中间人攻击漏洞。
-
故障排查:日志时间戳若不同步,跨节点问题定位将极其困难。
-
高精度场景:金融交易(毫秒级误差可能引发损失)、科学实验、5G网络同步(微秒级要求)等场景对时间精度要求极高。
2. NTP 协议核心机制
-
层级结构(Stratum):
-
Stratum 0:高精度物理设备(如原子钟、GPS卫星时钟),直接提供时间源。
-
Stratum 1:与Stratum 0设备直连的NTP服务器,作为主时间服务器。
-
Stratum 2:从Stratum 1同步的服务器,依次类推(最多15层)。
-
-
时钟漂移修正:通过算法(如Marzullo算法)计算网络延迟和时钟偏差,逐步调整系统时间,避免时间跳变。
-
闰秒处理:NTP协议支持在协调世界时(UTC)插入闰秒时平滑调整系统时间。
3. chrony 核心原理
-
设计目标
-
动态网络适应:自动调整轮询间隔(
minpoll/maxpoll),适应网络延迟和波动。 -
快速收敛:在初始同步或网络恢复时,通过
iburst参数快速完成时间校准。 -
最小化时钟偏差:利用硬件时间戳(
hwtimestamp)和实时时钟(RTC)补偿,减少累积误差。 -
离线模式支持:无网络时依赖本地时钟维持时间稳定性。
-
-
核心组件
-
chronyd 守护进程:后台服务,负责与时间源通信并调整系统时钟。
-
chronyc 命令行工具:用于监控和动态修改配置。
-
配置文件
/etc/chrony.conf:定义时间源、策略、日志等参数。
-
4. NTP 服务(ntpd)
-
特点:
-
长连接模式:持续与时间服务器通信,适合长期稳定运行的环境。
-
资源占用低:适合嵌入式设备或低配置服务器。
-
成熟稳定:经过多年验证,兼容性广泛(旧系统、网络设备)。
-
-
局限性:
-
网络波动敏感:间歇性网络中断时同步效率下降。
-
启动速度慢:初次同步可能需要较长时间。
-
温度敏感性:物理服务器时钟易受环境温度影响,需频繁修正。
-
5. Chrony 服务
-
核心优势:
-
动态适应网络:在断线、高延迟网络中快速收敛,适合移动设备、虚拟机、云环境。
-
更小时间偏差:通过更精细的时钟频率调整算法(如RTC补偿),减少长期运行后的累积误差。
-
安全性增强:支持NTP的Autokey协议,防止中间人攻击。
-
-
关键特性:
-
硬件时间戳:利用网卡硬件记录数据包收发时间,消除操作系统调度延迟,显著提升精度(可达亚微秒级)。
-
隔离模式:无网络时,依赖本地时钟维持时间一致性,避免服务中断。
-
轻量级设计:服务进程资源占用更低,适合容器化环境。
-
二、时间同步服务器的使用
1.使用 timedatectl 命令进行系统时间与时区管理
timedatectl 基础命令与功能
| 命令 | 功能说明 |
|---|---|
timedatectl | 查看当前时间、时区、NTP 同步状态等完整信息。 |
timedatectl set-time "YYYY-MM-DD HH:MM:SS" | 手动设置系统时间(需 root 权限)。 |
timedatectl list-timezones | 列出系统支持的所有时区名称(按 PageUp/PageDown 翻页)。 |
timedatectl set-timezone "时区名" | 设置系统时区(如 Asia/Shanghai)。 |
timedatectl set-local-rtc 0 | 将硬件时钟(RTC)视为 UTC 时间(推荐)。 |
timedatectl set-local-rtc 1 | 将硬件时钟(RTC)视为 本地时间(Windows 双系统场景可能需要)。 |
timedatectl set-ntp yes/no(true/false) | 启用/禁用 NTP 网络时间同步(启用后自动同步时间,覆盖手动设置)。 |



2.从公共 NTP 服务器中同步时间到本地机器
常用公共 NTP 服务器分类汇总表
| 服务商/项目 | NTP 服务器地址 | .地区/用途 | 备注 |
|---|---|---|---|
| NTP Pool Project | [0-3].asia.pool.ntp.org | 亚洲地区(动态分配最近节点) | 全球分布式集群,自动选择最优节点。支持多区域(如 europe.pool.ntp.org)。 |
pool.ntp.org | 全球(默认分配最近节点) | 主入口,推荐普通用户使用。 | |
| 阿里云 | ntp.aliyun.com | 中国大陆 | 阿里云公共 NTP,低延迟,国内推荐。 |
ntp1-7.aliyun.com | 中国大陆(多节点负载均衡) | 冗余设计,提升可靠性(如 ntp1.aliyun.com 至 ntp7.aliyun.com)。 | |
time.pool.aliyun.com | Windows 系统专用 | Windows 时间服务默认支持。 | |
| 国家授时中心 | ntp.ntsc.ac.cn | 中国大陆 | 中国科学院国家授时中心官方服务器,高精度、高可靠性。 |
| 腾讯云 | ntp.tencent.com | 中国大陆 | 腾讯云公共 NTP,适用于国内云服务器。 |
time.google.com | 全球 | 谷歌公共 NTP,支持 IPv4/IPv6,需网络可访问谷歌。 | |
| Microsoft | time.windows.com | 全球 | Windows 默认时间服务器,兼容性强。 |
| Apple | time.apple.com | 全球 | macOS 和 iOS 设备默认时间服务器。 |
| Amazon | [0-3].amazon.pool.ntp.org | 全球(AWS 区域优化) | 亚马逊云 NTP 服务,适合 AWS 用户。 |
| Cloudflare | time.cloudflare.com | 全球 | Cloudflare 提供的公共 NTP,低延迟。 |
| CNNIC | cn.ntp.org.cn | 中国大陆 | 中国互联网络信息中心(CNNIC)维护的 NTP 服务器。 |

下图我们将NTP服务器的地址源改写成国家授时中心的NTP服务器地址。
然后使用 systemctl restart chronyd.service 重启chrony服务,使新的配置生效。


在RHEL9中,chrony 是 RHEL 9 中默认的 NTP 客户端,chronyc 是 chrony 的控制工具,可用于查看详细的时间同步信息。
-
查看 NTP 源状态:chronyc sources -v
-
查看时间同步统计信息:chronyc tracking

chronyc sources -v 输出字段详解
| 字段 | 说明 | 示例/可能值 |
|---|---|---|
| MS | 状态标记:表示源的状态,符号组合如下: - ^*:当前同步的源。- ^+:候选源(备选)。- ^-:可接受的源。- ^?:未同步或不可信源。- ^x:被排除的源(误差过大)。 | ^*, ^+, ^-, ^?, ^x |
| Stratum | 层级:时间源的层级,范围 1-15,1 表示最高精度(如原子钟),层级逐级递增。 | 1, 2, 3 |
| Poll | 轮询间隔:与源同步的时间间隔(秒),以 2 的幂表示(如 6 表示 2⁶=64 秒)。 | 6(64秒), 10(1024秒) |
| Reach | 可达性:最近 8 次轮询的成功率,8 进制表示(377 表示 8 次全部成功)。 | 377(全成功), 25(部分成功) |
| LastRx | 最后接收时间:距离最后一次接收到源响应的时间(格式:秒/分钟/小时/天)。 | 45s, 3h, 7d |
| Last sample | 最后样本偏差:最后一次时间同步的偏差,包含: - 时间偏移( ±数值):本地与源的时间差。- 延迟( delay):网络延迟。- 离散度( disp):误差范围。 | +0.123ms ± 0.456ms, delay 12.3ms |
| Source | 时间源地址:NTP 服务器的 IP 或域名。 | ntp.aliyun.com, 192.168.1.1 |
| State | 源状态:详细状态描述,如同步状态、网络状态等。 | SYNC, INIT, WAIT |
| Flags | 标志位:表示源的特性,如: - N:NTP 协议源。- P:PPS 信号源。- S:选择状态。- A:认证通过。 | N, NP, S, A |
| Condition | 状态条件:源的健康状态,如: - OK:正常。- FALSETICK:检测到异常。- JITTER:抖动过大。 | OK, FALSETICK, JITTER |
3.时间同步服务器的搭建
时间同步测试服务器IP地址:192.168.52.200/24
时间同步测试主机IP地址:192.168.52.20/24
以下配置都在Chrony 的配置文件 /etc/chrony.conf 中进行。


netstat -antlupe各列参数含义
| 列 | 说明 |
|---|---|
| Proto | 协议类型(udp、udp6 分别表示 IPv4 UDP 和 IPv6 UDP)。 |
| Recv-Q | 接收队列大小(当前待处理的数据包数量,0 表示无积压)。 |
| Send-Q | 发送队列大小(当前待发送的数据包数量,0 表示无积压)。 |
| Local Address:Port | 本地监听的地址和端口: - 0.0.0.0:123:监听所有 IPv4 接口的 NTP 服务端口(123)。- 127.0.0.1:323:IPv4 本地回环地址的 chronyd 控制端口(323)。- ::1:323:IPv6 本地回环地址的 chronyd 控制端口(323)。 |
| Foreign Address:Port | 远端连接的地址和端口: - 0.0.0.0:* 或 :::*:表示未建立连接(监听状态)。 |
| State | 连接状态(UDP 无状态,因此显示 *)。 |
| UID | 进程所有者的用户 ID(0 表示 root 用户)。 |
| PID/Program | 进程 ID 和程序名称: - 98619/chronyd:chronyd 守护进程的 PID。 |
| 其他扩展信息 | netstat -e 显示的额外信息(如网络统计,此处未显式展示)。 |



然后就发现测试主机可以同步到服务器端的时间了。
