在 EC2 实例上设置时间参考,以使用本地 Amazon Time Sync Service - Amazon Elastic Compute Cloud

在 EC2 实例上设置时间参考,以使用本地 Amazon Time Sync Service

本地 Amazon Time Sync Service 使用网络时间协议(NTP),或者在支持的实例上提供本地精确时间协议(PTP)硬件时钟。PTP 硬件时钟支持 NTP 连接(Linux 和 Windows 实例)或者直接 PTP 连接(仅限 Linux 实例)。NTP 连接和直接 PTP 连接使用相同的高精度时间源,但直接 PTP 连接比 NTP 连接更准确。与 Amazon Time Sync Service 的 NTP 连接支持闰秒涂抹,而与 PTP 硬件时钟的 PTP 连接不涂抹时间。有关更多信息,请参阅 闰秒

您的实例可以访问本地 Amazon Time Sync Service,如下所示:

  • 通过 NTP 在以下 IP 地址端点进行访问:

  • (仅限 Linux)通过直接 PTP 连接连接到本地 PTP 硬件时钟进行访问:

    • PHC0

Amazon Linux AMI、Windows AMI 和大多数合作伙伴 AMI 都将您的实例配置为默认使用 NTP IPv4 端点。这是大多数客户工作负载的建议设置。除非您希望使用 IPv6 端点或直接连接到 PTP 硬件时钟,否则从这些 AMI 启动的实例无需进行进一步配置。

NTP 连接和 PTP 连接不需要更改任何 VPC 配置,您的实例也不需要访问互联网。

注意

只有 Linux 实例可以使用直接 PTP 连接来连接到本地 PTP 硬件时钟。Windows 实例使用 NTP 连接到本地 PTP 硬件时钟。

连接到 Amazon Time Sync Service 的 IPv4 端点

本节介绍如何配置实例以通过 IPv4 端点使用本地 Amazon Time Sync Service。

请使用适用于您实例操作系统的说明。

默认情况下,AL2023 以及最新版本的 Amazon Linux 2 和 Amazon Linux AMI 配置为使用 Amazon Time Sync Service IPv4 端点。从这些 AMI 启动的实例无需进一步配置,您可以跳过以下过程。

如果您使用的 AMI 默认情况下未配置 Amazon Time Sync Service,请参照以下过程之一使用 chrony 客户端在实例上配置 Amazon Time Sync Service。需要向 chrony 配置文件添加 Amazon Time Sync Service 的服务器条目。

请使用适用于您实例操作系统的说明。

Amazon Linux
使用 chrony 连接到 Amazon Linux 上的 Amazon Time Sync Service 的 IPv4 端点
  1. 连接到您的实例并卸载 NTP 服务。

    [ec2-user ~]$ sudo yum erase 'ntp*'
  2. 安装 chrony 软件包。

    [ec2-user ~]$ sudo yum install chrony
  3. 使用任何文本编辑器(如 nanovim)打开 /etc/chrony.conf 文件。确认该文件包含以下行:

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

    如果该行存在,则已配置 Amazon Time Sync Service 为使用 Amazon Time Sync Service 的 IPv4 端点,您可以转到下一步。如果不存在,请在该文件中已包含的任何其他 serverpool 语句后面添加该行,然后保存您的更改。

  4. 重启 chrony 守护程序 (chronyd)。

    [ec2-user ~]$ sudo service chronyd restart
    Starting chronyd: [ OK ]
    注意

    在 RHEL 和 CentOS (最高版本为 6) 上,服务名称是 chrony 而不是 chronyd

  5. 要配置 chronyd 为在每次系统启动时启动,请使用 chkconfig 命令。

    [ec2-user ~]$ sudo chkconfig chronyd on
  6. 确认 chrony 使用 169.254.169.123 IPv4 端点来同步时间。

    [ec2-user ~]$ chronyc sources -v
    210 Number of sources = 7 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 169.254.169.123 3 6 17 43 -30us[ -226us] +/- 287us ^- ec2-12-34-231-12.eu-west> 2 6 17 43 -388us[ -388us] +/- 11ms ^- tshirt.heanet.ie 1 6 17 44 +178us[ +25us] +/- 1959us ^? tbag.heanet.ie 0 6 0 - +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:c43:e312:ce77:> 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:dab:2701:b70:b> 0 6 0 - +0ns[ +0ns] +/- 0ns

    在返回的输出中,^* 指示首选的时间源。

  7. 验证 chrony 报告的时间同步指标。

    [ec2-user ~]$ chronyc tracking
    Reference ID : A9FEA97B (169.254.169.123) Stratum : 4 Ref time (UTC) : Wed Nov 22 13:18:34 2017 System time : 0.000000626 seconds slow of NTP time Last offset : +0.002852759 seconds RMS offset : 0.002852759 seconds Frequency : 1.187 ppm fast Residual freq : +0.020 ppm Skew : 24.388 ppm Root delay : 0.000504752 seconds Root dispersion : 0.001112565 seconds Update interval : 64.4 seconds Leap status : Normal
Ubuntu
使用 chrony 连接到 Ubuntu 上的 Amazon Time Sync Service 的 IPv4 端点
  1. 连接到您的实例并使用 apt 安装 chrony 软件包。

    ubuntu:~$ sudo apt install chrony
    注意

    如有必要,请先运行 sudo apt update 以更新您的实例。

  2. 使用任何文本编辑器(如 nanovim)打开 /etc/chrony/chrony.conf 文件。在该文件中已包含的任何其他 serverpool 语句前面添加以下行,然后保存您的更改:

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
  3. 重新启动 chrony 服务。

    ubuntu:~$ sudo /etc/init.d/chrony restart
    Restarting chrony (via systemctl): chrony.service.
  4. 确认 chrony 使用 169.254.169.123 IPv4 端点来同步时间。

    ubuntu:~$ chronyc sources -v
    210 Number of sources = 7 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 169.254.169.123 3 6 17 12 +15us[ +57us] +/- 320us ^- tbag.heanet.ie 1 6 17 13 -3488us[-3446us] +/- 1779us ^- ec2-12-34-231-12.eu-west- 2 6 17 13 +893us[ +935us] +/- 7710us ^? 2a05:d018:c43:e312:ce77:6 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? 2a05:d018:d34:9000:d8c6:5 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? tshirt.heanet.ie 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 10y +0ns[ +0ns] +/- 0ns

    在返回的输出中,以 ^* 开始的行会指示首选的时间源。

  5. 验证 chrony 报告的时间同步指标。

    ubuntu:~$ chronyc tracking
    Reference ID : 169.254.169.123 (169.254.169.123) Stratum : 4 Ref time (UTC) : Wed Nov 29 07:41:57 2017 System time : 0.000000011 seconds slow of NTP time Last offset : +0.000041659 seconds RMS offset : 0.000041659 seconds Frequency : 10.141 ppm slow Residual freq : +7.557 ppm Skew : 2.329 ppm Root delay : 0.000544 seconds Root dispersion : 0.000631 seconds Update interval : 2.0 seconds Leap status : Normal
SUSE Linux

从 SUSE Linux Enterprise Server 15 开始,chrony 是 NTP 的默认实现。

使用 chrony 连接到 SUSE Linux 上的 Amazon Time Sync Service 的 IPv4 端点
  1. 使用任何文本编辑器(如 /etc/chrony.confvim)打开 nano 文件。

  2. 确认该文件包含以下行:

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

    如果此行不存在,请添加它。

  3. 注释掉任何其他服务器或池行。

  4. 打开 yaST 并启用 chrony 服务。

从 2018 年 8 月的发行版开始,Windows AMI 默认情况下使用 Amazon Time Sync Service。从这些 AMI 启动的实例无需进一步配置,您可以跳过以下过程。

如果您使用的 AMI 默认未配置 Amazon Time Sync Service,则请先验证您当前的 NTP 配置。如果您的实例已经在使用 Amazon Time Sync Service的 IPv4 端点,则无需进行进一步配置。如果您的实例未使用 Amazon Time Sync Service,则请完成将 NTP 服务器更改为使用 Amazon Time Sync Service 的过程。

验证 NTP 配置
  1. 从实例打开命令提示符窗口。

  2. 通过键入以下命令获取当前 NTP 配置:

    w32tm /query /configuration

    该命令返回 Windows 实例的当前配置设置,并将显示您是否已连接到 Amazon Time Sync Service。

  3. (可选) 通过键入以下命令获取当前配置的状态:

    w32tm /query /status

    该命令返回实例与 NTP 服务器同步的最后时间和轮询间隔等信息。

更改 NTP 服务器以使用 Amazon Time Sync Service
  1. 从命令提示符窗口运行以下命令:

    w32tm /config /manualpeerlist:169.254.169.123 /syncfromflags:manual /update
  2. 使用以下命令验证新设置:

    w32tm /query /configuration

    在返回的输出中,请确认 NtpServer 显示 169.254.169.123 IPv4 端点。

Amazon Windows AMI 的默认网络时间协议 (NTP) 设置

亚马逊机器映像(AMI)通常符合现成的默认值,但在需要更改以便在 EC2 基础设施上正常工作的情况除外。以下设置已确定可在虚拟环境中正常工作,此外,还可将任何时间偏差保持在一秒的准确率内:

  • 更新间隔 – 控制时间服务调整系统时间准确性的频率。AWS 将更新间隔配置为每两分钟发生一次。

  • NTP 服务器 – 从 2018 年 8 月版本开始,AMI 默认使用 Amazon Time Sync Service。此时间服务可通过位于 169.254.169.123 IPv4 端点的任何 AWS 区域 访问。此外,0x9 标记指示时间服务充当客户端,并使用 SpecialPollInterval 来确定与所配置的时间服务器核查时间的频率。

  • 类型 –“NTP”指示服务将充当独立的 NTP 客户端而不是作为域的一部分。

  • 已启用和 InputProvider – 时间服务已启用并向操作系统提供时间。

  • 特殊轮询间隔:对照所配置的 NTP 服务器,每 900 秒(即 15 分钟)检查一次。

注册表路径 键名称 数据

HKLM:\System\CurrentControlSet\services\w32time\Config

UpdateInterval

120

HKLM:\System\CurrentControlSet\services\w32time\Parameters

NtpServer

169.254.169.123,0x9

HKLM:\System\CurrentControlSet\services\w32time\Parameters

类型

NTP

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

启用

1

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

InputProvider

1

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

SpecialPollInterval

900

连接到 Amazon Time Sync Service 的 IPv6 端点

本节介绍如果您将实例配置为通过 IPv6 端点使用本地 Amazon Time Sync Service,在 连接到 Amazon Time Sync Service 的 IPv4 端点 中所述的步骤有何不同。它没有解释整个 Amazon Time Sync Service 配置流程。

IPv6 端点只能在基于 AWS Nitro System 构建的实例上访问。

注意

不建议同时使用 IPv4 和 IPv6 端点条目。IPv4 和 IPv6 NTP 数据包来自您的实例的同一个本地服务器。没有必要同时配置 IPv4 和 IPv6 端点,这样做也不会提高实例上时间的准确性。

请使用适用于您实例操作系统的说明。

根据您使用的 Linux 发行版,当您到达编辑 chrony.conf 文件的步骤时,您将使用 Amazon Time Sync Service 的 IPv6 端点(fd00:ec2::123)而不是 IPv4 端点(169.254.169.123):

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

保存文件并确认 chrony 使用 fd00:ec2::123 IPv6 端点来同步时间:

[ec2-user ~]$ chronyc sources -v

在输出中,如果您看到 fd00:ec2::123 IPv6 端点,则配置完成。

当您到达将 NTP 服务器更改为使用 Amazon Time Sync Service 的步骤时,您将使用 Amazon Time Sync Service 的 IPv6 端点(fd00:ec2::123),而不是 IPv4 端点(169.254.169.123):

w32tm /config /manualpeerlist:fd00:ec2::123 /syncfromflags:manual /update

验证您的新设置是否使用 fd00:ec2::123 IPv6 端点同步时间:

w32tm /query /configuration

在输出中,请确认 NtpServer 显示 fd00:ec2::123 IPv6 端点。

连接到 PTP 硬件时钟

PTP 硬件时钟是 AWS Nitro System 的一部分,因此无需使用任何客户资源即可在支持的裸机和虚拟化 EC2 实例上直接访问。

PTP 硬件时钟的 NTP 端点与常规 Amazon Time Sync Service 的端点相同。如果您的实例具有 PTP 硬件时钟并且配置了 NTP 连接(到 IPv4 或 IPv6 端点),则您的实例时间将自动通过 NTP 从 PTP 硬件时钟获取。

对于 Linux 实例,您可以配置直接 PTP 连接,这将为您提供比 NTP 连接更准确的时间。Windows 实例仅支持与 PTP 硬件时钟的 NTP 连接。

要求

当满足以下要求时,PTP 硬件时钟在实例上可用:

  • 支持的 AWS 区域:美国东部(弗吉尼亚州北部)和亚太地区(东京)

  • 支持的实例系列:

    • 通用型:M7a、M7g、M7gd、M7i

    • 计算优化型:C7a、C7gd、C7i

    • 内存优化型:R7a、R7g、R7gd、R7i

  • (仅限 Linux)支持的操作系统上已安装 ENA 驱动程序版本 2.10.0 或更高版本。有关支持的操作系统的更多信息,请参阅 GitHub 上的驱动程序先决条件

本节介绍如何使用直接 PTP 连接通过 PTP 硬件时钟将您的 Linux 实例配置为使用本地 Amazon Time Sync Service。需要在 chrony 配置文件中添加 PTP 硬件时钟的服务器条目。

要配置到 PTP 硬件时钟的直接 PTP 链接(仅限 Linux 实例)
  1. 连接到您的 Linux 实例并执行以下操作:

    1. 安装弹性网络适配器(ENA)版本 2.10.0 或更高版本的 Linux kernel driver。

    2. 启用 PTP 硬件时钟。

    有关安装说明,请参阅 GitHub 上的 Linux kernel driver for Elastic Network Adapter (ENA) family

  2. 验证 /dev/ptp0 设备是否显示在您的实例上。

    [ec2-user ~]$ ls /dev/ptp0

    预期的输出如下所示:如果输出中没有 /dev/ptp0,则说明未正确安装 ENA 驱动程序。查看此安装驱动程序过程中的步骤 1。

    /dev/ptp0
  3. 使用文本编辑器编辑 /etc/chrony.conf,并将以下行添加到文件中的任何位置。

    refclock PHC /dev/ptp0 poll 0 delay 0.000010 prefer
  4. 重新启动 chrony。

    [ec2-user ~]$ sudo systemctl restart chronyd
  5. 验证 chrony 是否使用 PTP 硬件时钟来同步此实例上的时间。

    [ec2-user ~]$ chronyc sources

    预期输出

    MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #* PHC0 0 0 377 1 +2ns[ +1ns] +/- 5031ns

    在返回的输出中,* 表示首选时间源。PHC0 对应于 PTP 硬件时钟。重启 chrony 后,您可能需要等待几秒钟才能显示星号。