为 Windows 实例设置时间
对于许多服务器任务和进程来说,Windows 实例上准确一致的时间参考是非常重要的。系统日志中的时间戳在识别问题发生的时间和事件的时间顺序方面起着至关重要的作用。使用 Amazon CLI 或 Amazon SDK 从您的实例发送请求时,这些工具会以您的名义签署请求。如果实例的日期和时间设置不准确,可能会导致签名中的日期和请求的日期之间存在差异,进而导致 Amazon 拒绝请求。
为解决这一重要问题,Amazon 提供了 Amazon Time Sync Service,该服务可从所有 EC2 实例访问,并由各种 Amazon Web Services 使用。该服务在每个 Amazon Web Services 区域 中使用一组与卫星连接的原子参考时钟,以提供准确的协调世界时(UTC)全球标准的当前时间读数。
Amazon Time Sync Service 要么使用网络时间协议(NTP),要么在支持的实例上提供本地精确时间协议(PTP)硬件时钟。PTP 硬件时钟支持 NTP 连接或直接 PTP 连接。NTP 连接和直接 PTP 连接使用相同的高精度时间源,但直接 PTP 连接比 NTP 连接更准确。与 Amazon Time Sync Service 的 NTP 连接支持闰秒涂抹,而与 PTP 硬件时钟的 PTP 连接不涂抹时间。有关更多信息,请参阅 闰秒。
要备份到实例上的 Amazon Time Sync Service,以及将 Amazon EC2 之外的资源连接到 Amazon Time Sync Service,您可以使用位于 time.aws.com
的公共 Amazon Time Sync Service。与本地 Amazon Time Sync Service 一样,公共 Amazon Time Sync Service 会自动涂抹添加到 UTC 中的任何闰秒。公共 Amazon Time Sync Service 由每个 Amazon Web Services 区域 中一组与卫星连接的原子参考时钟在全球范围内提供支持。
对于 Linux 实例,请参阅为 Linux 实例设置时间。
将您的实例设置为使用本地 Amazon Time Sync Service
您的实例可以访问本地 Amazon Time Sync Service,如下所示:
-
通过 NTP 在以下 IP 地址端点进行访问:
-
IPv4:
169.254.169.123
-
IPv6:
fd00:ec2::123
(只有基于 Amazon Nitro System 而构建的实例才能访问。)
-
NTP 连接 连接不需要更改任何 VPC 配置,您的实例也不需要访问互联网。
PTP 硬件时钟是 Amazon Nitro System 的一部分,因此无需使用任何客户资源即可在支持的裸机和虚拟化 EC2 实例上直接访问。
PTP 硬件时钟的 NTP 端点与通过 IPv4 或 IPv6 进行的常规 Amazon Time Sync Service 连接相同。如果您的软件配置为 NTP 端点,并且在带有 PTP 硬件时钟的实例上运行,则其将通过 NTP 自动连接到 PTP 硬件时钟。
从 2018 年 8 月的发行版开始,Windows AMI 默认情况下使用 Amazon Time Sync Service。从这些 AMI 启动的实例无需进一步配置,您可以跳过以下过程。
连接到 Amazon Time Sync Service 的 IPv4 端点
首先验证您当前的 NTP 配置。如果您的实例已经在使用 Amazon Time Sync Service的 IPv4 端点,则无需进行进一步配置。如果您的实例未使用 Amazon Time Sync Service,则请完成将 NTP 服务器更改为使用 Amazon Time Sync Service 的过程。
验证 NTP 配置
-
从实例打开命令提示符窗口。
-
通过键入以下命令获取当前 NTP 配置:
w32tm /query /configuration
该命令返回 Windows 实例的当前配置设置,并将显示您是否已连接到 Amazon Time Sync Service。
-
(可选) 通过键入以下命令获取当前配置的状态:
w32tm /query /status
该命令返回实例与 NTP 服务器同步的最后时间和轮询间隔等信息。
更改 NTP 服务器以使用 Amazon Time Sync Service
-
从命令提示符窗口运行以下命令:
w32tm /config /manualpeerlist:169.254.169.123 /syncfromflags:manual /update
-
使用以下命令验证新设置:
w32tm /query /configuration
在返回的输出中,请确认
NtpServer
显示169.254.169.123
IPv4 端点。
Amazon Windows AMI 的默认网络时间协议 (NTP) 设置
亚马逊机器映像(AMI)通常符合现成的默认值,但在需要更改以便在 EC2 基础设施上正常工作的情况除外。以下设置已确定可在虚拟环境中正常工作,此外,还可将任何时间偏差保持在一秒的准确率内:
-
更新间隔 – 控制时间服务调整系统时间准确性的频率。Amazon 将更新间隔配置为每两分钟发生一次。
-
NTP 服务器 – 从 2018 年 8 月版本开始,AMI 默认使用 Amazon Time Sync Service。此时间服务可通过位于 169.254.169.123 IPv4 端点的任何 Amazon Web Services 区域 访问。此外,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 |
连接到 PTP 硬件时钟
Windows 实例仅支持与 PTP 硬件时钟的 NTP 连接。
PTP 硬件时钟的 NTP 端点与通过 IPv4 或 IPv6 进行的常规 Amazon Time Sync Service 连接相同。如果您的软件配置为连接到 NTP 端点,并且在带有 PTP 硬件时钟的实例上运行,则其将通过 NTP 自动连接到 PTP 硬件时钟。
要求
当满足以下要求时,PTP 硬件时钟在实例上可用:
-
支持的 Amazon Web Services 区域:美国东部(弗吉尼亚州北部)和亚太地区(东京)
-
支持的实例系列:R7g
将您的实例或任何联网设备设置为使用公共 Amazon Time Sync Service
您可以将您的实例或任何连网设备(例如您的本地计算机或本地服务器)设置为使用公共 Amazon Time Sync Service,该服务可通过 time.aws.com
在互联网上进行访问。您可以使用公共 Amazon Time Sync Service 作为本地 Amazon Time Sync Service 的备份,并将 Amazon 以外的资源连接到 Amazon Time Sync Service。
根据您实例或设备的操作系统,参照以下过程之一将您的实例或设备设置为使用公共 Amazon Time Sync Service。
更改实例上的时区
Windows 实例默认设置为 UTC(协调世界时)时区。您可以将实例上的时间更改为本地时区或网络中的其他时区。
更改 Windows 实例上的时区
-
从实例打开命令提示符窗口。
-
确定将在实例上使用的时区。要获取时区的列表,请使用以下命令:
tzutil /l
该命令采用以下格式返回所有可用时区的列表:
display name
time zone ID
-
查找要分配给该实例的时区 ID。
-
使用以下命令分配到其他时区:
tzutil /s
"Pacific Standard Time"
新时区应立即生效。
注意
您可以使用以下命令分配 UTC 时区:
tzutil /s "UTC"
为 Windows Server 设置时区后,防止时区发生更改
在更改 Windows 实例上的时间时,必须确保该时区在系统重启后仍然保留。否则,当实例重新启动时,它会恢复使用 UTC 时间。可通过添加 RealTimeIsUniversal 注册表项来保留时区设置。默认情况下,会在所有当前一代实例上设置此注册表项。若要验证是否设置了 RealTimeIsUniversal 注册表项,请参阅以下过程中的步骤 4。如果未设置该注册表项,请从头开始执行以下步骤。
设置 RealTimeIsUniversal 注册表项
-
从实例打开命令提示符窗口。
-
使用以下命令添加注册表项:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
-
如果您使用的是在 2013 年 2 月 22 日之前创建的 Windows Server 2008 AMI(不是 Windows Server 2008 R2),我们建议更新到最新的 Amazon Windows AMI。如果使用的是运行 Windows Server 2008 R2(不是 Windows Server 2008)的 AMI,则必须验证是否安装了 Microsoft 修补程序 KB2922223
。如果未安装此修补程序,建议您更新到最新的 Amazon Windows AMI。 -
(可选) 验证该实例是否使用以下命令成功保存了该注册表项:
reg query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /s
此命令返回 TimeZoneInformation 注册表项的子项。您应在列表底部看到 RealTimeIsUniversal 项,类似于下文:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation Bias REG_DWORD 0x1e0 DaylightBias REG_DWORD 0xffffffc4 DaylightName REG_SZ @tzres.dll,-211 DaylightStart REG_BINARY 00000300020002000000000000000000 StandardBias REG_DWORD 0x0 StandardName REG_SZ @tzres.dll,-212 StandardStart REG_BINARY 00000B00010002000000000000000000 TimeZoneKeyName REG_SZ Pacific Standard Time DynamicDaylightTimeDisabled REG_DWORD 0x0 ActiveTimeBias REG_DWORD 0x1a4 RealTimeIsUniversal REG_DWORD 0x1
闰秒
闰秒的概念于 1972 年引入,是偶尔对 UTC 时间进行一秒钟的调整,将地球自转中的不规则性考虑在内,以适应国际原子时间(TAI)和太阳时(Ut1)之间的差异。为了代表客户管理闰秒,我们在 Amazon Time Sync Service 中设计了闰秒涂抹。有关更多信息,请参阅 Look Before You Leap – The Coming Leap Second and Amazon
闰秒即将消失,我们完全支持在第 27 届国际计量大会上做出的在 2035 年或之前取消闰秒
为了支持这种过渡,当通过本地 NTP 连接或我们的公共 NTP 池(time.aws.com
)访问 Amazon Time Sync Service 时,我们仍计划在闰秒事件期间涂抹时间。但是,PTP 硬件时钟不提供涂抹时间选项。如果出现闰秒,PTP 硬件时钟将按照 UTC 标准添加闰秒。在大多数情况下,闰秒涂抹和闰秒时间源是相同的。但是,由于其在闰秒事件中有所不同,因此我们不建议在闰秒事件期间在时间客户端配置中同时使用已涂抹和未涂抹的时间源。
相关资源
-
Windows 时间服务的工作原理
(Microsoft) -
W32tm
(Microsoft) -
Windows 时间服务如何处理闰秒
(Microsoft) -
有关闰秒和 Windows 的案例:可能不是千年虫问题
(Microsoft)