管理时间同步服务

如果您发现实例中的系统时间存在异常,或者希望分布式系统中多台机器的时间保持一致性,请参考本文以了解时间同步服务及其相关配置。

时间不同步的判断方法

在管理和维护 ECS实例时,时间同步是确保系统正常运行的关键因素。如果您怀疑实例中的时间不同步,可以通过以下方法进行判断:

  • 比较系统时间与真实时间:检查 ECS 实例上显示的系统时间,并将其与您获取到的真实时间(例如通过手机、电视或其他可靠的时间服务)进行对比。如果两者之间存在明显的时间误差,说明系统时间可能不同步。

  • 监测定时任务的执行:定期检查已设置的定时任务(如 cron 作业等)。如果发现某些任务没有按照预期的时间执行,或者执行时间出现了异常,可能是由于系统时间不准确导致的。

  • 检查 Tracking 日志:在分布式系统中,Tracking 日志用于记录事务处理的顺序和状态。如果发现在日志中出现链路混乱的情况,例如记录顺序颠倒或者时间戳不可预测,可能表明系统时间在不同节点间不同步,从而影响数据一致性。

  • 安全认证过程中的错误:在进行安全认证时,如果出现错误信息,例如“时间戳无效”或“认证失败”,这通常表示系统时间与认证服务器的时间存在偏差。许多认证机制(如 Kerberos)依赖于时间戳来确保请求的有效性。

时间同步的重要性

时间的准确性与一致性对于ECS实例至关重要,它能够确保定时任务的准确执行、日志时间戳的正确记录以及分布式ECS集群中实例的时钟一致性。

  • 当系统日志显示不同实例或服务的时间戳存在显著差异时,尤其是在进行故障排查时,可能会导致问题定位变得困难。此外,依赖于时间戳的应用程序(例如金融交易系统、调度任务和科学计算)在执行过程中如果出现延迟或异常,通常表明存在时间不同步的问题。

  • 在分布式系统中,如果发现数据更新出现冲突或记录覆盖,用户需要审慎检查所有设备的时间设置。此外,在进行实验或数据分析时,多个设备的时间不一致可能会影响结果的准确性和可重复性,进一步影响决策和业务容错能力。因此,定期监控和维护时间同步服务不仅能确保系统的稳定性和安全性,还能提高整体业务运行效率。用户应对任何此类异常信号给予高度重视,以便及时采取措施维护系统的时间准确性。

时间同步服务

时间同步服务用于与NTP服务器同步时间以确保ECS实例时间准确,它是基于网络时间协议(Network Time Protocol,简称NTP)实现的,时间同步服务用于同步计算机的系统时间与世界各地的NTP服务器。

Linux操作系统

在Linux实例中,较为常见的两种时间同步的工具有:ChronyNTP服务ChronyNTP服务的对比如下表。

时间同步服务

简介

使用场景

时间同步精度

稳定性

Chrony

Chrony是一个实现网络时间协议的软件包,用于同步计算机的系统时间与世界各地的NTP服务器。Chrony特别适合在变化的网络环境中运行,能够以快速和高效的方式调整系统时间。

适用于高精度、高稳定性、自动化等场景。

较高

能够更好地适应高延迟和不稳定的网络环境。

NTP服务

NTP服务是一种经典的时间同步服务,是NTP协议的一个实现。NTP服务适用于长期运行的服务器,特别是在网络条件比较稳定的环境下。

适用于大多数无需太高精度要求的普通场景。

正常

仅能适应一定程度的网络不稳定。

时间同步服务默认配置

查看时间同步服务进程

阿里云公共镜像中包含了默认的时间同步配置,基于公共镜像创建的ECS实例会默认运行Chrony进行时间同步,正常情况下您无需干预时间同步服务。

说明

阿里云ECS实例中,CentOS 6等部分老旧镜像配置为NTP服务,当前NTP服务官方已经不再维护。如果ECS实例使用的是NTP服务,且业务不依赖NTP服务,建议升级NTP服务到Chrony服务

您可以执行以下命令查看ECS实例中已使用的时间同步服务。

sudo ps aux | grep -E "ntpd|chronyd"
  • 返回如下信息时表示使用的时间同步服务为Chrony。

    image

  • 返回如下信息时表示使用的时间同步服务为NTP服务。

    image

查看时间同步服务器地址

阿里云公共镜像中已默认配置了阿里云NTP服务器地址。您可以执行以下命令查看ECS实例中当前时间同步服务器地址。

  • Chrony。

    cat /etc/chrony/chrony.conf
  • NTP服务。

    cat /etc/ntp.conf

在配置文件中,查找以 server 开头的行,这些行指定多个 NTP 服务器地址及相关参数配置。

image

在配置文件中,可以指定多个 NTP 服务器,这样做主要是为了提高时间同步的可靠性和增强容错能力。

  • 容错性:使用多个 NTP 服务器可以确保即使某个服务器不可用,系统仍然可以从其他可用的 NTP 服务器获取时间。这会大大减少由于时间源不可用而导致的时间不同步问题。

  • 可靠性:不同的 NTP 服务器可能会有不同的时间源和网络延迟。通过连接多个时间服务器,chrony可以选择最稳定、最可靠的时间源进行同步,从而提供更准确的时间。

  • 负载均衡:当多个 NTP 服务器被指定时,chrony可以在它们之间分配请求,以避免对单一服务器过多请求,从而减轻服务器负担并提高整体性能。

  • 提高同步速度:在初次启动或发生时间偏差时,多个服务器可以帮助加速时间同步过程。使用多个服务器,chrony可以更快地确定准确时间并进行调整。

  • 减少网络延迟影响:多个服务器有助于减少由网络延迟引起的影响。chrony会选择响应速度最快的服务器进行时间校正,以确保时钟始终准确。

查看当前时间

您可以执行以下命令查看当前系统时间是否准确。

Chrony

执行以下命令可以获取当前时间同步状态的详细信息,包括系统时间偏差、系统时间的稳定性以及最后一次同步的时间等。您可以通过查看System time评估当前时间是否准确,如本示例中的0.000025116 seconds slow of NTP time表示当前系统时间比NTP服务时间慢。

sudo chronyc tracking

返回信息示例如下。

image

NTP服务

执行以下命令可以获取已配置的NTP服务器以及对应的状态指标,其中偏移量offset可以大致表示本地时间和服务器时间的差异。

# 获取所有已配置的NTP服务器以及对应的状态指标
sudo ntpd -p

#  sudo ntpd -p <server> 获取特定NTP服务器对应状态指标
sudo ntpd -p ntp3.aliyun.com

返回信息示例如下:

image

返回信息字段解释:

  • remote:NTP 服务器的地址。

  • refid:参考时钟的标识(例如 GPS、Local Clock 等)。

  • st:服务器的层次级别(stratum),数值越小,表示时间源越精确。

  • t:连接类型(u 代表 unicast,m 代表 multicast,b 代表 broadcast)。

  • when:上次成功查询的时间(以秒为单位)。

  • poll:NTP 请求服务器信息的间隔(以秒为单位)。

  • reach:最近 8 次查询的成功与失败状态的标识码。

  • delay:单次请求与响应之间的延迟。

  • offset:系统时间与服务器时间的差值(延迟)。

  • jitter:时间延迟的变化程度。

手动同步时间

阿里云ECS实例默认运行的Chrony或者NTP服务会逐步调整时间,避免时间跳变的风险,不建议手动同步时间。如果因为业务需要,必须要手动同步时间,请按以下步骤进行操作。

Chrony

sudo chronyc makestep

当系统返回信息为200 OK时,表示Chrony服务已手动同步完成。

image

NTP服务

重要

当前NTP服务官方已经停止维护,使用ntpdate进行手动时间同步有时钟跳变的风险,如必须使用,请在ntpdate命令后添加三个或三个以上的时钟源,尽可能规避风险。更多阿里云NTP服务器信息,请参见阿里云NTP服务器地址列表

  • 专有网络VPC实例。

    sudo ntpdate ntp.cloud.aliyuncs.com ntp7.cloud.aliyuncs.com ntp10.cloud.aliyuncs.com ntp11.cloud.aliyuncs.com ntp12.cloud.aliyuncs.com
  • 经典网络实例。

    sudo ntpdate ntp1.cloud.aliyuncs.com ntp2.cloud.aliyuncs.com ntp3.cloud.aliyuncs.com ntp4.cloud.aliyuncs.com ntp5.cloud.aliyuncs.com

配置NTP服务器地址

如果需要设置特定的 NTP 服务器进行时间同步,您也可以通过以下步骤进行配置。

说明

在分布式ECS集群中,为保证分布式集群实例的时钟一致性,请确保所有实例都配置为指向同一或可靠的 NTP 服务地址。

Chrony

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 配置NTP服务器。

    如果您需要配置为阿里云的NTP服务器,请按照下面步骤中的<NTP服务器>进行配置,具体请参见阿里云NTP服务器地址列表。关于如何选择阿里云NTP服务器地址,请参见NTP服务同步异常怎么办?

    1. 执行以下命令,进入chrony配置文件。

      sudo vim /etc/chrony.conf
    2. 屏蔽不需要的NTP服务器,如下图所示,在配置文件中将不需要使用的NTP服务注释掉。

      image

    3. 添加新的NTP服务器。如下图所示,您可以在配置文件中添加新的NTP服务器ntp12.cloud.aliyuncs.com;具体可用NTP服务器地址请参见附录阿里云NTP服务器地址列表

      image

    4. 保存配置文件并退出,执行以下命令重启chronyd并设置开机自启动。

      sudo systemctl restart chronyd.service
      sudo systemctl enable chronyd.service
  3. 查看Chrony服务状态。

    1. 执行以下命令,查看本机时间同步状态,用于验证服务是否已启动。

      sudo chronyc tracking
    2. 执行以下命令,查看时间同步服务器列表。

      sudo chronyc -n sources -v

NTP服务

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 配置NTP服务器。

    如果您需要配置为阿里云的NTP服务器,请按照下面步骤中的<NTP服务器>进行配置,具体请参见阿里云NTP服务器地址列表。关于如何选择阿里云NTP服务器地址,请参见NTP服务同步异常怎么办?

    1. 执行以下命令,进入NTP配置文件。

      sudo vim /etc/ntp.conf
    2. 屏蔽不需要的NTP服务器,如下图所示,在配置文件中将不需要使用的NTP服务注释掉。

      image

    3. 添加新的NTP服务器。格式为server <ntp服务器地址> minpoll <最小请求间隔> maxpoll <最大请求间隔> iburst 。如下图所示,您可以在配置文件中添加新的NTP服务器ntp12.cloud.aliyuncs.com 。具体可用NTP服务器地址请参见附录阿里云NTP服务器地址列表

      image

    4. 保存配置文件并退出,执行以下命令重启ntpd

      sudo service ntpd restart
  3. 启动NTP服务。

    1. 依次执行以下命令,启动NTP服务并设置开机自启动。

      sudo service ntpd start
      sudo chkconfig ntpd on
    2. 执行以下命令,查看NTP服务运行状态。

      sudo ntpstat
    3. 执行以下命令,查看NTP服务对等端的列表信息。

      sudo ntpq -p

升级NTP服务到Chrony服务

阿里云ECS实例中,CentOS 6等部分老旧镜像配置为NTP服务,当前NTP服务官方已经不再维护。如果ECS实例使用的是NTP服务,且业务不依赖NTP服务,建议升级为Chrony服务。

  1. 卸载ntpd。

    在升级之前,建议运行以下命令先卸载现有的 ntpd 服务。

    # Alibaba Cloud Linux / CentOS / RHEL
    sudo yum remove ntp
    
    # Ubuntu/Debian
    sudo apt remove ntp
  2. 运行以下命令安装Chrony

    # Alibaba Cloud Linux / CentOS / RHEL
    sudo yum install chrony
    
    # Ubuntu/Debian
    sudo apt install chrony
  3. 配置Chrony

    Chrony 的配置文件通常位于 /etc/chrony.conf。在此文件中,您可以添加您的 NTP 服务器和其他配置。这是一个简单的 chrony.conf 示例:

    # NTP server settings
    server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
    server ntp5.aliyun.com iburst
    
    # 指定漂移文件的位置
    driftfile /var/lib/chrony/drift
    
    # 允许从本地查询 chronyd
    allow 127.0.0.1
    说明

    参数解析:

    • server ntp.cloud.aliyuncs.com: 这是 NTP 服务器的域名。chrony将连接到这个服务器以获取时间同步。

    • minpoll: 这个参数指定了最小的轮询间隔(以 2 的幂为单位)。minpoll 4表示最小的轮询间隔为24=16秒。这意味着chrony至少每 16 秒就会与此服务器进行一次同步请求。

    • maxpoll: 这个参数指定了最大的轮询间隔。maxpoll 10表示最大的轮询间隔为210=1024秒。因此,chrony可能会将轮询间隔调整到 1024 秒,但不会低于 16 秒。

    • iburst: 这个选项是一个补充参数,用于加快初次同步过程。当chrony启动后,它会通过发送一组快速请求(通常是 8 个请求)来快速获取服务器的时间。在这个例子中,iburst会在启动后立即向ntp.cloud.aliyuncs.com发送多个请求,确保在短时间内迅速获得准确的时间。

  4. 启动和启用Chrony服务。

    运行以下命令,启用并启动 Chrony 服务,以便在系统启动时自动运行。

    # 启动 Chrony 服务
    sudo systemctl start chronyd
    
    # 设置 Chrony 在系统启动时自动启动
    sudo systemctl enable chronyd
  5. 检查Chrony状态。

    您可以运行以下命令,使用 chronyc 工具来检查 Chrony 的状态和同步情况。

    # 检查服务状态
    sudo systemctl status chronyd
    
    # 使用 chronyc 查询同步状态
    chronyc tracking
    
    # 查询可用的时间源
    chronyc sources
  6. 验证时间同步

    等待几分钟来进行时间同步后,您可以使用 chronyc tracking 命令查看主服务器的状态以及本地时钟与时间服务器之间的偏差。

Windows操作系统

在Windows实例中,通常使用系统自带的时间服务(Windows Time Service,W32time)来进行时间同步。

查看当前时间

  1. 使用命令提示符。

    1. 按下Win + R,输入cmd,然后按Enter,打开命令提示符。

    2. 在命令提示符中输入以下命令查看当前时间。

       date /t 
       time /t

      date /t将显示当前日期;time /t将显示当前时间。

  2. 通过图形界面:查看任务栏:在 Windows 任务栏的右下角,您可以看到当前日期和时间。

  3. 调整日期/时间设置:右键单击任务栏的时间,然后选择“调整日期/时间”。在这里,您可以查看和设置当前时间和日期。

手动同步时间

命令提示符

  1. Win + R,输入cmd,然后按Enter,打开命令提示符。

  2. 输入以下命令以手动同步。

     w32tm /resync

    这将强制 Windows 时间服务与配置的 NTP 服务器重新同步。

    image

  3. 如果需要查看同步状态,可以使用如下命令查看同步结果。

     w32tm /query /status

    image

图形化界面

  1. 打开设置:右键单击任务栏的时间显示,选择日期和时间设置

  2. 查看时间设置:在日期和时间设置界面中,确保自动设置时间处于开启状态。

  3. 手动同步时间:在日期和时间设置界面中,在同步时钟区域,单击立即同步按钮完成手动同步时间。

配置 NTP 服务器

如果需要设置特定的 NTP 服务器进行时间同步,您也可以通过以下步骤进行配置。

命令提示符

  1. 以管理员身份打开命令提示符。

  2. 运行以下命令,设置 NTP 服务器。

    ntp11.cloud.aliyuncs.com 为例,更多NTP服务地址,请参见阿里云NTP服务器地址列表

     w32tm /config /manualpeerlist:"ntp11.cloud.aliyuncs.com" /syncfromflags:manual /reliable:YES /update

    image

  3. 运行以下命令重启时间服务。

     net stop w32time
     net start w32time
  4. 运行以下命令再次同步时间。

     w32tm /resync

图形化界面

Windows Server操作系统默认配置微软NTP服务器(time.windows.com),但是可能经常同步出错。使用阿里云ECS实例时,您可以将默认NTP服务器更换成阿里云提供的内网NTP服务器。本文以Windows Server 2022系统为例,介绍如何修改默认NTP服务器地址。

  1. 远程连接Windows实例。

    具体操作,请参见通过密码或密钥认证登录Windows实例

  2. 在任务栏的通知区域,单击日期和时间,并单击日期和时间设置

    image

  3. 在设置页面,单击添加不同时区的时钟

    image

  4. 日期和时间对话框里,单击Internet 时间页签,然后单击更改设置(C)...

    image

  5. Internet 时间设置对话框里,选中与Internet时间服务器同步(S)...,填写一个阿里云内网NTP服务器地址,并单击立即更新,然后单击确定。关于NTP服务器地址,请参见阿里云NTP服务器地址列表

    重要

    当时钟同步失败时,可能是实例中存在第三方杀毒软件,请关闭杀毒软件后重新同步。

    image

  6. 单击确定

常见问题

阿里云NTP服务器是否收费?

不收费。阿里云公共镜像中包含了默认的时间同步配置,基于公共镜像创建的ECS实例会默认运行Chrony或者NTP服务进行时间同步。

NTP服务同步异常怎么办?

请先确认您的服务器的网络类型,请根据对应的网络类型选择对应的NTP服务器地址。关于NTP服务器地址请参见阿里云NTP服务器地址列表。其中公网NTP服务器地址面向整个互联网,时间准确性和稳定性不及内网的NTP服务器地址。

  • 网络类型为专有网络:NTP服务器地址在专有网络VPC内网这一列选择。

  • 网络类型为经典网络:NTP服务器地址在经典网络内网这一列选择。

附录

阿里云NTP服务器地址列表

各网络下的阿里云NTP服务器地址(仅支持IPv4协议)如下表所示。如果您需要修改阿里云NTP服务器地址,可以参考该列表。

经典网络内网

专有网络VPC内网

公网

ntp1.cloud.aliyuncs.com

ntp2.cloud.aliyuncs.com

ntp3.cloud.aliyuncs.com

ntp4.cloud.aliyuncs.com

ntp5.cloud.aliyuncs.com

ntp6.cloud.aliyuncs.com

重要

经典网络类型的ECS实例相关服务将于2025年02月28日起停止服务,具体下线公告以及迁移VPC网络方案,请参见【下线公告】停止提供阿里云经典网络类型的ECS实例相关服务

ntp.cloud.aliyuncs.com

ntp7.cloud.aliyuncs.com

ntp8.cloud.aliyuncs.com

ntp9.cloud.aliyuncs.com

ntp10.cloud.aliyuncs.com

ntp11.cloud.aliyuncs.com

ntp12.cloud.aliyuncs.com

ntp.aliyun.com

ntp1.aliyun.com

ntp2.aliyun.com

ntp3.aliyun.com

ntp4.aliyun.com

ntp5.aliyun.com

ntp6.aliyun.com

ntp7.aliyun.com

相关文档

如果您希望了解更多关于Linux时间的相关概念及操作,或者想了解关于Linux公共镜像中时间配置的变化,请参见Linux时间和时区说明