一篇文章看懂时间同步服务
Linux 系统时间与时区管理
一、时间与时钟类型
时钟类型 | 说明 | 管理工具 |
系统时钟 | 由 Linux 内核维护的软件时钟,基于时区配置显示时间 | timedatectl |
硬件时钟 (RTC) | 主板上的物理时钟,通常以 UTC 或本地时间存储,用于系统启动时初始化时间 | hwclock |
二、核心管理命令详解
1. 设置系统时间
命令
sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
参数说明:
时间格式必须严格遵循 年-月-日 时:分:秒
支持 24 小时制,秒可省略(默认为 00)
设置系统时间为 2024 年 2 月 13 日 10:41:55
sudo timedatectl set-time "2024-02-13 10:41:55"
注意事项:
需要 root 权限
若系统启用了 NTP 时间同步服务(如 chronyd
或 systemd-timesyncd
),手动设置时间后可能被自动纠正
2. 查看与设置时区
2.1 列出所有可用时区
timedatectl list-timezones
过滤示例
查找亚洲时区
timedatectl list-timezones | grep Asia 输出: Asia/Shanghai Asia/Tokyo Asia/Dubai
2.2 设置系统时区
sudo timedatectl set-timezone "时区名称"
注意事项:
时区名称区分大小写
修改时区后,系统时间和日志时间戳将自动转换
推荐使用协调世界时 (UTC) 部署跨国服务器
3. 配置硬件时钟模式
sudo timedatectl set-local-rtc <0|1>
参数 | 说明 |
0 | 硬件时钟使用 UTC 时间 |
1 | 硬件时钟使用 本地时间 |
三、完整操作流程
查看当前时间配置
timedatectl 输出当前时区为 America/New_York
修改时区
sudo timedatectl set-timezone Asia/Shanghai
同步硬件时钟
sudo hwclock --systohc
使用 Chrony 实现 NTP 时间同步
一、Chrony 架构与核心组件
Chrony 是 RHEL 9 默认的 NTP 客户端/服务器软件
组件 | 运行模式 | 核心功能 |
---|---|---|
chronyd | 守护进程 | 负责与 NTP 服务器通信,持续调整系统时钟频率,补偿时钟漂移,实现高精度同步 |
chronyc | 命令行工具 | 提供实时监控、配置调整和同步状态查询的交互式界面 |
二、Chrony 客户端配置
1. 安装与基础配置
1.1 安装软件包
sudo dnf install -y chrony
2. 服务管理命令
操作 | 命令 | 说明 |
---|---|---|
启动服务 | sudo systemctl start chronyd | 初始化时间同步进程 |
设置开机自启 | sudo systemctl enable chronyd | 确保重启后自动同步 |
查看服务状态 | sudo systemctl status chronyd | 验证服务是否正常运行 |
重载配置 | sudo systemctl reload chronyd | 应用配置变更无需重启服务 |
3. 时间与时区初始化设置
3.1 设置系统时间基准
手动设定初始时间(可选,通常由 NTP 自动同步)
sudo timedatectl set-time "2024-02-13 10:41:55"
3.2 配置时区
列出所有时区
timedatectl list-timezones设置为上海时区
sudo timedatectl set-timezone Asia/Shanghai
3.3 硬件时钟模式
使用 UTC 模式(推荐,尤其多系统环境)
sudo timedatectl set-local-rtc 0同步硬件时钟
sudo hwclock --systohc
三、同步状态
时间源状态解读
通过 chronyc sources -v
查看详细时间源状态
符号 | 状态 | 解释 |
^ | Server(服务器模式) | 当前使用的上级 NTP 服务器 |
= | Peer(对等模式) | 与其他节点互为时间源(用于集群环境) |
# | Local(本地时钟) | 本地参考时钟 |
* | Current Synced(已同步) | 当前最佳时间源 |
+ | Acceptable(可接受) | 候选时间源,满足精度要求 |
- | Rejected(拒绝) | 因偏差过大或不可达被排除 |
? | Unreachable(不可达) | 网络连接失败或响应超时 |
x | False Ticker(假时钟) | 被算法判定为不可信源 |
~ | High Variability(高波动) | 时间波动超出阈值 |
搭建 Chrony 时间同步服务器
一、Chrony 服务端核心特性
端口使用:
UDP 323:Chrony 守护进程 (chronyd
) 默认管理端口
UDP 123:兼容 NTP 协议,用于与客户端通信(需开放)
核心优势:
快速同步:初始同步仅需分钟级,传统 NTP 需数小时
动态频率补偿:适应虚拟机时钟漂移和节能模式波动
低资源占用:间歇性网络环境下仍保持高精度
稳定性优化:抵抗网络拥塞和临时延迟影响
二、服务端配置文件详解
关键参数解析
参数 | 功能说明 | 安全建议 |
server <地址> iburst | 指定上游时间服务器,iburst 加速首次同步(发送 8 个探测包) | 至少配置 3 个不同源以提高可靠性 |
allow 0.0.0.0/0 | 允许所有 IP 的客户端连接 | 生产环境应限制为内网段 |
local stratum 10 | 当上游服务器不可用时,以本地时钟作为第 10 层时间源(防止服务中断) | 层级值建议 ≥10,避免干扰合法源 |
driftfile | 存储系统时钟频率偏差数据,重启后快速补偿 | 确保文件路径可写且权限为 600 |
rtcsync | 每 11 分钟将系统时间同步到硬件时钟 (RTC) | 双系统环境需配合 set-local-rtc 0 |
bindcmdaddress | 指定 chronyd 监听的接口(默认 0.0.0.0 全接口) | 内网服务器可绑定管理 IP |
三、服务端部署流程
1. 安装与配置
安装 Chrony
sudo dnf install -y chrony编辑配置文件
sudo vim /etc/chrony.conf添加以下内容:
server ntp.ntsc.ac.cn iburst
server ntp.aliyun.com iburst
allow 网段 限制内网访问
local stratum 10
driftfile /var/lib/chrony/drift
rtcsync
2. 防火墙配置
开放 NTP 服务端口
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload验证端口监听
ss -tuln | grep -E '123|323'输出应包含:udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:323 0.0.0.0:*
3. 服务管理
启动并启用服务
sudo systemctl enable --now chronyd检查服务状态
systemctl status chronyd预期输出:active (running)重载配置(无需重启)
sudo systemctl reload chronyd
四、服务端状态验证
1. 查看同步状态的
跟踪同步状态
chronyc tracking关键指标:Reference ID : 标识当前同步的服务器Stratum : 层级(越小越接近权威源)System time : 与参考源的偏移量(理想值接近 0)列出所有时间源
chronyc sources -v