时间跳变指系统时钟突然发生变化。系统时间的准确性、系统各组件时间的一致性,对于生产系统至关重要,否则会导致依赖时间的各种服务异常,如日志、同步备份等。通过时间跳变演练可以验证系统在发生系统时间跳变时,能否及时同步恢复正确时间并恢复业务。
实现原理
本方案使用云助手插件ACS-ECS-TimeJump,通过设置系统时间偏移量可将时间向前或向后调整。并通过Chrony服务与NTP时间服务器同步,实现故障恢复,因此使用该插件注入需安装Chronyc服务。
使用指南
演练准备
请确保您的ECS实例已安装云助手Agent,并且云助手状态为正常。具体操作,请参见查看云助手状态及异常状态处理。
故障注入
登录ECS实例。
具体操作,请参见使用Workbench登录Linux实例。
使用具有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已启动。[ecs-user@iZ0jlfp0by6c ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params inject,time=120 Will jump 120 seconds. Wed Sep 18 02:34:18 PM CST 2024 Done执行
date命令,检查系统当前时间是否符合预期。[ecs-user@iZ0jlfp0by6d ~]$ date Wed Sep 18 02:34:55 PM CST 2024
故障恢复
方法一:等待超时自动恢复。
方法二:在ECS实例中执行故障恢复命令。
sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params recover重要恢复命令实际为触发一次时间同步,Chrony服务时间同步所需时间取决于多个因素,因此演练结束后请务必检查时间是否恢复。
演练示例
为更好地观察时间跳变的过程,在终端中运行以下脚本,该脚本会每秒打印当前系统时间。
while true; do date +"%Y-%m-%d %H:%M:%S" sleep 1 done故障注入。
sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params inject,time=1800会将当前系统时间向后调整1800s,返回如下所示,其中会打印调整后的系统时间。
[ecs-user@iZ0jlfp0by6xxx ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params inject,time=1800 Will jump 1800 seconds. Wed Sep 18 04:05:02 PM CST 2024 Done查看故障注入效果。
可以看到在15:35:01,系统时间发生跳变。
[ecs-user@iZ0jlfp0by6xxx ~]$ while true; do > date +"%Y-%m-%d %H:%M:%S" > sleep 1 > done 2024-09-18 15:34:56 2024-09-18 15:34:57 2024-09-18 15:34:58 2024-09-18 15:34:59 2024-09-18 15:35:00 2024-09-18 15:35:01 2024-09-18 16:05:02 2024-09-18 16:05:03 2024-09-18 16:05:04 2024-09-18 16:05:05 2024-09-18 16:05:06 2024-09-18 16:05:07 2024-09-18 16:05:08 2024-09-18 16:05:09执行恢复命令。
此时,系统会自动与NTP服务器进行时间同步。
sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params recover系统时间恢复正常。
2024-09-18 16:08:45 2024-09-18 16:08:46 2024-09-18 16:08:47 2024-09-18 16:08:48 2024-09-18 16:08:49 2024-09-18 16:08:50 2024-09-18 15:39:01 2024-09-18 15:39:02 2024-09-18 15:39:03 2024-09-18 15:39:04 2024-09-18 15:39:05 2024-09-18 15:39:06 2024-09-18 15:39:07 2024-09-18 15:39:08
设置系统时间
配置NTP时间同步服务,并检查时间同步服务是否已经启动。具体操作,请参见时间同步。