在生产环境中,时间准确性至关重要。无论是应用日志、数据库事务还是分布式系统的协调,都依赖于统一的时间。如果服务器时间漂移,可能导致:

  • 日志顺序错乱,难以排查问题
  • 数据库事务冲突或报错
  • 分布式系统节点间出现不一致

因此,配置 自动时间同步 是运维的基础工作之一。本文将详细介绍如何在 Linux 服务器上使用 Chrony 来实现高精度的时间同步。


一、为什么选择 Chrony

Chrony 是 NTP 的现代替代方案,具有以下优势:

  • 启动快:能在系统启动后迅速校准时间
  • 精度高:适合虚拟机和容器环境
  • 稳定性强:能处理网络延迟和抖动
  • 配置简单:支持多源冗余,自动选择最佳时间源

二、安装 Chrony

在 CentOS/RHEL 系统中:

sudo yum install chrony -y
sudo systemctl enable chronyd --now

在 Ubuntu/Debian 系统中:

sudo apt install chrony -y
sudo systemctl enable chrony --now

三、配置国内 NTP 源

编辑配置文件 /etc/chrony.conf,添加国内常用的公共 NTP 服务器:

# 国家授时中心
server ntp.ntsc.ac.cn iburst

# 阿里云
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst

# 腾讯云
server time1.cloud.tencent.com iburst
server time2.cloud.tencent.com iburst

# 教育网(可选)
server s1b.time.edu.cn iburst
server ntp.sjtu.edu.cn iburst

# 保留默认配置作为备用
pool 2.centos.pool.ntp.org iburst

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

修改完成后,重启服务:

sudo systemctl restart chronyd

四、验证同步状态

  1. 查看系统时间状态:

    timedatectl status
    

    输出中应看到:

    System clock synchronized: yes
    NTP service: active
    
  2. 查看 Chrony 同步详情:

    chronyc tracking
    

    关键指标:

    • System time:偏差应在毫秒或微秒级
    • Leap status:应为 Normal
  3. 查看时间源:

    chronyc sources -v
    

    输出中 ^* 表示当前正在使用的最佳源,^+ 表示备用源。


五、同步硬件时钟 (RTC)

避免重启后时间漂移:

sudo hwclock --systohc

六、应用层时区统一

确保数据库和应用层时间一致:

  • MySQL:
    SHOW VARIABLES LIKE '%time_zone%';
    SET GLOBAL time_zone = '+8:00';
    
  • PHP (php.ini):
    date.timezone = Asia/Shanghai
    

七、最佳实践

  • 配置 至少 3~5 个国内源,保证冗余。
  • 保留一个国际源作为备用。
  • 所有服务器统一时区 Asia/Shanghai。
  • 定期巡检:
    chronyc tracking
    timedatectl status
    

八、总结

通过以上配置,你的 Linux 服务器就能实现 自动时间同步,误差维持在微秒到毫秒级别。这样不仅能保证日志和数据库的一致性,还能为分布式系统提供稳定的时间基准。

更多推荐