系统时间跳变演练

时间跳变指系统时钟突然发生变化。系统时间的准确性、系统各组件时间的一致性,对于生产系统至关重要,否则会导致依赖时间的各种服务异常,如日志、同步备份等。通过时间跳变演练可以验证系统在发生系统时间跳变时,能否及时同步恢复正确时间并恢复业务。

实现原理

本方案使用云助手插件ACS-ECS-TimeJump,通过设置系统时间偏移量可将时间向前或向后调整。并通过Chrony服务与NTP时间服务器同步,实现故障恢复,因此使用该插件注入需安装Chronyc服务。

使用指南

演练准备

请确保您的ECS实例已安装云助手Agent,并且云助手状态正常。具体操作,请参见查看云助手状态及异常状态处理

故障注入

  1. 登录ECS实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 使用具有sudo访问权限的用户,运行云助手插件ACS-ECS-TimeJump

    sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params inject,[time=paramA],[duration=paramB]

    []内为可选故障注入参数,参数说明:

    • time(可选):时间偏移量,单位为秒,为正整数时表示将时间向后调整,为负整数时向前调整,默认为1。

    • duration(可选):持续时间,单位为秒,默认300。

    显示如下所示时,说明云助手插件ACS-ECS-TimeJump已启动。

    image

  3. 执行date命令,检查系统当前时间是否符合预期。

    image

故障恢复

  • 方法一:等待超时自动恢复。

  • 方法二:在ECS实例中执行故障恢复命令。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params recover
    重要

    恢复命令实际为触发一次时间同步,Chrony服务时间同步所需时间取决于多个因素,因此演练结束后请务必检查时间是否恢复。

演练示例

  1. 为更好地观察时间跳变的过程,在终端中运行以下脚本,该脚本会每秒打印当前系统时间。

    while true; do
        date +"%Y-%m-%d %H:%M:%S"
        sleep 1
    done
  2. 故障注入。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params inject,time=1800

    会将当前系统时间向后调整1800s,返回如下所示,其中会打印调整后的系统时间。

    image

  3. 查看故障注入效果。

    可以看到在15:35:01,系统时间发生跳变。

    image

  4. 执行恢复命令。

    此时,系统会自动与NTP服务器进行时间同步。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params recover

    系统时间恢复正常。

    image

设置系统时间

配置NTP时间同步服务,并检查时间同步服务是否已经启动。具体操作,请参见管理时间同步服务