在服务器运维领域,确保系统时间的准确性是一项至关重要的基础任务,无论是日志审计、证书验证、分布式集群协同,还是确保应用程序按预期时间触发事件,都依赖于一个精确、统一的时钟,对于广泛使用的 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 iburst
allow
:如果你希望本台服务器也作为时间服务器,为局域网内的其他机器提供时间同步服务,需要取消注释并配置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
则是一个成熟、稳定但略显传统的解决方案。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复