万字详解|Linux Chrony 时间服务完整学习手册

目录

[一、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 在实际应用中分为两种核心角色,两种角色搭配使用,构成完整的时间同步架构:

  1. 服务端:主动连接互联网上的公共 NTP 时间源,完成自身系统时间校准,同时对外提供时间同步服务,为局域网内其他设备分发标准时间。
  2. 客户端:不直接对接公网时间源,以内网 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 通用基础配置(服务端、客户端共用)

此类配置作用于所有角色,主要用于控制时钟偏差记录、时间跳变规则、硬件时钟同步,是文件中不可或缺的基础项。

  1. driftfile /var/lib/chrony/drift 硬件时钟存在物理固有误差,长期运行会出现快慢偏差。该配置指定偏差记录文件路径,Chrony 会持续统计硬件时钟的运行误差,并记录到该文件中,依托历史数据实现长期精准校准。

  2. makestep 1.0 3 时间跳变安全策略,语法格式为 makestep 偏差阈值 生效次数。 默认参数含义:当本机时间与标准时间差值小于 1 秒时,允许直接跳转校准时间;该规则仅在前 3 次同步操作中生效。 设置该策略的目的,是避免服务器在业务运行过程中出现大幅时间跳变,防止日志错乱、数据库事务中断等问题。若设备初始时间偏差极大,可临时调大阈值,同步完成后恢复默认值。

  3. rtcsync 该参数的作用是定期将系统软件时间,同步写入主板 RTC 硬件时钟。服务器关机、重启后,系统会读取硬件时钟作为初始时间,开启此参数可以保证硬件时钟持续准确,避免重启后时间重置错乱。

3.2 服务端专属配置

部署内网中心时间服务器时,需要额外配置公网时间源、内网访问权限、断网代偿功能,这三项是服务端的核心配置。

  1. server 公网时间源地址 iburst 用于指定上层 NTP 公共时间源,服务端将以此为基准校准本机时间。 常用公共时间源:阿里云 ntp.aliyun.com、腾讯云 time1.qq.com、国家授时中心 cn.ntp.org.cniburst 是配套参数,作用为服务启动后,快速发送多组同步请求,缩短首次同步的耗时,实现开机快速校时。

  2. allow IP 地址 / 网段 访问权限控制配置,决定哪些设备可以连接当前服务端同步时间。 格式支持两种写法:填写单个 IP,仅允许该一台设备访问;填写网段(如 192.168.22.0/24),允许整个网段内所有设备访问。未被 allow 规则放行的主机,会被服务端拒绝连接,同步直接失败。

  3. local stratum 10 开启本地时钟代偿功能,企业生产环境必配参数。 当服务端因网络故障断开公网、无法连接上层时间源时,该参数会让服务端将本机当前时间作为标准时间,继续为内网客户端提供同步服务,保证内网时间架构正常运行。若缺少此配置,公网断连后,服务端将停止对外服务。

3.3 客户端专属配置

客户端核心需求是指定同步源,根据场景选择对接公网或内网服务端,同时可按需开启身份认证。

  1. server 目标时间源地址 iburst 指定客户端需要同步的时间服务器地址。对接内网 Chrony 服务端时,填写服务端 IP 地址即可,搭配 iburst 参数实现快速同步。

  2. keyfile /etc/chrony.keys 密钥认证配置,用于高安全等级内网环境。客户端与服务端通过密钥完成身份校验,防止非法设备接入。普通学习环境、信任内网可直接注释该行,关闭认证功能,简化部署流程。

  3. 屏蔽多余时间源 若客户端要求仅同步内网服务端,需要将配置文件中默认自带的 serverpool 等公网时间源配置全部注释或删除,避免客户端跨网请求公网时间源,违背部署规划。

四、防火墙与 SELinux 安全策略适配

NTP 协议依赖 UDP 123 端口通信,Linux 系统默认的防火墙、SELinux 安全机制,会拦截陌生端口的数据包,进而导致 Chrony 同步失败。针对不同使用场景,有两套标准处理方案。

4.1 学习测试环境方案

测试环境以快速调试、简化操作为目标,可直接关闭防护机制:

  1. 1关闭防火墙并取消开机自启

    systemctl stop firewalld
    systemctl disable firewalld

  2. 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 状态标识含义

输出结果首列的符号为官方固定状态标识,是排错的核心依据:

  1. ^*:正常状态。本机已成功同步该时间源,当前时间源为最优、最可靠的参考源。
  2. ^?:异常状态。时间源不可用,触发原因包含网络不通、端口拦截、权限拒绝、时间偏差超限等。

6.2 Reach 字段解读

Reach 为八进制统计数值,用于统计客户端与时间源之间的报文收发成功率:

  1. Reach = 0:双向报文收发完全失败,问题集中在网络不通、UDP 123 端口被拦截、服务端未配置 allow 放行。
  2. Reach > 0:报文可以正常收发,网络与端口通信正常,故障原因多为时间偏差过大、缓存干扰等。

七、Chrony 缓存机制

Chrony 会将历史时钟偏差、同步日志、设备状态等数据,统一缓存至 /var/lib/chrony/ 目录下。该目录内的缓存文件具备持久化特性,不会随着服务重启、配置修改自动清空

在部分场景下,即便配置、网络、时间全部修复,旧缓存依然会干扰服务判断,导致同步状态异常。此时需要手动清理缓存,标准操作流程:

  1. 停止 chronyd 服务;
  2. 清空缓存目录所有文件;
  3. 重新启动服务。

参考命令:

复制代码
systemctl stop chronyd
rm -rf /var/lib/chrony/*
systemctl start chronyd

清理缓存后,服务会重新加载配置、重新探测时间源,恢复正常同步逻辑。

八、标准架构实战部署流程

结合企业主流的内网分层时间同步架构,梳理一套可直接落地的标准化部署流程,分为服务端部署、客户端部署两大环节。

8.1 部署规划

  1. 中心 Chrony 服务端:192.168.22.128,对接公网时间源,对内网提供同步服务;
  2. 内网客户端:192.168.22.130,仅同步中心服务端,不访问公网时间源。

8.2 服务端部署步骤

  1. 检查并确认 Chrony 软件已安装,若未安装则执行 yum 命令手动安装;
  2. 编辑 /etc/chrony.conf,写入公网时间源、内网网段放行、local stratum 等核心配置;
  3. 根据环境需求处理防火墙与 SELinux,放行 UDP 123 端口或临时关闭防护;
  4. 执行systemctl restart chronyd重启服务,并设置开机自启;
  5. 执行chronyc sources -v验证,出现^*标识,代表服务端公网同步正常。

8.3 客户端部署步骤

  1. 编辑 /etc/chrony.conf,注释所有公网时间源配置,添加服务端 IP 作为唯一同步源;
  2. 注释 keyfile 密钥配置,关闭身份认证;
  3. 统一客户端时区为亚洲 / 上海;
  4. 重启 chronyd 服务;
  5. 查看同步状态,出现^*即为部署完成。

九、常见故障分类与标准化排查思路

结合 Chrony 运行原理与实战经验,将高频故障分为四大类,明确故障现象、成因以及自上而下的排查顺序,做到精准定位问题。

9.1 通信类故障

现象 :状态标识为^?,Reach 字段等于 0。 成因 :客户端与服务端网络不通、UDP 123 端口被防火墙拦截、服务端未配置 allow 放行规则。 排查顺序

  1. 使用 ping 命令测试客户端与服务端网络连通性;
  2. 检查两端防火墙规则,确认 UDP 123 端口已放行;
  3. 核对服务端allow配置,确认客户端 IP / 网段在放行范围内。

9.2 服务运行类故障

现象 :网络通信正常,但服务端无法对外提供时间服务。 成因 :chronyd 服务未正常启动、服务端缺失local stratum配置,公网断连后停止服务。 排查顺序

  1. 执行systemctl status chronyd,检查服务是否处于运行状态;
  2. 打开主配置文件,核对local stratum参数是否配置完整。

9.3 时间策略类故障

现象 :Reach 字段大于 0,链路通信正常,但状态依旧显示^?成因 :客户端与时间源时间差值过大,触发makestep时间跳变限制,服务拒绝执行大幅校准。 排查顺序

  1. 使用timedatectl查看两端系统时间,确认时差大小;
  2. 手动执行命令对齐两端时间;
  3. 临时调大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
  • 注释所有默认公网 serverpool 时间源

  • 注释 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

相关推荐
A小辣椒17 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒21 小时前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式