在服务器运维领域,确保系统时间的准确性是一项至关重要的基础任务,无论是日志审计、证书验证、分布式集群协同,还是确保应用程序按预期时间触发事件,都依赖于一个精确、统一的时钟,对于广泛使用的 CentOS 系统而言,通过网络时间协议(NTP)来同步时间是标准做法,本文将详细介绍在 CentOS 系统中设置和管理网络时间的完整流程,涵盖现代及传统方法,并探讨相关的配置与排错技巧。

为什么需要网络时间同步?
一台独立运行的服务器,其内部硬件时钟(如主板上的 CMOS 电池供电时钟)会随着时间推移而产生漂移,每天可能产生数秒甚至更长时间的误差,在单机环境中,这种误差或许可以容忍,但在复杂的 IT 基础设施中,时间的不同步会引发一系列严重问题:
- 安全认证失败:许多安全协议,如 Kerberos,对时间戳非常敏感,客户端与服务器时间差过大会导致认证失败。
- 日志分析混乱:当分析来自多台服务器的日志以追踪问题时,时间不一致会使事件序列难以梳理,给故障排查带来巨大困难。
- 分布式系统异常:数据库集群、缓存系统、容器编排平台(如 Kubernetes)等都要求所有节点时间高度同步,否则可能出现数据不一致、任务调度错误等问题。
- 文件系统问题:NFS 等网络文件系统依赖于时间戳来判断文件的最新状态,时间不同步可能导致文件保存或更新异常。
通过 NTP 服务自动从权威的时间服务器同步时间,是保障服务器稳定可靠运行的基石。
现代方案:在 CentOS 7/8/Stream 中使用 chrony
从 CentOS 7 开始,chrony 取代了传统的 ntpd,成为默认的 NTP 客户端和服务端软件。chrony 的设计更适应现代环境,尤其是在虚拟机和不稳定网络连接下,表现出更快的同步速度和更高的精度。
安装 chrony
chrony 通常在系统安装时已默认安装,若未安装,可以通过 yum 或 dnf 命令轻松安装:
# 对于 CentOS 7 sudo yum install chrony # 对于 CentOS 8/Stream sudo dnf install chrony
配置 chrony
chrony 的主配置文件位于 /etc/chrony.conf,打开此文件,你会看到一些默认配置,通常已经足够作为客户端使用。
sudo vi /etc/chrony.conf
几个关键的配置项说明:
pool 2.centos.pool.ntp.org iburst:这是默认的时间源配置。pool指令会从指定的域名(这里是 CentOS 官方提供的 NTP 池)中解析出多个 NTP 服务器地址,chrony会自动选择其中最优的几个进行同步。iburst选项表示在启动时进行快速的前几个轮询,以尽快完成初始同步。server:如果你想指定特定的时间服务器,可以使用server指令,使用阿里云的公共 NTP 服务器:server ntp1.aliyun.com iburst server ntp2.aliyun.com iburstallow:如果你希望本台服务器也作为时间服务器,为局域网内的其他机器提供时间同步服务,需要取消注释并配置allow指令,后面跟上允许同步的网段。allow 192.168.1.0/24。
作为客户端,通常只需关注 pool 或 server 配置即可。
启动并启用服务
配置完成后,启动 chronyd 服务,并设置为开机自启:
sudo systemctl start chronyd sudo systemctl enable chronyd
验证与监控
检查 chronyd 服务的运行状态:
systemctl status chronyd
查看时间同步状态,这是最常用的命令:

chronyc sources -v
输出结果中,我们关注最左侧的字符:
^:表示这是一个服务器地址。- 表示当前正在同步的主时间源。
- 表示这是一个可用的候选时间源。
- 表示此服务器已被丢弃,不再使用。
还可以使用 chronyc tracking 命令查看更详细的同步信息,如最后的时间偏移量(Last offset)和系统时钟的估计误差(Root dispersion)。
chronyc tracking
传统方案:在 CentOS 6 中使用 ntpd
对于仍在使用的 CentOS 6 系统,标准的 NTP 服务是 ntpd,其配置流程与 chrony 类似,但命令和配置文件有所不同。
安装与配置
安装 ntp 软件包:
sudo yum install ntp
编辑配置文件 /etc/ntp.conf,主要配置是 server 行,指定上游时间服务器:
sudo vi /etc/ntp.conf
可以添加公共 NTP 池服务器:
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
启动与启用
使用 service 命令启动服务,并使用 chkconfig 设置为开机自启:
sudo service ntpd start sudo chkconfig ntpd on
验证与监控
使用 ntpq -p 命令查看与时间服务器的同步状态,其输出格式与 chronyc sources 类似,同样可以通过 号识别当前正在同步的源服务器。
时区设置
NTP 服务负责同步“时间”(时、分、秒),但不会改变“时区”,确保服务器时区设置正确同样重要。
在 CentOS 7/8 中,推荐使用 timedatectl 命令管理时区:

# 查看当前时间和时区 timedatectl status # 列出所有可用时区 timedatectl list-timezones # 设置时区(设置为上海时区) sudo timedatectl set-timezone Asia/Shanghai
在 CentOS 6 中,通常通过创建软链接来设置时区:
# 删除当前的 localtime 链接 sudo rm /etc/localtime # 创建指向上海时区文件的链接 sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
一次性手动同步
在某些紧急情况下,如果希望立即将时间校准,而无需等待 NTP 服务逐步调整,可以使用 ntpdate 命令。
sudo ntpdate pool.ntp.org
重要提示:在使用 ntpdate 之前,必须确保 ntpd 或 chronyd 服务已经停止,因为它们会同时管理系统时钟,导致冲突。ntpdate 更适用于一次性快速修正,或者在没有安装 NTP 服务的系统上,在现代系统中,chrony 本身支持在启动时快速同步,ntpdate 的使用场景已越来越少。
相关问答 FAQs
为什么服务器时间总是不准,即使我已经配置了 NTP 服务?
解答:这个问题通常由以下几个原因造成:
- 防火墙限制:NTP 服务使用 UDP 的 123 端口,请确保服务器的防火墙(如
firewalld或iptables)允许出站和入站的 UDP 123 端口通信。 - 配置错误:检查
/etc/chrony.conf或/etc/ntp.conf文件中的server或pool地址是否有效且可访问,可以尝试手动ping或dig这些域名。 - 时钟偏差过大:如果服务器的时间与标准时间相差太大(例如超过 1000 秒),
chrony或ntpd为了安全可能拒绝进行大幅度的“步进”调整,而是选择缓慢地“ slew”调整,这种情况下,可以先停止 NTP 服务,使用ntpdate命令进行一次性大幅校准,然后再重启 NTP 服务。 - 虚拟化环境:在虚拟机中,虚拟时钟容易出现漂移,确保 hypervisor(如 VMware ESXi, KVM)已安装并启用了时间同步工具,对于
chrony,可以添加rtcsync指令,它会定期将系统时间同步到硬件时钟,有助于减少漂移。
chrony 和 ntpd 我应该选择哪一个?它们有什么区别?
解答:对于 CentOS 7 及以上版本,强烈推荐使用默认的 chrony,对于 CentOS 6,则只能使用 ntpd,它们之间的主要区别可以归纳如下表:
| 特性 | chrony |
ntpd |
|---|---|---|
| 默认系统 | CentOS 7+, RHEL 7+, Ubuntu 16.04+, Debian 9+ | CentOS 6, RHEL 6, 及更旧的系统 |
| 同步速度 | 非常快,尤其适合间歇性网络或虚拟机 | 相对较慢,需要较长时间才能稳定同步 |
| 适应环境 | 对网络抖动、延迟变化和不稳定连接适应性极佳 | 对稳定、持续的网络连接表现最佳 |
| 大偏差处理 | 可以配置为快速步进调整或缓慢 slew 调整 | 默认拒绝大偏差调整,需要手动干预 |
| 配置与管理 | 配置更简洁,监控命令(chronyc)功能强大且易读 |
配置相对复杂,ntpq 监控信息专业但略显晦涩 |
| 资源占用 | 通常更轻量 | 资源占用相对稍高 |
chrony 是为现代计算环境(包括云计算和虚拟化)设计的,是当前的首选方案。ntpd 则是一个成熟、稳定但略显传统的解决方案。