Linux 时间同步服务:Chrony 深度笔记

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)

  • 查看服务状态

    bash 复制代码
    systemctl status chronyd
    # 确保状态为 active (running) 且 enabled (开机自启)

2.4 核心进程解析

  1. chronyd:后台守护进程,负责处理时间同步逻辑。
  2. 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

  1. 防火墙问题
    • 如果 Client 无法同步 Server,请检查 Server 端防火墙是否放行了 UDP 123 端口。
    • 命令:firewall-cmd --add-service=ntp --permanent && firewall-cmd --reload
  2. 网络连通性
    • 确保 Client 能 ping 通 Server。
  3. 配置生效
    • 修改配置文件后,必须执行 systemctl restart chronyd
  4. 状态码含义
    • 如果 chronyc sources 显示 ?,通常意味着网络不通或配置未生效。
    • 如果显示 x,表示该时间源被认为是"微秒级错误"或不可靠。
相关推荐
赴前尘2 小时前
S3 命令行工具 Docker 容器运行
运维·docker·容器
Ww.xh2 小时前
OpenHarmony API 9 升级到 API 10 权限与接口变更实战指南
服务器·华为·harmonyos
Strugglingler2 小时前
Linux Device Drivers-第六章 高级字符驱动操作
linux·笔记
zjeweler2 小时前
云服务器centos7.6搭建个人网站教程
运维·服务器
liyunlong-java2 小时前
单服务器 MySQL 主从同步部署教程(宝塔 + MySQL 8.0)
服务器·mysql·adb
PGCCC2 小时前
PostgreSQL DBA 进阶:从日常运维到生产级性能与高可用实战
运维·postgresql·dba
观测云2 小时前
观测云 x AI Agent:运维智能化的范式跃迁实践
大数据·运维·人工智能
NINGMENGb2 小时前
被误读的“传播力”——Infoseek如何量化媒体投放的“质量”而非“数量”
运维·人工智能·媒体·ai监测·舆情监测·舆情监测系统
青瓦梦滋2 小时前
Linux线程的同步与互斥
linux·c++