Linux 时间同步服务:Chrony 深度笔记
NTP 时间服务器与 Chrony 的关系
1. 什么是 NTP 时间服务器
NTP(Network Time Protocol,网络时间协议)是用于在网络中(通常是互联网或局域网)同步计算机时钟的一种标准协议。
- 核心作用:确保网络中所有设备的系统时间保持一致,避免因时间偏差导致的安全认证失败(如 Kerberos)、日志分析困难、数据库事务错乱等问题。
- 层级结构(Stratum) :NTP 采用分层架构来保证时间的准确性和稳定性。
- Stratum 0:高精度时间源,如原子钟、GPS 接收器。它们不直接连接网络。
- Stratum 1:直接连接到 Stratum 0 设备的计算机(时间服务器),作为网络中的主时间源。
- Stratum 2:从 Stratum 1 服务器同步时间的计算机,以此类推。
- Stratum 16:表示未同步或同步失败。
2. NTP 与 Chrony 的关系
简单来说,NTP 是"协议",而 Chrony 是实现该协议的"软件"。
- NTP(协议):是一套规则和标准,定义了时间如何传输和同步。
- Chrony(软件):是 NTP 协议的一种现代化实现(守护进程)。它完全兼容 NTP 协议,可以与传统 NTP 服务器或客户端通信。
3. 为什么现代 Linux 倾向于使用 Chrony 而非传统的 ntpd?
虽然传统的 ntpd 是 NTP 协议的经典实现,但 Chrony 在以下方面表现更优,因此成为 RHEL/CentOS 7+、Ubuntu 18.04+ 等现代系统的默认选择:
| 特性 | 传统 NTP (ntpd) |
Chrony (chronyd) |
优势说明 |
|---|---|---|---|
| 同步速度 | 较慢,需长时间稳定连接 | 极快,适合间歇性联网 | Chrony 能在几秒内完成同步,ntpd 可能需要几分钟。 |
| 时钟漂移 | 依赖持续连接 | 支持离线估算 | Chrony 能记录时钟漂移率,断网后仍能保持较准时间。 |
| 资源占用 | 相对较高 | 轻量级 | Chrony 占用更少的 CPU 和内存,适合嵌入式或虚拟机。 |
| 大偏差处理 | 拒绝同步或缓慢调整 | 快速校正 | 即使时间偏差很大,Chrony 也能通过 makestep 快速修正。 |
| 虚拟化支持 | 一般 | 优秀 | Chrony 对虚拟机时钟频率变化有更好的适应性。 |
总结 :Chrony 是 NTP 协议的"升级版"实现,它解决了传统 ntpd 在不稳定网络、虚拟化环境和快速启动场景下的痛点,是目前企业级 Linux 时间同步的首选方案。
1. Chronyd 简介
1.1 什么是 Chronyd?
chronyd 是一个开源的自由软件,用于保持系统时钟与 NTP 服务器同步。它是 chrony 软件包的核心组件。
1.2 主要作用
- 时间同步:自动与 NTP 服务器同步系统时间,保持高精度。
- 快速收敛:即使系统时钟偏差较大,也能快速、平滑地校正(避免时间跳变)。
- 低资源占用:适合嵌入式设备、虚拟机和间歇性联网的主机。
- 支持离线校正:断网后仍能根据历史数据估算时间漂移。
1.3 核心特点对比
| 特性 | 说明 |
|---|---|
| 启动快 | 系统启动后几秒内即可同步时间 |
| 适应性强 | 对网络延迟抖动容忍度高,适合不稳定的网络 |
| 硬件时钟 | 可校准系统时钟漂移(通过 chronyc tracking 查看) |
| 安全性 | 支持 NTP 认证、访问控制 |
1.4 常用组件
- chronyd:后台守护进程(服务端/客户端)。
- chronyc:命令行工具,用于查看状态、手动同步等。
1.5 适用场景
- 虚拟机或云服务器(时钟易漂移)。
- 笔记本电脑或间歇联网设备。
- 对时间精度要求较高的服务器(如日志、数据库、Kubernetes 集群)。
2. 环境准备与基础检查
2.1 实验环境规划
为了演示服务端与客户端的配置,我们规划两台主机:
| 主机名 | 角色 | IP 地址 | 说明 |
|---|---|---|---|
| server | 时间服务器 | 192.168.194.11 |
同步阿里云时间,供内网使用 |
| client | 客户端 | 192.168.194.12 |
同步 server 的时间 |
2.2 基础配置 (Hostname & IP)
Server 端配置:
bash
# 修改主机名
hostnamectl set-hostname server
# 修改 IP (示例网卡为 ens160)
nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.194.11/24 ipv4.gateway 192.168.194.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli c up ens160
Client 端配置:
bash
# 修改主机名
hostnamectl set-hostname client
# 修改 IP
nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.194.12/24 ipv4.gateway 192.168.194.2 ipv4.dns "223.5.5.5 8.8.8.8" connection.autoconnect yes
nmcli c up ens160
2.3 软件检查与服务状态
大多数现代 Linux 发行版默认已安装。
-
查看安装文件 :
rpm -ql chrony -
查看配置文件 :
rpm -qc chrony(主要关注/etc/chrony.conf) -
查看服务状态 :
bashsystemctl status chronyd # 确保状态为 active (running) 且 enabled (开机自启)
2.4 核心进程解析
- chronyd:后台守护进程,负责处理时间同步逻辑。
- chronyc :交互式命令行工具,用于监控和配置
chronyd。- 进入交互模式:输入
chronyc - 查看帮助:在提示符下输入
help
- 进入交互模式:输入
3. 配置时间同步服务端 (Server)
目标:让 Server 同步阿里云时间,并允许 Client 同步自己。
3.1 修改配置文件
编辑 /etc/chrony.conf:
bash
vim /etc/chrony.conf
关键配置项说明:
| 配置指令 | 说明 |
|---|---|
server ntp.aliyun.com iburst |
指定上游时间源,iburst 表示启动时快速发送多个包以加快同步。 |
driftfile /var/lib/chrony/drift |
记录时钟漂移速率的文件。 |
makestep 1.0 3 |
如果前3次更新偏差超过1秒,则直接跳跃调整时间(而非缓慢调整)。 |
rtcsync |
开启内核模式,每11分钟将系统时间同步给硬件时钟(RTC)。 |
allow 192.168.194.0/24 |
重要:允许该网段的客户端进行同步。 |
local stratum 10 |
(可选) 当上游不可用时,将自己作为时间源,层级设为10。 |
3.2 重启并验证
bash
# 重启服务
systemctl restart chronyd
# 查看时间源状态
chronyc sources -v
输出解读 (sources -v):
^*:表示当前正在同步的最佳源。^+:表示合格的源,会被合并计算。^?:表示不可达或未同步。
4. 配置时间同步客户端 (Client)
目标:让 Client 指向内网的 Server 进行同步。
4.1 修改配置文件
编辑 /etc/chrony.conf,注释掉 默认的 pool,添加 内网 Server IP。
bash
vim /etc/chrony.conf
# 修改内容如下:
#pool 2.rhel.pool.ntp.org iburst <-- 注释掉默认源
server 192.168.194.11 iburst <-- 添加内网 Server IP
4.2 重启并验证
bash
# 重启服务
systemctl restart chronyd
# 查看同步状态
chronyc sources -v
预期结果:
你应该能看到 192.168.194.11 前面有 ^* 或 ^+ 标记,表示同步成功。
5. 常用管理命令速查
5.1 查看跟踪信息
显示系统时间当前的同步详细信息。
bash
chronyc tracking
- Reference ID:当前参考的时间源 IP。
- Stratum:层级(数值越小越接近原子钟,通常 2-4 为正常)。
- System time:系统时间偏差量。
5.2 查看源统计信息
显示对每个时间源收集的测量统计信息。
bash
chronyc sourcestats -v
- NP:样本数量。
- Frequency:时钟频率误差。
- Offset:估计的偏移量。
5.3 强制立即同步
如果时间偏差过大,可以使用以下命令强制立即校准:
bash
chronyc makestep
6. 故障排查 Tips
- 防火墙问题 :
- 如果 Client 无法同步 Server,请检查 Server 端防火墙是否放行了 UDP 123 端口。
- 命令:
firewall-cmd --add-service=ntp --permanent && firewall-cmd --reload
- 网络连通性 :
- 确保 Client 能
ping通 Server。
- 确保 Client 能
- 配置生效 :
- 修改配置文件后,必须执行
systemctl restart chronyd。
- 修改配置文件后,必须执行
- 状态码含义 :
- 如果
chronyc sources显示?,通常意味着网络不通或配置未生效。 - 如果显示
x,表示该时间源被认为是"微秒级错误"或不可靠。
- 如果