CentOS7下同步时间的三种方法实现和对比(NTP 、Chrony和systemd-timesyncd)
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>前言</li><li>一、NTP (Network Time Protocol) & ntpd<ul class="second_class_ul"><li>1.原理</li><li>2. 安装与配置(ntp 包)</li><li>3.NTPd 优缺点对比</li></ul></li><li>二、Chrony<ul class="second_class_ul"><li>1.原理</li><li>2.安装与配置 (<code>chrony</code> 包)</li><li>3. 优点</li><li>4. 缺点</li></ul></li><li>三、systemd-timesyncd<ul class="second_class_ul"><li>1.原理</li><li>2.安装与配置 (systemd 自带)</li><li>3. 优点</li><li>4. 缺点</li></ul></li><li>四、手动同步工具<ul class="second_class_ul"><li>1.ntpdate`(已废弃,不推荐)</li><li>2. date 命令</li></ul></li><li>五、关键操作与注意事项<ul class="second_class_ul"><li>1. 防火墙</li><li>2. 硬件时钟 (RTC) 同步</li><li>3. 时区设置</li><li>4. 服务选择建议</li></ul></li><li>总结<ul class="second_class_ul"></ul></li></ul></div><p class="maodian"></p><h2>前言</h2><p>在 CentOS 7 中,保持系统时间准确至关重要,尤其对于集群、数据库、日志记录等场景。主要的时间同步方式和工具有 ntpd (NTP daemon)、chronyd (Chrony daemon) 和 systemd-timesyncd</p>
<p class="maodian"></p><h2>一、NTP (Network Time Protocol) & ntpd</h2>
<p class="maodian"></p><p class="maodian"></p><p class="maodian"></p><h3>1.原理</h3>
<div class="dxycode"><pre class="brush:plain;">* 使用 NTP 协议 (UDP 端口 123)
* 客户端 (ntpd) 与一个或多个 NTP 服务器通信
* 通过交换带有时间戳的数据包,计算网络延迟 (delay) 和时间偏差 (offset)
* 采用复杂算法(如 Marzullo 算法、时钟筛选、组合)过滤噪声,选择最可靠的服务器
* 通过 渐进式调整 系统时钟(slew)来纠正偏差(每秒最多调整几毫秒),避免时间跳变,对依赖连续时间的应用友好。只有在启动时偏差过大 (>128ms 或 panic 阈值) 才会进行阶跃调整 (step)。
* 维护一个持续的频率漂移校正模型,即使暂时断网也能保持一定精度
</pre></div>
<p class="maodian"></p><h3>2. 安装与配置(ntp 包)</h3>
<div class="dxycode"><pre class="brush:plain;"># 安装
sudo yum install ntp
# 主配置文件:/etc/ntp.conf
# 编辑配置文件,指定 NTP 服务器池或服务器
sudo vim /etc/ntp.conf
</pre></div>
<p style="text-align:center"><img alt="2. 安装与配置(ntp 包)" src="https://zhuji.jb51.net/uploads/allimg/20251108/1-25110P94Z9607.png" /></p>
<p>示例配置片段</p>
<div class="dxycode"><pre class="brush:plain;"># 使用 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
</pre></div>
<p><code>iburst</code>: 初始启动时发送 8 个数据包加速同步 <code>restrict ... nomodify notrap</code>: 允许指定网络查询时间但不允许修改配置或设置陷阱</p>
<div class="dxycode"><pre class="brush:plain;"># 启动服务并设置开机自启
sudo systemctl start ntpd
sudo systemctl enable ntpd
# 查看同步状态
ntpq -pn
</pre></div>
<p style="text-align: center;"><img alt="2. 安装与配置(ntp 包)_图2" src="https://zhuji.jb51.net/uploads/allimg/20251108/1-25110P94ZbO.png" /><br /><img alt="2. 安装与配置(ntp 包)_图3" src="https://zhuji.jb51.net/uploads/allimg/20251108/1-25110P94ZaU.png" /></p>
<p><code>ntpq -pn</code> 输出解释:</p>
<div class="dxycode"><pre class="brush:plain;"> remote refid st t when poll reach delay offsetjitter
==============================================================================
-162.159.200.1 10.107.8.118 3 u 28 64 3359.100-70.09638.033
+95.111.202.5 106.10.186.200 3 u 28 64 3165.314 0.27852.889
*202.118.1.81 202.118.1.46 2 u 27 64 3 51.261 2.78310.046
+185.209.85.222130.173.91.58 2 u 25 64 3247.237-21.91512.004
</pre></div>
<p><code>*</code> 表示当前优选的时间源 <code>remote</code>: NTP 服务器 IP <code>offset</code>: 本地时间与服务器时间的偏差 (ms)。负数表示本地时间慢 <code>delay</code>: 网络延迟 (ms) <code>jitter</code>: 偏移量的平均偏差 (ms)</p>
<p class="maodian"></p><h3>3.NTPd 优缺点对比</h3>
<p><strong>类别</strong><strong>优点</strong><strong>缺点</strong></p>
<table><tbody><tr></tr></tbody><tbody><tr><td><strong>历史与稳定</strong></td><td>历史悠久,稳定可靠,算法成熟</td><td>启动和收敛速度相对较慢(尤其初始同步)</td></tr><tr><td><strong>时间调整</strong></td><td>渐进调整(<code>slew</code>)避免时间跳变,适合数据库、交易系统</td><td>对间歇性网络连接或高延迟网络适应性不如 <code>chrony</code></td></tr><tr><td><strong>断网表现</strong></td><td>频率漂移模型在断网时维持精度</td><td>资源消耗略高于 <code>chrony</code></td></tr><tr><td><strong>工具支持</strong></td><td>强大的日志和监控工具(<code>ntpq</code>,<code>ntpstat</code>)</td><td>默认配置下处理大时间偏差(>1000s)需要手动干预(<code>ntpd -gq</code>)</td></tr></tbody></table>
<p class="maodian"></p><h2>二、Chrony</h2>
<p class="maodian"></p><p class="maodian"></p><p class="maodian"></p><h3>1.原理</h3>
<div class="dxycode"><pre class="brush:plain;">* CentOS 7 的默认时间同步工具(chronyd服务)
* 兼容 NTP 协议,但算法更先进
* 能更快适应网络不稳定、间歇性连接(如笔记本、移动设备)
* 在启动时或时间偏差较大时,能更快地大幅纠正时间 (step) 或快速调整 (slew)
* 更精确地处理时钟频率漂移,尤其适合虚拟化环境(因虚拟化时钟常不稳定)
* 支持 NTP 和 PTP (需硬件支持) 时间源
* 提供 chronyc 命令行工具进行实时监控和控制
</pre></div>
<p class="maodian"></p><h3>2.安装与配置 (<code>chrony</code> 包)</h3>
<div class="dxycode"><pre class="brush:plain;"># 安装 (通常默认已安装)
sudo yum install chrony
# 主配置文件:/etc/chrony.conf
# 编辑配置文件
sudo vim /etc/chrony.conf
</pre></div>
<p style="text-align:center"><img alt="2.安装与配置 (chrony 包)" src="https://zhuji.jb51.net/uploads/allimg/20251108/1-25110P94Z9403.png" /></p>
<p>示例配置片段</p>
<div class="dxycode"><pre class="brush:plain;"># 使用阿里云公共 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
</pre></div>
<p><code>iburst</code>: 同 <code>ntpd</code>,加速初始同步 <code>rtcsync</code>: 定期将系统时间同步到硬件时钟 (RTC) <code>driftfile</code>: 存储计算出的时钟频率漂移值</p>
<div class="dxycode"><pre class="brush:plain;"># 启动服务并设置开机自启
sudo systemctl start chronyd
sudo systemctl enable chronyd
# 查看状态
chronyc tracking # 显示系统时间信息
chronyc sources -v # 查看时间源及其状态
</pre></div>
<p style="text-align: center;"><img alt="2.安装与配置 (chrony 包)_图2" src="https://zhuji.jb51.net/uploads/allimg/20251108/1-25110P94Zc93.png" /><br /><img alt="2.安装与配置 (chrony 包)_图3" src="https://zhuji.jb51.net/uploads/allimg/20251108/1-25110P94Z9C8.png" /></p>
<p><code>chronyc sources -v</code> 输出解释:</p>
<div class="dxycode"><pre class="brush:plain;">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
</pre></div>
<p><code>^*</code>: 当前最优时间源。 <code>Stratum</code>: 时间源的层级 (数字越小越接近原子钟)。 <code>Last sample</code>: <code></code> 是本地时间与源时间的偏差。</p>
<p class="maodian"></p><p class="maodian"></p><h3>3. 优点</h3>
<p><strong>启动快、收敛快</strong>,特别适合不稳定的网络环境 处理大时间偏差能力强,自动执行阶跃或快速调整 在<strong>虚拟机和动态网络</strong>中表现更优 资源占用低 配置灵活,支持 <code>NTP</code> 和 <code>PTP</code><code>chronyc</code> 提供强大实时控制能力</p>
<p class="maodian"></p><p class="maodian"></p><h3>4. 缺点</h3>
<p>相比 <code>ntpd</code>,在某些极端稳定网络下长期稳定性可能略逊(但差距极小) 历史不如 <code>ntpd</code> 悠久(但已是主流且默认选择)</p>
<p class="maodian"></p><h2>三、systemd-timesyncd</h2>
<p class="maodian"></p><p class="maodian"></p><p class="maodian"></p><h3>1.原理</h3>
<div class="dxycode"><pre class="brush:plain;">* systemd 生态提供的轻量级 SNTP (Simple NTP) 客户端
* 只实现 NTP 客户端的基本功能,不支持作为 NTP 服务器
* 使用 timedatectl 命令管理。
* 设计目标是提供基本的时间同步,适合桌面或不需要高精度/复杂配置的系统
* 同步间隔较长(通常几分钟一次)
</pre></div>
<p class="maodian"></p><h3>2.安装与配置 (systemd 自带)</h3>
<div class="dxycode"><pre class="brush:plain;"># 通常默认已安装并启用
# 主配置文件:/etc/systemd/timesyncd.conf
sudo vim /etc/systemd/timesyncd.conf
</pre></div>
<p>示例配置片段</p>
<div class="dxycode"><pre class="brush:plain;">
# 指定 NTP 服务器
NTP=ntp.aliyun.com time1.cloud.tencent.com
# FallbackNTP=0.centos.pool.ntp.org
</pre></div>
<div class="dxycode"><pre class="brush:plain;"># 重启服务
sudo systemctl restart systemd-timesyncd
# 查看状态
timedatectl status
</pre></div>
<p><code>timedatectl status</code> 输出中包含:</p>
<div class="dxycode"><pre class="brush:plain;">System clock synchronized: yes
NTP service: active
RTC in local TZ: no
</pre></div>
<p class="maodian"></p><p class="maodian"></p><h3>3. 优点</h3>
<p>极其轻量级,零额外依赖 集成于 <code>systemd</code>,管理统一 (<code>timedatectl</code>) 配置简单</p>
<p class="maodian"></p><p class="maodian"></p><h3>4. 缺点</h3>
<p><strong>功能简陋</strong>:仅作客户端,不支持服务器模式、复杂过滤、频率漂移补偿等 精度和鲁棒性低于 <code>ntpd</code> 和 <code>chronyd</code> 同步间隔长,不适合高精度场景 无法精细监控</p>
<p class="maodian"></p><h2>四、手动同步工具</h2>
<p class="maodian"></p><h3>1.ntpdate`(已废弃,不推荐)</h3>
<p>原理 一次性查询 NTP 服务器并立即阶跃 (<code>step</code>) 调整系统时间 操作</p>
<div class="dxycode"><pre class="brush:plain;"> sudo ntpdate ntp.aliyun.com
</pre></div>
<p>缺点: <strong>中断性</strong>:阶跃调整导致时间跳变,可能引发应用错误(日志混乱、交易失败) <strong>精度差</strong>:单次测量易受网络抖动影响 <strong>无持续补偿</strong>:执行后即结束 <strong>与 <code>ntpd</code>/<code>chronyd</code> 冲突</strong>:不能同时运行 <strong>强烈建议避免在生产环境使用</strong>。如需阶跃调整,优先使用:</p>
<div class="dxycode"><pre class="brush:plain;">sudo chronyc makestep # Chrony 手动阶跃
sudo ntpd -gq # ntpd 在启动前强制同步 (需先停止 ntpd 服务)
</pre></div>
<p class="maodian"></p><h3>2. date 命令</h3>
<p>原理 手动设置系统时间 操作</p>
<div class="dxycode"><pre class="brush:plain;">sudo date -s "2024-04-15 14:30:00"# 设置具体时间
sudo date +%T -s "14:30:00" # 仅设置时间 (保留日期)
</pre></div>
<p>缺点 完全手动,精度依赖操作者,无网络同步能力。仅用于临时调试或初始化</p>
<p class="maodian"></p><h2>五、关键操作与注意事项</h2>
<p class="maodian"></p><h3>1. 防火墙</h3>
<p>NTP 使用 <strong>UDP 123</strong> 端口 确保防火墙允许出站访问 NTP 服务器</p>
<div class="dxycode"><pre class="brush:plain;">sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
</pre></div>
<p class="maodian"></p><h3>2. 硬件时钟 (RTC) 同步</h3>
<p>系统时间 (<code>clock</code>) 在重启后从硬件时钟加载——确保两者一致</p>
<div class="dxycode"><pre class="brush:plain;"># 将当前系统时间写入硬件时钟
sudo hwclock --systohc
# 查看硬件时钟时间
sudo hwclock --show
</pre></div>
<p>在 <code>ntp.conf</code> (使用 <code>ntpd</code>) 或 <code>chrony.conf</code> (使用 <code>chronyd</code> 并设置 <code>rtcsync</code>) 中配置,服务会自动定期同步</p>
<p class="maodian"></p><h3>3. 时区设置</h3>
<p>时间同步解决的是 UTC 时间问题——显示时间需正确设置时区</p>
<div class="dxycode"><pre class="brush:plain;"># 列出可用时区
timedatectl list-timezones
# 设置时区 (如 Asia/Shanghai)
sudo timedatectl set-timezone Asia/Shanghai
# 检查
timedatectl
</pre></div>
<p class="maodian"></p><h3>4. 服务选择建议</h3>
<p><strong>绝大多数 CentOS 7 服务器:首选 <code>chronyd</code></strong> (默认且优秀) 需要非常传统或特定 NTP 功能/生态:考虑 <code>ntpd</code> 轻量级桌面/简单设备:<code>systemd-timesyncd</code> 足够</p>
<p class="maodian"></p><h2>总结</h2>
<p>1.对于 CentOS 7 服务器环境,<strong><code>chronyd</code> 是最佳、最推荐的时间同步解决方案</strong>,平衡了速度、精度、资源消耗和网络适应性<br />2.除非有特定兼容性要求,否则无需使用 <code>ntpd</code><br />3.<code>systemd-timesyncd</code> 仅适用于要求极低的场景<br />对比表</p>
<p>特性 <code>ntpd</code> (NTP) <code>chronyd</code> (Chrony) <code>systemd-timesyncd</code><code>ntpdate</code> (废弃)</p>
<table><tbody><tr></tr></tbody><tbody><tr><td align="left"><strong>定位</strong></td><td align="left">成熟稳定的 NTP 实现</td><td align="left">现代、快速、适应性强的默认工具</td><td align="left">轻量级 SNTP 客户端</td><td align="left">一次性时间设置工具</td></tr><tr><td align="left"><strong>启动/收敛速度</strong></td><td align="left">较慢</td><td align="left"><strong>极快</strong></td><td align="left">慢</td><td align="left">一次执行</td></tr><tr><td align="left"><strong>网络适应性</strong></td><td align="left">稳定网络好</td><td align="left"><strong>不稳定/动态网络极佳</strong></td><td align="left">一般</td><td align="left">依赖单次网络质量</td></tr><tr><td align="left"><strong>时间偏差处理</strong></td><td align="left">主要靠渐进 (<code>slew</code>),大偏差需手动</td><td align="left">自动阶跃或快速调整 (<code>slew/step</code>)</td><td align="left">阶跃调整</td><td align="left">强制阶跃调整</td></tr><tr><td align="left"><strong>精度</strong></td><td align="left">高</td><td align="left"><strong>高 (尤其虚拟化)</strong></td><td align="left">一般</td><td align="left">低 (单次测量)</td></tr><tr><td align="left"><strong>资源占用</strong></td><td align="left">中等</td><td align="left"><strong>低</strong></td><td align="left"><strong>极低</strong></td><td align="left">执行时占用</td></tr><tr><td align="left"><strong>作为 NTP 服务器</strong></td><td align="left"><strong>支持</strong></td><td align="left"><strong>支持</strong></td><td align="left"><strong>不支持</strong></td><td align="left"><strong>不支持</strong></td></tr><tr><td align="left"><strong>配置复杂度</strong></td><td align="left">中等</td><td align="left">中等</td><td align="left"><strong>简单</strong></td><td align="left">简单</td></tr><tr><td align="left"><strong>监控工具</strong></td><td align="left"><code>ntpq</code>, <code>ntpstat</code></td><td align="left"><code>chronyc</code></td><td align="left"><code>timedatectl</code></td><td align="left">无</td></tr><tr><td align="left"><strong>推荐场景</strong></td><td align="left">传统环境/特定需求</td><td align="left"><strong>默认选择/服务器/虚拟机</strong></td><td align="left">桌面/简单设备</td><td align="left"><strong>避免使用</strong></td></tr></tbody></table>
<p>以上就是CentOS7下同步时间的几种方式(NTP 、Chrony和systemd-timesyncd)的详细内容,更多相关资料请阅读琼殿技术社区其它文章!</p>
頁:
[1]