时间跳变指系统时钟突然发生变化。系统时间的准确性、系统各组件时间的一致性,对于生产系统至关重要,否则会导致依赖时间的各种服务异常,如日志、同步备份等。通过时间跳变演练可以验证系统在发生系统时间跳变时,能否及时同步恢复正确时间并恢复业务。
实现原理
本方案使用云助手插件ACS-ECS-TimeJump
,通过设置系统时间偏移量可将时间向前或向后调整。并通过Chrony服务与NTP时间服务器同步,实现故障恢复,因此使用该插件注入需安装Chronyc服务。
使用指南
演练准备
请确保您的ECS实例已安装云助手Agent,并且云助手状态为正常。具体操作,请参见查看云助手状态及异常状态处理。
故障注入
登录ECS实例。
具体操作,请参见使用Workbench工具以SSH协议登录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
已启动。执行
date
命令,检查系统当前时间是否符合预期。
故障恢复
方法一:等待超时自动恢复。
方法二:在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,返回如下所示,其中会打印调整后的系统时间。
查看故障注入效果。
可以看到在15:35:01,系统时间发生跳变。
执行恢复命令。
此时,系统会自动与NTP服务器进行时间同步。
sudo acs-plugin-manager --exec --plugin ACS-ECS-TimeJump --params recover
系统时间恢复正常。
设置系统时间
配置NTP时间同步服务,并检查时间同步服务是否已经启动。具体操作,请参见管理时间同步服务。