時間跳變指系統時鐘突然發生變化。系統時間的準確性、系統各組件時間的一致性,對於生產系統至關重要,否則會導致依賴時間的各種服務異常,如日誌、同步備份等。通過時間跳變演練可以驗證系統在發生系統時間跳變時,能否及時同步恢複正確時間並恢複業務。
實現原理
本方案使用雲助手外掛程式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時間同步服務,並檢查時間同步服務是否已經啟動。具體操作,請參見行政時間同步服務。