目录
[一、Chrony 基础理论知识](#一、Chrony 基础理论知识)
[1.1 工作协议与通信端口](#1.1 工作协议与通信端口)
[1.2 角色划分](#1.2 角色划分)
[1.3 Chrony 核心优势](#1.3 Chrony 核心优势)
[1.4 系统预装规则](#1.4 系统预装规则)
[二、Chrony 软件安装与服务基础管理](#二、Chrony 软件安装与服务基础管理)
[2.1 软件安装](#2.1 软件安装)
[2.1.1 安装命令](#2.1.1 安装命令)
[2.1.2 安装验证](#2.1.2 安装验证)
[2.2 服务启停与开机自启Chrony 的后台进程名称为 chronyd,系统服务单元名称为 chronyd.service,所有服务操作命令遵循 Systemd 标准语法,全系统统一。](#2.2 服务启停与开机自启Chrony 的后台进程名称为 chronyd,系统服务单元名称为 chronyd.service,所有服务操作命令遵循 Systemd 标准语法,全系统统一。)
[3.1 通用基础配置(服务端、客户端共用)](#3.1 通用基础配置(服务端、客户端共用))
[3.2 服务端专属配置](#3.2 服务端专属配置)
[3.3 客户端专属配置](#3.3 客户端专属配置)
[四、防火墙与 SELinux 安全策略适配](#四、防火墙与 SELinux 安全策略适配)
[4.1 学习测试环境方案](#4.1 学习测试环境方案)
[4.2 企业生产环境方案](#4.2 企业生产环境方案)
[5.1 时区配置](#5.1 时区配置)
[5.2 时间状态全量查看](#5.2 时间状态全量查看)
[6.1 状态标识含义](#6.1 状态标识含义)
[6.2 Reach 字段解读](#6.2 Reach 字段解读)
[七、Chrony 缓存机制](#七、Chrony 缓存机制)
[8.1 部署规划](#8.1 部署规划)
[8.2 服务端部署步骤](#8.2 服务端部署步骤)
[8.3 客户端部署步骤](#8.3 客户端部署步骤)
[9.1 通信类故障](#9.1 通信类故障)
[9.2 服务运行类故障](#9.2 服务运行类故障)
[9.3 时间策略类故障](#9.3 时间策略类故障)
[9.4 缓存干扰故障](#9.4 缓存干扰故障)
[十、实战例题:Chrony 内网时间同步服务完整部署与排错](#十、实战例题:Chrony 内网时间同步服务完整部署与排错)
[10.1 实验环境说明](#10.1 实验环境说明)
[10.2 软件安装(两台主机均执行)](#10.2 软件安装(两台主机均执行))
[10.3 服务端配置与验证](#10.3 服务端配置与验证)
[10.3.1 编辑配置文件](#10.3.1 编辑配置文件)
[10.3.2 服务启停与自启](#10.3.2 服务启停与自启)
[10.3.3 实验环境安全策略处理(配置过可忽略)](#10.3.3 实验环境安全策略处理(配置过可忽略))
[10.3.4 服务端同步状态验证](#10.3.4 服务端同步状态验证)
[10.4 客户端配置](#10.4 客户端配置)
[10.4.1 编辑配配置](#10.4.1 编辑配配置)
[10.4.2 重启服务并查看状态](#10.4.2 重启服务并查看状态)
[10.5 故障现象与解决方法](#10.5 故障现象与解决方法)
[10.5.1 故障 1:客户端显示 ^?,Reach=0](#10.5.1 故障 1:客户端显示 ^?,Reach=0)
[10.5.2 故障 2:Reach>0 但仍显示 ^?](#10.5.2 故障 2:Reach>0 但仍显示 ^?)
开篇概述
本文作为完整学习手册,将系统性讲解 Chrony 的理论知识、软件安装、服务管理、配置文件全参数解析、不同场景部署方案、时区与时间管理、状态查询、缓存机制以及各类故障排查思路,内容兼顾理论与实战,适合 Linux 初学者夯实基础,也可作为运维人员日常查阅的参考文档。
一、Chrony 基础理论知识
1.1 工作协议与通信端口
Chrony 基于 NTP(网络时间协议) 实现时间校准与同步,这是互联网通用的时间同步标准协议。在数据传输过程中,Chrony 默认使用 UDP 123 端口进行通信。 UDP 协议面向无连接的特性,能够满足时间同步低延迟、高频交互的需求,这也是 NTP 协议长期选用 UDP 123 端口的核心原因。在后续部署与排错中,该端口是重点关注对象,防火墙、安全策略对 123 端口的拦截,是造成同步失败的高频原因。
1.2 角色划分
Chrony 在实际应用中分为两种核心角色,两种角色搭配使用,构成完整的时间同步架构:
- 服务端:主动连接互联网上的公共 NTP 时间源,完成自身系统时间校准,同时对外提供时间同步服务,为局域网内其他设备分发标准时间。
- 客户端:不直接对接公网时间源,以内网 Chrony 服务端作为唯一时间参考,拉取标准时间并校准本机时钟。
企业主流架构为 "分层同步架构",一台中心 Chrony 服务端对接公网,全网内网设备统一同步这台服务端,既保证时间统一,又减少内网设备对公网的访问,提升内网安全性。
1.3 Chrony 核心优势
相较于传统 ntpd 服务,Chrony 的优势覆盖精度、适配性、稳定性等多个维度,这也是各大 Linux 发行版全面切换至 Chrony 的关键:
- 同步精度更高:Chrony 可实现微秒级时间校准,ntpd 仅能做到毫秒级,在高精度业务场景中优势明显。
- 复杂环境适配性强:针对网络波动、服务器长期挂机、虚拟机休眠唤醒、云服务器动态网络等场景,Chrony 可以持续计算时钟偏差,维持时间稳定。
- 资源占用极小:后台进程常驻运行,CPU、内存消耗极低,不会对服务器上的业务程序造成性能挤压。
- 断网代偿能力:服务端在断开公网的情况下,可将本机已校准的时间作为标准,继续为内网客户端提供同步服务,保障内网时间体系不崩溃。
1.4 系统预装规则
RHEL、Rocky Linux 官方原版镜像,无论选择最小化安装,还是带图形界面的工作站安装,默认预装并启用 Chrony 服务,开箱即可使用。 部分教学镜像、机房定制精简镜像,为缩小系统体积、简化环境,会主动移除 Chrony 软件包。此类环境中,需要运维人员手动执行安装命令。该现象属于镜像定制行为,并非系统默认配置。
二、Chrony 软件安装与服务基础管理
2.1 软件安装
本文实验环境为 RHEL 9、Rocky Linux 9,系统默认使用 dnf/yum 作为包管理工具,两套系统安装命令完全通用。
2.1.1 安装命令
bash
yum install chrony -y
执行命令后,系统会自动下载并安装 Chrony 主程序及相关依赖包。
2.1.2 安装验证
安装完成后,可通过软件查询命令,确认程序是否正常部署:
bash
rpm -q chrony
若输出软件名称与版本号,代表安装成功;若提示软件未安装,则说明安装过程异常,需要重新执行安装操作。
2.2 服务启停与开机自启Chrony 的后台进程名称为 chronyd,系统服务单元名称为 chronyd.service,所有服务操作命令遵循 Systemd 标准语法,全系统统一。
bash
#启动服务:
systemctl start chronyd
#停止服务:
systemctl stop chronyd
#重启服务:
systemctl restart chronyd
#设置开机自启:
systemctl enable chronyd
#取消开机自启:
systemctl disable chronyd
#查看服务运行状态:
systemctl status chronyd
重要规则 :修改 Chrony 主配置文件后,必须执行restart重启服务,新的配置参数才能生效,仅刷新配置无法完成加载。
三、核心配置文件全参数详解
/etc/chrony.conf 是 Chrony 唯一的主配置文件,服务的所有功能、时间源、访问权限、同步策略、时钟校准规则,均由该文件定义。文件内所有参数均为官方标准语法,无自定义模糊配置,下面分通用配置、服务端专属配置、客户端专属配置三大类逐一解析。
3.1 通用基础配置(服务端、客户端共用)
此类配置作用于所有角色,主要用于控制时钟偏差记录、时间跳变规则、硬件时钟同步,是文件中不可或缺的基础项。
-
driftfile /var/lib/chrony/drift 硬件时钟存在物理固有误差,长期运行会出现快慢偏差。该配置指定偏差记录文件路径,Chrony 会持续统计硬件时钟的运行误差,并记录到该文件中,依托历史数据实现长期精准校准。
-
makestep 1.0 3 时间跳变安全策略,语法格式为
makestep 偏差阈值 生效次数。 默认参数含义:当本机时间与标准时间差值小于 1 秒时,允许直接跳转校准时间;该规则仅在前 3 次同步操作中生效。 设置该策略的目的,是避免服务器在业务运行过程中出现大幅时间跳变,防止日志错乱、数据库事务中断等问题。若设备初始时间偏差极大,可临时调大阈值,同步完成后恢复默认值。 -
rtcsync 该参数的作用是定期将系统软件时间,同步写入主板 RTC 硬件时钟。服务器关机、重启后,系统会读取硬件时钟作为初始时间,开启此参数可以保证硬件时钟持续准确,避免重启后时间重置错乱。
3.2 服务端专属配置
部署内网中心时间服务器时,需要额外配置公网时间源、内网访问权限、断网代偿功能,这三项是服务端的核心配置。
-
server 公网时间源地址 iburst 用于指定上层 NTP 公共时间源,服务端将以此为基准校准本机时间。 常用公共时间源:阿里云
ntp.aliyun.com、腾讯云time1.qq.com、国家授时中心cn.ntp.org.cn。iburst是配套参数,作用为服务启动后,快速发送多组同步请求,缩短首次同步的耗时,实现开机快速校时。 -
allow IP 地址 / 网段 访问权限控制配置,决定哪些设备可以连接当前服务端同步时间。 格式支持两种写法:填写单个 IP,仅允许该一台设备访问;填写网段(如 192.168.22.0/24),允许整个网段内所有设备访问。未被 allow 规则放行的主机,会被服务端拒绝连接,同步直接失败。
-
local stratum 10 开启本地时钟代偿功能,企业生产环境必配参数。 当服务端因网络故障断开公网、无法连接上层时间源时,该参数会让服务端将本机当前时间作为标准时间,继续为内网客户端提供同步服务,保证内网时间架构正常运行。若缺少此配置,公网断连后,服务端将停止对外服务。
3.3 客户端专属配置
客户端核心需求是指定同步源,根据场景选择对接公网或内网服务端,同时可按需开启身份认证。
-
server 目标时间源地址 iburst 指定客户端需要同步的时间服务器地址。对接内网 Chrony 服务端时,填写服务端 IP 地址即可,搭配 iburst 参数实现快速同步。
-
keyfile /etc/chrony.keys 密钥认证配置,用于高安全等级内网环境。客户端与服务端通过密钥完成身份校验,防止非法设备接入。普通学习环境、信任内网可直接注释该行,关闭认证功能,简化部署流程。
-
屏蔽多余时间源 若客户端要求仅同步内网服务端,需要将配置文件中默认自带的
server、pool等公网时间源配置全部注释或删除,避免客户端跨网请求公网时间源,违背部署规划。
四、防火墙与 SELinux 安全策略适配
NTP 协议依赖 UDP 123 端口通信,Linux 系统默认的防火墙、SELinux 安全机制,会拦截陌生端口的数据包,进而导致 Chrony 同步失败。针对不同使用场景,有两套标准处理方案。
4.1 学习测试环境方案
测试环境以快速调试、简化操作为目标,可直接关闭防护机制:
-
1关闭防火墙并取消开机自启
systemctl stop firewalld
systemctl disable firewalld -
2临时关闭 SELinux(重启系统后失效)
setenforce 0
该方式操作简单,可彻底规避端口拦截问题,适合日常实验、功能测试。
4.2 企业生产环境方案
生产环境严禁直接关闭防火墙与 SELinux,需要在保留安全防护的前提下,手动放行 UDP 123 端口。 以 firewalld 为例,执行命令永久放行 NTP 端口:
firewall-cmd --permanent --add-port=123/udp
firewall-cmd --reload
执行完成后,防火墙永久允许 UDP 123 端口的数据传输,同时不影响其他安全规则。SELinux 可根据企业安全规范,添加对应的访问规则,保证服务正常运行。
五、系统时区与时间管理
时区和系统时间是两个独立概念,时区仅控制时间的展示格式,不会修改时钟本身的数值,集群环境必须统一时区与系统时间。
5.1 时区配置
国内服务器统一使用亚洲 / 上海时区,标准配置命令:
timedatectl set-timezone Asia/Shanghai
集群内所有设备必须执行该命令,保证日志、任务记录的时间展示格式一致。仅统一时区,无法修复设备之间的时钟偏差。
5.2 时间状态全量查看
timedatectl 是系统标准时间查看命令,执行后可一次性查看本地时间、硬件时钟、时区、NTP 同步开关、同步状态等全部信息,是日常巡检的常用命令。
六、同步状态查询与字段释义
部署完成后,使用专用命令查看 Chrony 同步状态,根据输出的标识、字段,可直观判断同步是否正常。核心查询命令:
chronyc sources -v
6.1 状态标识含义
输出结果首列的符号为官方固定状态标识,是排错的核心依据:
^*:正常状态。本机已成功同步该时间源,当前时间源为最优、最可靠的参考源。^?:异常状态。时间源不可用,触发原因包含网络不通、端口拦截、权限拒绝、时间偏差超限等。
6.2 Reach 字段解读
Reach 为八进制统计数值,用于统计客户端与时间源之间的报文收发成功率:
- Reach = 0:双向报文收发完全失败,问题集中在网络不通、UDP 123 端口被拦截、服务端未配置 allow 放行。
- Reach > 0:报文可以正常收发,网络与端口通信正常,故障原因多为时间偏差过大、缓存干扰等。
七、Chrony 缓存机制
Chrony 会将历史时钟偏差、同步日志、设备状态等数据,统一缓存至 /var/lib/chrony/ 目录下。该目录内的缓存文件具备持久化特性,不会随着服务重启、配置修改自动清空。
在部分场景下,即便配置、网络、时间全部修复,旧缓存依然会干扰服务判断,导致同步状态异常。此时需要手动清理缓存,标准操作流程:
- 停止 chronyd 服务;
- 清空缓存目录所有文件;
- 重新启动服务。
参考命令:
systemctl stop chronyd
rm -rf /var/lib/chrony/*
systemctl start chronyd
清理缓存后,服务会重新加载配置、重新探测时间源,恢复正常同步逻辑。
八、标准架构实战部署流程
结合企业主流的内网分层时间同步架构,梳理一套可直接落地的标准化部署流程,分为服务端部署、客户端部署两大环节。
8.1 部署规划
- 中心 Chrony 服务端:192.168.22.128,对接公网时间源,对内网提供同步服务;
- 内网客户端:192.168.22.130,仅同步中心服务端,不访问公网时间源。
8.2 服务端部署步骤
- 检查并确认 Chrony 软件已安装,若未安装则执行 yum 命令手动安装;
- 编辑
/etc/chrony.conf,写入公网时间源、内网网段放行、local stratum 等核心配置; - 根据环境需求处理防火墙与 SELinux,放行 UDP 123 端口或临时关闭防护;
- 执行
systemctl restart chronyd重启服务,并设置开机自启; - 执行
chronyc sources -v验证,出现^*标识,代表服务端公网同步正常。
8.3 客户端部署步骤
- 编辑
/etc/chrony.conf,注释所有公网时间源配置,添加服务端 IP 作为唯一同步源; - 注释 keyfile 密钥配置,关闭身份认证;
- 统一客户端时区为亚洲 / 上海;
- 重启 chronyd 服务;
- 查看同步状态,出现
^*即为部署完成。
九、常见故障分类与标准化排查思路
结合 Chrony 运行原理与实战经验,将高频故障分为四大类,明确故障现象、成因以及自上而下的排查顺序,做到精准定位问题。
9.1 通信类故障
现象 :状态标识为^?,Reach 字段等于 0。 成因 :客户端与服务端网络不通、UDP 123 端口被防火墙拦截、服务端未配置 allow 放行规则。 排查顺序:
- 使用 ping 命令测试客户端与服务端网络连通性;
- 检查两端防火墙规则,确认 UDP 123 端口已放行;
- 核对服务端
allow配置,确认客户端 IP / 网段在放行范围内。
9.2 服务运行类故障
现象 :网络通信正常,但服务端无法对外提供时间服务。 成因 :chronyd 服务未正常启动、服务端缺失local stratum配置,公网断连后停止服务。 排查顺序:
- 执行
systemctl status chronyd,检查服务是否处于运行状态; - 打开主配置文件,核对
local stratum参数是否配置完整。
9.3 时间策略类故障
现象 :Reach 字段大于 0,链路通信正常,但状态依旧显示^?。 成因 :客户端与时间源时间差值过大,触发makestep时间跳变限制,服务拒绝执行大幅校准。 排查顺序:
- 使用
timedatectl查看两端系统时间,确认时差大小; - 手动执行命令对齐两端时间;
- 临时调大
makestep阈值,同步完成后恢复默认配置。
9.4 缓存干扰故障
现象 :配置、网络、端口、系统时间全部正常,同步状态异常。 成因 :/var/lib/chrony/目录下的旧缓存数据持续干扰服务逻辑。 排查顺序:按照标准流程停止服务、清空缓存、重启服务,重新校验同步状态。
十、实战例题:Chrony 内网时间同步服务完整部署与排错
10.1 实验环境说明
- 服务端:192.168.22.128(RHEL 9 图形界面版,教学镜像未预装 Chrony)
- 客户端:192.168.22.130(Rocky Linux 9,教学镜像未预装 Chrony)
- 实验目标:客户端不连接公网,仅同步内网 Chrony 服务端时间,实现集群时间统一。
10.2 软件安装(两台主机均执行)
yum install chrony -y
rpm -q chrony
10.3 服务端配置与验证
10.3.1 编辑配置文件
vi /etc/chrony.conf
核心配置(有的就不用重复):
bash
#先注释掉之前的再写入新的
server ntp.aliyun.com iburst
allow 192.168.22.130/24
local stratum 10
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

10.3.2 服务启停与自启
systemctl restart chronyd
systemctl enable chronyd
systemctl status chronyd
10.3.3 实验环境安全策略处理(配置过可忽略)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
10.3.4 服务端同步状态验证
chronyc sources -v
出现 ^* 标识,说明服务端已成功同步公网时间。

10.4 客户端配置
10.4.1 编辑配配置
vi /etc/chrony.conf
-
注释所有默认公网
server、pool时间源 -
注释
keyfile /etc/chrony.keys -
添加内网服务端配置:
server 192.168.22.128 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync


10.4.2 重启服务并查看状态
客户端执行以下命令,验证同步状态:
systemctl restart chronyd
chronyc sources -v

输出出现 ^* 192.168.22.128,说明客户端已成功同步内网服务端时间,实验完成。
10.5 故障现象与解决方法
10.5.1 故障 1:客户端显示 ^?,Reach=0

- 原因:防火墙、SELinux 拦截 UDP 123 端口
- 解决:执行安全策略关闭命令,关闭防护组件。
10.5.2 故障 2:Reach>0 但仍显示 ^?

-
原因:虚拟机时钟漂移导致时间差过大,触发
makestep时间跳变限制,/var/lib/chrony/目录旧缓存干扰 -
解决:清空缓存并重启服务
systemctl stop chronyd
rm -rf /var/lib/chrony/*
systemctl start chronyd
