使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何排查 Amazon EC2 Linux 服务器上的 NTP 同步问题?

3 分钟阅读
0

我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上的日期或时间不准确或与网络时间协议 (NTP) 参考服务器不同步。我想对这个问题进行故障排查。

解决方法

要排查 NTP 同步问题,请首先检查 Linux 服务器使用的 NTP 服务器。然后,配置 NTP 同步,并检查与 NTP 服务器的连接。

要确认实例已同步到 NTP 服务器,请运行以下命令来检查时间:

timedatectl

检查 NTP 服务器

在 Amazon Linux 服务器上,使用 chrony 或 NTP 进程守护程序 (ntpd) 与 NTP 服务器同步。有关 NTP 服务器配置的更多信息,请参阅 Configuring NTP using the chrony suite 或参阅 Red Hat Linux Enterprise (RHEL) 网站上的 Configuring NTP using ntpd

**注意:**最佳做法是使用 chrony 进行时间同步,因为 chrony 比 ntpd 更快、更精确地同步系统时钟。有关更多信息,请参阅 RHEL 网站上的 differences between chrony and ntpd

要检查实例是否配置为使用 chrony 或 ntpd 进程守护程序,请运行以下命令:

chrony:

sudo systemctl status chronyd
chronyc tracking

ntpd:

sudo systemctl status ntpd
ntpstat

要删除 ntpd 并在 Amazon Linux 2 或 Amazon Linux 2023 实例上安装 chrony,请运行以下命令:

sudo yum erase ntp*
sudo yum install chrony

要启动和激活 chrony,请运行以下命令:

sudo systemctl start chronyd
sudo systemctl enable chronyd

配置 NTP 源

检查已配置 NTP 服务器列表的配置文件。配置文件的默认位置:对于chrony,为 /etc/chrony.conf;对于 ntpd,/etc/ntp.conf

Amazon Linux 2

将 chrony 配置为使用 /etc/chrony.d/ 目录(而非 /etc/chrony.conf 主文件)中的源。

Amazon Linux 2023

将 chrony 配置为使用 /run/chrony.d/etc/chrony.d/ 目录(而非主 /etc/chrony.conf 主文件)中的源。

查看 /etc/chrony.conf 配置文件以了解源目录的位置(sourcedir),或者查看 /etc/chrony.d/ 中的 README 文件。

在其中一个源目录中创建自己的 chrony 源文件,例如 /etc/chrony.d/your-source-file.sources

记下源的配置位置。然后,检查使用的服务器或池是否正确。

可以将 NTP 同步配置为本地 Amazon Time Sync Service公共 Amazon Time Sync Service。最佳做法是在实例上使用本地 Amazon Time Sync Service。将公共 Amazon Time Sync Service 作为备份,或将其用于 Amazon Virtual Private Cloud (Amazon VPC) 之外的设备。还可以将 NTP 同步配置为与组织内部 NTP 服务器同步。

配置 chrony 并创建源文件后,重新启动该服务。然后,在 Amazon Linux 2 或 Amazon Linux 2023 上运行以下命令以验证实例是否正在运行:

chrony:

sudo systemctl restart chronyd.service
sudo systemctl status chronyd.service

ntpd:

sudo systemctl restart ntpd.service
sudo systemctl status ntpd.service

将 NTP 同步配置到本地 Amazon Time Sync Service

使用 VPC 中的本地 IPv4 链接地址 169.254.169.123 访问 Amazon Time Sync Service

要将 Amazon Time Sync Service 链接本地 IP 地址添加为 NTP 源,请打开指定 NTP 源的配置文件。例如,打开 chrony 的 /etc/chrony.conf 文件。然后,添加以下行:

server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

如果使用的 IPv6 本地地址可以访问在 AWS Nitro System 上构建的实例 ,请将以下行添加到配置文件中:

server fd00:ec2::123 prefer iburst minpoll 4 maxpoll 4

要让更改生效,运行以下命令重新启动 chrony:

sudo systemctl restart chronyd.service

要重新启动 ntpd,请运行以下命令:

sudo systemctl restart ntpd.service

**注意:**最佳做法是分别使用 IPv4 和 IPv6 端点条目。IPv4 和 IPv6 NTP 数据包来自实例的同一个本地服务器。如果同时配置 IPv4 和 IPv6 端点,则不会改善实例的时间准确性。

将 NTP 同步配置为公共 Amazon Time Sync Service

Linux 实例或外部互联网连接设备可以使用公共端点 time.aws.com 来访问 Amazon Time Sync Service。

要将 Amazon Time Sync Service 公共端点添加为 NTP 源,请打开源所在的 ntpd 或 chrony 配置文件。然后,运行以下命令:

pool time.aws.com iburst

要让更改生效,运行以下命令重新启动 chrony:

sudo systemctl restart chronyd.service

要重新启动 ntpd,请运行以下命令:

sudo systemctl restart ntpd.service

将 NTP 同步配置到组织内部 NTP 服务器

可以使用组织内部的 NTP 服务器。或者,可以使用能通过公共互联网访问的 NTP 服务器。

**注意:**最佳做法是仅使用可信任的 NTP 服务器。

要添加自己的 NTP 源,请打开源文件所在的 ntpd 或 chrony 配置文件。然后,添加以下行:

server internal-ntp-server-hostname-or-ip-address

**注意:**将 internal-ntp-server-hostname-or-ip-address 替换为 NTP 服务器主机名或 IP 地址。

确保 Linux 实例可以通过网络访问新 NTP 服务器的 IP 地址和端口。

默认情况下,Chrony 会通过本地链接和远程端点将 Amazon Time Sync 时间用作源。

Amazon Linux 2023

要覆盖 Amazon Linux 2023 中的默认配置,请完成以下步骤:

  1. 修改 /etc/sysconfig/chronyd 文件,加入 USE_AMAZON_NTP_POOL="no"

  2. 运行以下命令重启 chrony:

    sudo systemctl restart chrony.service

    要重新启动 ntpd,请运行以下命令:

    sudo systemctl restart ntpd.service

Amazon Linux 2

要覆盖 Amazon Linux 2 中的默认配置,请完成以下步骤:

  1. 修改 /etc/chrony.d/link-local.sources 文件。在行首添加一个 # 以注释掉 Amazon Time Sync Service 的条目:

     #server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
  2. 运行以下命令来重启 chrony:

     sudo systemctl restart chronyd.service

    要重新启动 ntpd,请运行以下命令:

    sudo systemctl restart ntpd.service

注意:****/etc/chrony.d/README 文件会提供有关覆盖默认配置的其他方法的信息。

确认实例已同步到正确的时间

要验证实例是否同步到正确的时间,请运行以下命令:

chrony:

chronyc tracking
timedatectl

ntpd:

ntpstat
timedatectl

要列出所有已配置源,请运行以下命令:

chrony:

chronyc sources -v

ntpd:

ntpq -p

其他排查措施

如果仍然遇到 NTP 同步问题,请采取以下措施:

  • 检查 ntpd 或 chrony 日志文件中是否有可以帮助您确定问题的错误消息或警告。
  • 如果系统上的时间与 NTP 服务器时间不同,请手动设置系统时间以匹配 NTP 服务器时间。可以使用诸如 timedatectl 之类的工具。
  • 确保 Linux 服务器可以解析 NTP 服务器的主机名。
  • 确保操作系统 (OS) 防火墙、安全组、网络访问控制列表或路由表不会阻止外部 NTP 服务器。该实例需要流向 UDP 端口 123 的出站流量。对于无状态防火墙和网络 ACL,请确保允许通过临时端口 1024 到 65535 返回流量。
  • 如果在 VPC 中使用自定义 DHCP 选项集,请确保正确配置 NTP 服务器地址。

相关信息

在 EC2 实例上精确同步时钟和时间

AWS 官方
AWS 官方已更新 2 个月前