凌峰创科服务平台

Linux服务器如何同步时间?

在Linux服务器管理中,时间同步是确保系统日志、任务调度、安全认证等核心功能正常运行的基础,由于服务器硬件时钟(CMOS时钟)可能存在偏差,或因网络延迟导致时间不同步,未及时校准的时间可能引发数据一致性、权限验证失败等问题,本文将详细介绍Linux服务器时间同步的原理、常用工具、配置方法及最佳实践,帮助管理员构建稳定可靠的时间同步机制。

Linux时间同步的基本原理

Linux系统的时间管理涉及两个核心时钟:硬件时钟(RTC,Real-Time Clock)和系统时钟(System Clock),硬件时钟由主板电池供电,在系统关机时仍运行;系统时钟是内核维护的软件时钟,开机时从硬件时钟读取时间,运行中会根据CPU tick进行动态调整,时间同步的本质是通过网络协议获取标准时间源,并校准系统时钟与硬件时钟,确保两者一致。

网络时间同步主要基于NTP(Network Time Protocol)协议,该协议通过客户端与时间服务器交互,计算往返时间(RTT)和时钟偏移量,采用层次化架构(Stratum)确保时间源的权威性,Stratum 0为原子钟、GPS等物理时间源,Stratum 1直接连接Stratum 0,Stratum 2及以下通过上级NTP服务器同步,形成树状层级结构,Linux服务器通常作为Stratum 2或客户端,从公共NTP服务器(如pool.ntp.org)或内部NTP服务器同步时间。

常用时间同步工具及对比

Linux环境下,时间同步工具可分为传统NTP工具和现代Chrony工具,两者在功能、性能和适用场景上存在差异,具体对比如下:

工具名称 核心协议 适用场景 优势 劣势
ntpd NTPv4 传统服务器、长期稳定运行环境 成熟稳定,支持平滑时间调整,可自举(无外部时间源时仍能同步) 同步速度较慢,对网络延迟敏感,配置复杂
chronyd NTPv4 动态网络环境(如虚拟机、云服务器)、高精度需求场景 快速同步(秒级),支持间歇性网络连接,低资源占用,支持硬件时间戳 功能相对简单,部分高级NTP特性不支持

对于大多数生产环境,Chrony因其在动态网络环境下的高性能表现,已成为推荐工具;而ntpd仍适用于对时间平滑性要求极高的传统物理服务器。

使用Chrony配置时间同步

安装与启动

以CentOS/RHEL系统为例,通过包管理器安装Chrony:

sudo yum install chrony -y

安装后启动服务并设置开机自启:

sudo systemctl start chronyd
sudo systemctl enable chronyd

配置时间服务器

编辑/etc/chrony.conf文件,配置上游NTP服务器,使用公共NTP服务器池:

pool pool.ntp.org iburst
server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst

参数说明:

  • iburst:首次同步时发送多个包以加速同步;
  • pool:定义一组NTP服务器,Chrony自动选择最优节点;
  • 若为内部服务器,可指定server 192.168.1.100 preferprefer标记优先使用该服务器)。

防火墙配置

确保NTP端口(UDP 123)开放:

sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload

验证同步状态

使用chronyc tracking查看同步状态:

Reference ID    : C0A80164 (192.168.1.100)
Stratum         : 3
Ref time (UTC)  : 2025-10-01T12:00:00.000
System time     : 2025-10-01T12:00:05.123 +/- 0.001 sec
Last offset     : +0.123 sec
RMS offset      : 0.001 sec
Frequency       : 10.000 ppm slow

关键指标说明:

  • Stratum:层级值,小于等于3表示同步正常;
  • Last offset:与时间源的偏差,应小于1秒;
  • Frequency:时钟频率偏差,单位ppm(百万分之一)。

手动同步与硬件时钟更新

若需立即同步时间:

sudo chronyc makestep

将系统时间写入硬件时钟:

sudo hwclock --systohc

使用ntpd配置时间同步

若仍需使用ntpd,安装后编辑/etc/ntp.conf

server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1

启动服务并检查状态:

sudo systemctl start ntpd
sudo ntpq -p

输出中reach列应为377(二进制11111111),表示与服务器正常通信。

最佳实践与注意事项

  1. 选择合适的时间源:公共NTP服务器适用于测试环境,生产环境建议使用内部NTP服务器或授时服务(如GPS、北斗)。
  2. 避免频繁调整时间:Chrony的makestep和ntpd的tinker step需谨慎使用,频繁跳变可能影响依赖时间的应用。
  3. 虚拟机环境优化:虚拟机时钟易受主机影响,建议开启KVM的hypervclock或VMware的toolsync功能,并使用Chrony。
  4. 监控与告警:通过Zabbix、Prometheus等工具监控chronyc trackingoffset,当偏差超过阈值(如1秒)时触发告警。
  5. 时区设置:确保系统时区正确(timedatectl set-timezone Asia/Shanghai),避免因时区问题导致日志时间错误。

相关问答FAQs

Q1: 服务器时间同步失败,如何排查?
A: 首先检查网络连通性(ping NTP服务器IP),确认防火墙是否放行UDP 123端口;其次查看Chrony/ntpd日志(journalctl -u chronyd/var/log/ntp.log),检查是否有“no server suitable”等错误;最后使用chronyc sources查看可用时间源,若Stratum值过大(如>16),说明未同步成功,需检查上游服务器状态或更换时间源。

Q2: 如何让Linux服务器作为NTP服务器为其他设备提供时间同步?
A: 在Chrony配置文件中添加允许同步的客户端IP段,

allow 192.168.1.0/24

重启服务后,客户端即可配置该服务器为NTP源,若使用ntpd,需在/etc/ntp.conf中添加:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

同时确保server行指向自身或上游服务器(server 127.127.1.0),并在/etc/chrony.conf/etc/ntp.conf中启用本地时间源(local stratum 10)。

分享:
扫描分享到社交APP
上一篇
下一篇