Skip to content

3. 时间同步配置

本章节指导在 RHEL 8.10 系统(主机名 ZSLinux)上使用 chronyd 服务进行时间同步。chronyd 是 RHEL 8 默认的时间同步工具,稳定可靠,适用于企业级服务器与虚拟化环境。所有命令均在 ZSLinux 环境下测试通过,确保可复现性。

🧠 知识点:准确的系统时间对于日志分析、安全审计、证书验证及分布式系统通信至关重要。


3.1 前提条件

  • RHEL 8.10 已安装(参考第 1 章),主机名设置为 ZSLinux
  • 使用 SecureCRT 登录(SSH2 协议,端口 22)。
  • 使用 SecureFX 传输文件(SFTP 协议)。
  • 网络连接正常,可访问外部 NTP 服务器。

💡 提示:chronyd 默认随系统启动。若系统在内网运行,也可配置局域网时间源。


3.2 时间同步配置步骤

3.2.1 检查并启动 chronyd 服务

🛠️ 操作步骤

  1. 检查服务状态:

    bash
    systemctl status chronyd  # 检查 chronyd 服务状态
  2. 启用并启动服务:

    bash
    systemctl enable --now chronyd  # 启用并立即启动 chronyd 服务

检查点:输出中应显示 active (running) 状态。

⚠️ 注意:若服务启动失败,可能是网络未连通或配置文件语法错误。


3.2.2 配置 NTP 时间服务器

🧠 知识点:chronyd 使用 /etc/chrony.conf 文件定义时间源服务器,通过 iburst 参数实现快速同步。

  1. 编辑配置文件:

    bash
    vi /etc/chrony.conf  # 编辑 chronyd 配置文件
  2. 添加或修改时间服务器:

    bash
    server time.cloudflare.com iburst  # Cloudflare 时间服务器
    server ntp.aliyun.com iburst       # 阿里云时间服务器
  3. 应用配置:

    bash
    systemctl restart chronyd  # 重启服务以应用配置

💡 提示:可根据地理位置选择延迟更低的 NTP 源,例如腾讯云或国家授时中心。

检查点:确认 /etc/chrony.conf 中至少包含一个可访问的 NTP 服务器地址。

⚠️ 注意:若系统在离线环境中,应搭建内网 NTP 服务器作为同步源。


3.2.3 设置系统时区

🧠 知识点:RHEL 使用 timedatectl 工具统一管理时区与时间同步配置。

  • 设置为上海时区:

    bash
    timedatectl set-timezone Asia/Shanghai  # 设置系统时区为上海
  • 验证当前时区:

    bash
    timedatectl  # 检查时区与同步状态

💡 提示:若服务器部署在全球不同地区,可使用 timedatectl list-timezones | grep Asia 查询可用时区。

检查点:输出中应包含 Time zone: Asia/Shanghai


3.3 验证时间同步状态

🛠️ 操作步骤:执行以下命令验证系统同步状态:

bash
chronyc tracking      # 查看同步状态(偏移量、延迟、精度等)
chronyc sources -v    # 显示 NTP 源详细信息

timedatectl           # 查看系统时间、时区及 NTP 状态

🧩 示例

Leap status     : Normal
System time     : 0.000034021 seconds fast of NTP time
NTP enabled     : yes
Time zone       : Asia/Shanghai (CST, +0800)

⚠️ 注意:若显示 NTP service: inactive,请重新启动 chronyd 并确认防火墙放行 UDP 123 端口。

检查点timedatectl 输出中应显示 NTP synchronized: yes


3.4 硬件时钟同步与配置

🧠 知识点:Linux 系统时间分为两种:

  • 系统时间(System Clock):操作系统运行期间维护的时间;
  • 硬件时钟(Hardware Clock / RTC):主板电池供电的独立计时模块。

3.4.1 查看硬件时钟时间

bash
hwclock --show  # 查看当前硬件时钟时间

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

💡 提示:系统时间通常由 NTP 校准后更为准确,建议定期写入硬件时钟以保持一致。

bash
hwclock --systohc  # 将系统时间同步到硬件时钟

3.4.3 将硬件时钟时间加载到系统

⚠️ 注意:若系统未联网或未启用 NTP,可通过此方式使用硬件时间。

bash
hwclock --hctosys  # 将硬件时钟时间写入系统时间

检查点:执行 hwclock --showdate 命令时,两者时间应基本一致。

⚠️ 注意:若硬件时钟长期不准确,系统启动后即使 NTP 同步,也可能造成:

  • 日志时间错乱,影响事件追溯;
  • SSL/TLS 证书验证失败;
  • 计划任务(crontab)执行异常;
  • 分布式系统(如数据库集群)时序紊乱。

💡 建议:在关键服务器上定期执行 hwclock --systohc,确保 RTC 时钟长期准确。


3.5 常见问题与排查

🔍 故障排查

  • 问题 1: 同步失败
    解决方法: 检查网络连接是否可达:

    bash
    ping -c 4 time.cloudflare.com

    若无法访问,确认防火墙或代理策略允许 UDP 123 通信。

  • 问题 2: 服务未运行
    解决方法: 重新启动并设为开机自启:

    bash
    systemctl enable --now chronyd
  • 问题 3: 同步时间不准
    解决方法: 调整 NTP 源顺序或清理缓存:

    bash
    chronyc makestep

💡 提示chronyc sources -v 可查看各 NTP 源的延迟与偏移量,方便判断最优服务器。


3.6 实践任务

  1. 使用 SecureCRT 登录 ZSLinux,执行 systemctl status chronyd 确认服务状态。
  2. 编辑 /etc/chrony.conf,添加 time.cloudflare.comntp.aliyun.com
  3. 执行 systemctl restart chronyd 应用更改。
  4. 使用 timedatectl 设置时区为 Asia/Shanghai
  5. 使用 hwclock --systohc 将系统时间写入硬件时钟。
  6. 验证同步状态,确保 NTP synchronized: yes

检查点:完成所有操作后,系统时间与硬件时钟应保持一致,且 chronyc tracking 偏移量低于 0.1 秒。


3.7 自测问题

  • 问题 1:如何查看当前 NTP 同步状态?
    答案:使用 chronyc trackingchronyc sources -vtimedatectl

  • 问题 2:如何修改系统时区为上海?
    答案:执行 timedatectl set-timezone Asia/Shanghai

  • 问题 3:chronyd 无法同步的常见原因有哪些?
    答案:网络不通、防火墙阻断 UDP 123、NTP 源配置错误。

  • 问题 4:如何确保硬件时钟与系统时间一致?
    答案:执行 hwclock --systohc,将系统时间写入硬件时钟。


🧾 总结: 本章介绍了使用 chronyd 配置与验证时间同步的完整流程,涵盖服务启动、NTP 源配置、时区设置、硬件时钟同步与验证方法。掌握这些操作可确保系统日志一致性、安全认证准确性及集群事件的时序正确,为企业级系统稳定运行奠定基础。

采用 CC BY-NC-ND 4.0 许可。欢迎邮件反馈(zslinux@qq.com)