文章目录
- 前言
- 一、NTP (Network Time Protocol) & ntpd
- 1.原理
- 2. 安装与配置(ntp 包)
- 3.NTPd 优缺点对比
- 二、Chrony
- 1.原理
- 2.安装与配置 (`chrony` 包)
- 3. 优点
- 4. 缺点
- 三、systemd-timesyncd
- 1.原理
- 2.安装与配置 (systemd 自带)
- 3. 优点
- 4. 缺点
- 四、手动同步工具
- 1.ntpdate`(已废弃,不推荐)
- 2. date 命令
- 五、关键操作与注意事项
- 1. 防火墙
- 2. 硬件时钟 (RTC) 同步
- 3. 时区设置
- 4. 服务选择建议
- 总结
前言
在 CentOS 7 中,保持系统时间准确至关重要,尤其对于集群、数据库、日志记录等场景。主要的时间同步方式和工具有 ntpd (NTP daemon)、chronyd (Chrony daemon) 和 systemd-timesyncd
一、NTP (Network Time Protocol) & ntpd
1.原理
* 使用 NTP 协议 (UDP 端口 123)
* 客户端 (ntpd) 与一个或多个 NTP 服务器通信
* 通过交换带有时间戳的数据包,计算网络延迟 (delay) 和时间偏差 (offset)
* 采用复杂算法(如 Marzullo 算法、时钟筛选、组合)过滤噪声,选择最可靠的服务器
* 通过 渐进式调整 系统时钟(slew)来纠正偏差(每秒最多调整几毫秒),避免时间跳变,对依赖连续时间的应用友好。只有在启动时偏差过大 (>128ms 或 panic 阈值) 才会进行阶跃调整 (step)。
* 维护一个持续的频率漂移校正模型,即使暂时断网也能保持一定精度
2. 安装与配置(ntp 包)
# 安装
sudo yum install ntp
# 主配置文件:/etc/ntp.conf
# 编辑配置文件,指定 NTP 服务器池或服务器
sudo vim /etc/ntp.conf
示例配置片段
# 使用 CentOS 官方池
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst# 允许本地网络客户端同步 (可选)
# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
iburst
: 初始启动时发送 8 个数据包加速同步restrict ... nomodify notrap
: 允许指定网络查询时间但不允许修改配置或设置陷阱
# 启动服务并设置开机自启
sudo systemctl start ntpd
sudo systemctl enable ntpd
# 查看同步状态
ntpq -pn
ntpq -pn
输出解释:
remote refid st t when poll reach delay offset jitter
==============================================================================
-162.159.200.1 10.107.8.118 3 u 28 64 3 359.100 -70.096 38.033
+95.111.202.5 106.10.186.200 3 u 28 64 3 165.314 0.278 52.889
*202.118.1.81 202.118.1.46 2 u 27 64 3 51.261 2.783 10.046
+185.209.85.222 130.173.91.58 2 u 25 64 3 247.237 -21.915 12.004
*
表示当前优选的时间源remote
: NTP 服务器 IPoffset
: 本地时间与服务器时间的偏差 (ms)。负数表示本地时间慢delay
: 网络延迟 (ms)jitter
: 偏移量的平均偏差 (ms)
3.NTPd 优缺点对比
类别 | 优点 | 缺点 |
---|---|---|
历史与稳定 | 历史悠久,稳定可靠,算法成熟 | 启动和收敛速度相对较慢(尤其初始同步) |
时间调整 | 渐进调整(slew )避免时间跳变,适合数据库、交易系统 | 对间歇性网络连接或高延迟网络适应性不如 chrony |
断网表现 | 频率漂移模型在断网时维持精度 | 资源消耗略高于 chrony |
工具支持 | 强大的日志和监控工具(ntpq ,ntpstat ) | 默认配置下处理大时间偏差(>1000s)需要手动干预(ntpd -gq ) |
二、Chrony
1.原理
* CentOS 7 的默认时间同步工具(chronyd服务)
* 兼容 NTP 协议,但算法更先进
* 能更快适应网络不稳定、间歇性连接(如笔记本、移动设备)
* 在启动时或时间偏差较大时,能更快地大幅纠正时间 (step) 或快速调整 (slew)
* 更精确地处理时钟频率漂移,尤其适合虚拟化环境(因虚拟化时钟常不稳定)
* 支持 NTP 和 PTP (需硬件支持) 时间源
* 提供 chronyc 命令行工具进行实时监控和控制
2.安装与配置 (chrony
包)
# 安装 (通常默认已安装)
sudo yum install chrony# 主配置文件:/etc/chrony.conf
# 编辑配置文件
sudo vim /etc/chrony.conf
示例配置片段
# 使用阿里云公共 NTP 服务器
server ntp.aliyun.com iburst
server time1.cloud.tencent.com iburst# 允许特定网络同步 (可选)
# allow 192.168.1.0/24# 启用内核实时时钟 (RTC) 同步
rtcsync# 记录频率漂移
driftfile /var/lib/chrony/drift# 日志目录
logdir /var/log/chrony
iburst
: 同ntpd
,加速初始同步rtcsync
: 定期将系统时间同步到硬件时钟 (RTC)driftfile
: 存储计算出的时钟频率漂移值
# 启动服务并设置开机自启
sudo systemctl start chronyd
sudo systemctl enable chronyd# 查看状态
chronyc tracking # 显示系统时间信息
chronyc sources -v # 查看时间源及其状态
chronyc sources -v
输出解释:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp8.flashdance.cx 2 6 377 10 -2300us[-2300us] +/- 94ms
^- stratum2-1.ntp.mow01.ru.> 2 6 177 6 +8681us[+8681us] +/- 83ms
^* time.neu.edu.cn 2 6 377 11 -1442us[-1609us] +/- 28ms
^- time.cloudflare.com 3 6 37 11 +4486us[+4486us] +/- 117ms
^*
: 当前最优时间源。Stratum
: 时间源的层级 (数字越小越接近原子钟)。Last sample
:[offset]
是本地时间与源时间的偏差。
3. 优点
- 启动快、收敛快,特别适合不稳定的网络环境
- 处理大时间偏差能力强,自动执行阶跃或快速调整
- 在虚拟机和动态网络中表现更优
- 资源占用低
- 配置灵活,支持
NTP
和PTP
chronyc
提供强大实时控制能力
4. 缺点
- 相比
ntpd
,在某些极端稳定网络下长期稳定性可能略逊(但差距极小) - 历史不如
ntpd
悠久(但已是主流且默认选择)
三、systemd-timesyncd
1.原理
* systemd 生态提供的轻量级 SNTP (Simple NTP) 客户端
* 只实现 NTP 客户端的基本功能,不支持作为 NTP 服务器
* 使用 timedatectl 命令管理。
* 设计目标是提供基本的时间同步,适合桌面或不需要高精度/复杂配置的系统
* 同步间隔较长(通常几分钟一次)
2.安装与配置 (systemd 自带)
# 通常默认已安装并启用
# 主配置文件:/etc/systemd/timesyncd.conf
sudo vim /etc/systemd/timesyncd.conf
示例配置片段
[Time]
# 指定 NTP 服务器
NTP=ntp.aliyun.com time1.cloud.tencent.com
# FallbackNTP=0.centos.pool.ntp.org
# 重启服务
sudo systemctl restart systemd-timesyncd# 查看状态
timedatectl status
timedatectl status
输出中包含:
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
3. 优点
- 极其轻量级,零额外依赖
- 集成于
systemd
,管理统一 (timedatectl
) - 配置简单
4. 缺点
- 功能简陋:仅作客户端,不支持服务器模式、复杂过滤、频率漂移补偿等
- 精度和鲁棒性低于
ntpd
和chronyd
- 同步间隔长,不适合高精度场景
- 无法精细监控
四、手动同步工具
1.ntpdate`(已废弃,不推荐)
- 原理
- 一次性查询 NTP 服务器并立即阶跃 (
step
) 调整系统时间
- 一次性查询 NTP 服务器并立即阶跃 (
- 操作
sudo ntpdate ntp.aliyun.com
- 缺点:
- 中断性:阶跃调整导致时间跳变,可能引发应用错误(日志混乱、交易失败)
- 精度差:单次测量易受网络抖动影响
- 无持续补偿:执行后即结束
- 与
ntpd
/chronyd
冲突:不能同时运行
- 强烈建议避免在生产环境使用。如需阶跃调整,优先使用:
sudo chronyc makestep # Chrony 手动阶跃
sudo ntpd -gq # ntpd 在启动前强制同步 (需先停止 ntpd 服务)
2. date 命令
- 原理
- 手动设置系统时间
- 操作
sudo date -s "2024-04-15 14:30:00" # 设置具体时间
sudo date +%T -s "14:30:00" # 仅设置时间 (保留日期)
- 缺点
- 完全手动,精度依赖操作者,无网络同步能力。仅用于临时调试或初始化
五、关键操作与注意事项
1. 防火墙
- NTP 使用 UDP 123 端口
- 确保防火墙允许出站访问 NTP 服务器
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
2. 硬件时钟 (RTC) 同步
- 系统时间 (
clock
) 在重启后从硬件时钟加载——确保两者一致
# 将当前系统时间写入硬件时钟
sudo hwclock --systohc
# 查看硬件时钟时间
sudo hwclock --show
- 在
ntp.conf
(使用ntpd
) 或chrony.conf
(使用chronyd
并设置rtcsync
) 中配置,服务会自动定期同步
3. 时区设置
- 时间同步解决的是 UTC 时间问题——显示时间需正确设置时区
# 列出可用时区
timedatectl list-timezones# 设置时区 (如 Asia/Shanghai)
sudo timedatectl set-timezone Asia/Shanghai# 检查
timedatectl
4. 服务选择建议
- 绝大多数 CentOS 7 服务器:首选
chronyd
(默认且优秀) - 需要非常传统或特定 NTP 功能/生态:考虑
ntpd
- 轻量级桌面/简单设备:
systemd-timesyncd
足够
总结
1.对于 CentOS 7 服务器环境,
chronyd
是最佳、最推荐的时间同步解决方案,平衡了速度、精度、资源消耗和网络适应性
2.除非有特定兼容性要求,否则无需使用ntpd
3.systemd-timesyncd
仅适用于要求极低的场景
对比表
特性 | ntpd (NTP) | chronyd (Chrony) | systemd-timesyncd | ntpdate (废弃) |
---|---|---|---|---|
定位 | 成熟稳定的 NTP 实现 | 现代、快速、适应性强的默认工具 | 轻量级 SNTP 客户端 | 一次性时间设置工具 |
启动/收敛速度 | 较慢 | 极快 | 慢 | 一次执行 |
网络适应性 | 稳定网络好 | 不稳定/动态网络极佳 | 一般 | 依赖单次网络质量 |
时间偏差处理 | 主要靠渐进 (slew ),大偏差需手动 | 自动阶跃或快速调整 (slew/step ) | 阶跃调整 | 强制阶跃调整 |
精度 | 高 | 高 (尤其虚拟化) | 一般 | 低 (单次测量) |
资源占用 | 中等 | 低 | 极低 | 执行时占用 |
作为 NTP 服务器 | 支持 | 支持 | 不支持 | 不支持 |
配置复杂度 | 中等 | 中等 | 简单 | 简单 |
监控工具 | ntpq , ntpstat | chronyc | timedatectl | 无 |
推荐场景 | 传统环境/特定需求 | 默认选择/服务器/虚拟机 | 桌面/简单设备 | 避免使用 |