在ECS執行個體運行狀態下,資料庫等應用程式的部分資料可能仍儲存在記憶體中或處於待寫入儲存的階段。由於快照無法直接捕獲這些未落盤的資料,因此通過快照恢複資料時,可能會導致應用資料丟失或不一致。阿里雲快照服務結合雲助手,提供了應用一致性快照功能,通過該功能,您通過快照恢複資料時可以確保應用程式內部資料的一致性。
背景資訊
建立一致性快照組時,您可以開啟應用一致性快照功能,系統將根據您實際配置的情況建立應用一致性快照或檔案系統一致性快照。以下是兩種快照的區別及詳細說明。
特性 | 應用一致性快照 | 檔案系統一致性快照 |
關注點 | 確儲存儲資料和應用程式內部(例如資料庫)的資料一致性。 | 檔案系統層面的資料一致性。 |
實現方式 |
|
|
適用情境 | 適用於對資料一致性有嚴格要求的應用,特別是資料庫和關鍵業務系統。 | 適用於需要確保檔案系統整體一致性的情境,比如檔案伺服器、文件管理系統等。 |
快照標籤 | APPConsistent:True | FsConsistent:True |
工作原理
應用一致性快照的工作原理如下。
Linux執行個體
Linux執行個體啟用應用一致性快照功能後,系統預設處於檔案系統一致性狀態。如果您上傳事先準備好的Shell指令碼(prescript.sh指令碼和postscript.sh指令碼)後,系統根據指令碼執行應用一致性檢查,如果執行成功,將快照標記為應用一致性快照,否則標記為檔案系統一致性快照。
prescript.sh指令碼和postscript.sh指令碼說明如下:
指令碼名稱 | 作用 | 指令碼類型 | 上傳路徑 | 指令碼許可權 | 指令碼內容 |
prescript.sh | 用於在執行可能影響應用程式的操作之前,暫停應用程式的所有寫操作,確保當前的資料狀態不會因操作過程中新產生的資料而不一致。 | Shell | /tmp/prescript.sh | 僅root使用者具有讀、寫和執行許可權 | 需根據實際業務自行編寫,例如步驟一:建立prescript.sh和postscript.sh指令碼。 |
postscript.sh | 一旦完成了可能影響應用的操作(如備份完成),postscript.sh指令碼會被用於恢複應用程式到正常工作狀態,允許寫操作繼續進行。 | Shell | /tmp/postscript.sh |
建立應用一致性快照的指令碼名稱、指令碼類型以及上傳路徑是固定的,您自訂指令碼時請保持一致,否則可能會導致指令碼運行失敗。
針對需要建立快照的ECS執行個體,開啟應用一致性快照功能,並判斷執行個體是否安裝雲助手。
說明如果執行個體未安裝雲助手,啟用應用一致性快照後,ECS執行個體將自動安裝雲助手外掛程式。
雲助手訪問ECS執行個體自動執行相關命令,運行prescript.sh指令碼、暫停I/O操作、建立快照等。
指令碼正確並運行成功,建立應用一致性快照。
指令碼錯誤(例如許可權、上傳路徑或指令碼名稱設定錯誤等)或運行失敗,建立檔案系統一致性快照。
雲助手運行postscript.sh指令碼,恢複I/O操作。
Windows執行個體
Windows執行個體啟用應用一致性快照功能後,雲助手結合Windows內建的磁碟區陰影複製服務VSS執行應用一致性檢查,如果執行成功,將快照標記為應用一致性快照,否則標記為檔案系統一致性快照。
針對需要建立快照的ECS執行個體,開啟應用一致性快照功能,並判斷執行個體是否安裝雲助手。
說明如果執行個體未安裝雲助手,啟用應用一致性快照後,ECS執行個體將自動安裝雲助手外掛程式。
雲助手訪問ECS執行個體自動執行相關命令,暫停、恢複I/O操作,建立快照等。
雲助手調用VSS服務並暫停所有I/O操作。
判斷系統是否包含預設的Writer。
如果包含,建立應用一致性快照。
如果不包含,建立檔案系統一致性快照。
恢複I/O操作。
使用限制
目前僅ESSD類型的雲端硬碟支援建立應用一致性快照,且雲端硬碟未開啟多重掛載功能。
ECS控制台不支援跨執行個體建立應用一致性快照,僅支援為單台ECS執行個體的雲端硬碟建立應用一致性快照。
前提條件
確保ECS執行個體的作業系統在以下範圍內:
Windows:Windows Server2012 R2及以上作業系統。
Linux:CentOS 7.6及以上版本、Ubuntu 18.04及以上版本或Alibaba Cloud Linux 2。
ECS執行個體處於運行中且雲助手運行正常。如何查看雲助手狀態請參見查看雲助手狀態及異常狀態處理。
已為ECS執行個體配置應用一致性快照相關的RAM角色以及自訂權限原則。具體操作,請參見建立RAM角色並授予給ECS執行個體。
說明建立應用一致性快照時,需要調用雲助手訪問ECS執行個體並執行命令,因此需要通過RAM角色授予雲助手相應的許可權。
RAM角色:自訂,例如AppSnapshotRoleName。
自訂權限原則:策略內容如下,表示在建立快照過程中具有查詢快照、建立快照、設定標籤和查詢雲端硬碟資訊等相關許可權。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeSnapshot*", "ecs:CreateSnapshot*", "ecs:TagResources", "ecs:DescribeDisks" ], "Resource": [ "*" ], "Condition": {} } ] }
操作步驟
通過控制台
Linux執行個體
將準備好的prescript.sh和postscript.sh指令碼提前上傳到ECS執行個體。
具體操作,請參見使用Workbench上傳或下載檔案。
說明關於prescript.sh和postscript.sh指令碼的更多介紹,請參見工作原理。
在頁面左側頂部,選擇目標資源所在的資源群組和地區。
在快照一致性組頁簽中單擊建立快照一致性組。
在建立快照對話方塊中,設定快照一致性組參數。
資源類型預設選中執行個體。
選擇單台執行個體及執行個體中的ESSD類型雲端硬碟。
展開進階配置,設定應用一致性快照。
如果選中啟用應用一致性快照並正確設定指令碼,則建立應用一致性快照。
如果選中啟用應用一致性快照但未設定指令碼或未正確設定指令碼,則建立檔案系統一致性快照。
說明如果執行個體未安裝雲助手,選中啟用應用一致性快照後,ECS執行個體將自動安裝雲助手外掛程式。
您也可以選中檔案系統IO暫停與恢複並設定逾時時間。
說明如果啟用檔案系統IO暫停與恢複功能,則可以在建立快照過程中暫停檔案系統的寫入活動,從而避免因進行中中的寫操作導致的資料不一致問題。如果您設定的逾時時間長度為16秒,表示如果在這個時間內暫停IO操作沒有完成,則暫停IO操作失敗,可能導致資料不一致問題。
其他更多參數說明,請參見操作步驟。
單擊確認。
建立後會返回雲助手命令執行ID,您可以根據命令執行ID查看建立結果。
單擊雲助手命令執行ID,在雲助手頁面查看執行結果。

如上圖所示,ExitCode傳回值為
0,表示雲助手上建立應用一致性快照執行成功,此時回顯資訊中會顯示快照一致性組ID。說明如果ExitCode傳回值不為
0,請根據ExitCode錯誤碼資訊排查相關問題。更多資訊,請參見錯誤碼資訊。查看建立的快照一致性組和快照資訊。
在快照一致性組頁簽中找到已建立的快照一致性組,單擊快照一致性組ID查看快照詳情。
在快照資訊地區,根據快照的標籤資訊,查看建立的快照是應用一致性快照還是檔案系統一致性快照。
如果顯示
APPConsistent:True標籤,表示建立的是應用一致性快照
如果顯示
FsConsistent: True標籤,表示建立的是檔案系統一致性快照
Windows執行個體
在頁面左側頂部,選擇目標資源所在的資源群組和地區。
在快照一致性組頁簽中單擊建立快照一致性組。
在建立快照對話方塊中,設定快照一致性組參數。
資源類型預設選中執行個體。
選擇單台執行個體及執行個體中的ESSD類型雲端硬碟。
展開進階配置,設定應用一致性快照。
如果同時選中啟用應用一致性快照和是否預設包含Writer,則會建立應用一致性快照。其中,是否預設包含Writer選項需在選中啟用應用一致性快照後才可見。
如果只選中啟用應用一致性快照,則會建立檔案系統一致性快照。
說明如果執行個體未安裝雲助手,選中啟用應用一致性快照後,ECS執行個體將自動安裝雲助手外掛程式。
其他更多參數說明,請參見操作步驟。
單擊確認。
建立後會返回雲助手命令執行ID。
單擊雲助手命令執行ID,在雲助手頁面查看執行結果。

如上圖所示,ExitCode傳回值為
0,表示雲助手上建立應用一致性快照執行成功,此時回顯資訊中會顯示快照一致性組ID。說明如果ExitCode傳回值不為
0,請根據ExitCode錯誤碼資訊排查相關問題。更多資訊,請參見錯誤碼資訊。查看建立的快照一致性組和快照資訊。
在快照一致性組頁簽中找到已建立的快照一致性組,單擊快照一致性組ID查看快照詳情。
在快照資訊地區,根據快照的標籤資訊,查看建立的快照是應用一致性快照還是檔案系統一致性快照。
如果顯示
APPConsistent:True標籤,表示建立的是應用一致性快照
如果顯示
FsConsistent: True標籤,表示建立的是檔案系統一致性快照
通過API介面
調用API介面RunCommand為一台或多台ECS執行個體建立應用一致性快照。
您需要根據實際環境設定
RegionId、Type、CommandContent和InstanceId等參數。其中CommandContent參數樣本及說明如下:Linux執行個體
acs-plugin-manager --exec --plugin app-snapshot-plugin --params=-RamRoleName=\"AppSnapshotRoleName\",-EnableFsFreeze=true,-TimeoutInSeconds=30,-PreScriptPath=\"/tmp/prescript.sh\",-PostScriptPath=\"/tmp/postscript.sh\",-ExcludeDiskId=\"\",-Name=\"LinuxApp1\",-Description=\"LinuxApp\"acs-plugin-manager --exec --plugin app-snapshot-plugin:表示執行雲助手外掛程式app-snapshot-plugin。--params=:表示外掛程式的配置參數,具體參數說明如下表所示。參數
類型
是否必傳
描述
RamRoleName
String
是
ECS執行個體綁定的RAM角色。
EnableFsFreeze
Boolean
否
是否在建立快照前使用Linux的FsFreeze機制確保檔案系統處於唯讀一致性。
預設為True。
TimeoutInSeconds
Integer
否
IO逾時時間。
預設為30秒。
PreScriptPath
String
否
prescript.sh指令碼路徑(/tmp/prescript.sh)。prescript.sh指令碼需要符合以下條件:
許可權:僅root使用者具有讀、寫、執行許可權,即700許可權。
內容:指令碼內容需要根據應用自行定製。
重要Linux執行個體建立應用一致性快照時必須設定此參數。如果指令碼設定錯誤(例如許可權、儲存路徑或檔案名稱設定錯誤等),最終建立的快照將是檔案系統一致性快照。
PostScriptPath
String
否
postscript.sh指令碼路徑(/tmp/postscript.sh)。postscript.sh指令碼需要符合以下條件:
許可權:僅root使用者具有讀、寫、執行許可權,即700許可權。
內容:指令碼內容需要根據應用自行定製。
重要Linux執行個體建立應用一致性快照時必須設定此參數。如果指令碼設定錯誤(例如許可權、儲存路徑或檔案名稱設定錯誤等),最終建立的快照將是檔案系統一致性快照。
ExcludeDiskId
String
否
ECS執行個體中不需要建立快照的雲端硬碟。
Name
String
是
快照一致性組名稱。
Description
String
否
快照一致性組描述資訊。
Windows執行個體
acs-plugin-manager --exec --plugin app-snapshot-plugin-win --params=-RamRoleName=\"AppSnapshotRoleName\",-EnableWriters=true,-ExcludeDiskId=\"\",-Name=\"APPSnapshot-1\",-Description=\"AppSnapshot\"acs-plugin-manager --exec --plugin app-snapshot-plugin-win:表示執行雲助手外掛程式app-snapshot-plugin-win。--params=:表示外掛程式的配置參數,具體參數說明如下表所示。參數
類型
是否必傳
描述
RamRoleName
String
是
ECS執行個體綁定的RAM角色。
EnableWriters
Boolen
否
是否設定應用一致性快照。取值如下:
true:建立應用一致性快照
false:建立檔案系統一致性快照
預設值為true。
ExcludeDiskId
String
否
ECS執行個體中不需要建立快照的雲端硬碟。
Name
String
是
快照一致性組名稱。
Description
String
否
快照一致性組描述資訊。
根據返回的
InvokeId,調用API介面DescribeInvocationResults。查看應用一致性快照是否建立成功。
ExitCode返回錯誤碼資訊取值為
0表示快照建立成功。如果取值不為
0,請根據錯誤碼資訊排查問題。更多資訊,請參見錯誤碼資訊。
Output為命令執行後的輸出資訊,如果建立成功,會包含如下快照一致性組ID等資訊。[time=\"2025-03-04 16:09:25.8200239\"][message=\"Finish SnapshotGroup=ssg-2zefohc25d7n1grq**** Creation, TotalCost=3.8204978s, QueryCost=2.9307022s\"]\n[level=\"info\"][time=\"2025-03-04 16:09:25.8200239\"][message=\"Prepare to Thaw FileSystem or Applications\"]\n[requestor=\"\n\"]\n[level=\"info\"][time=\"2025-03-04 16:09:27.7133096\"][message=\"Thaw Write Request Done\"]\n[level=\"info\"][time=\"2025-03-04 16:09:28.0355042\"][message=\"Tag snapshots with AppConistent\"]\n[level=\"info\"][time=\"2025-03-04 16:09:28.0365941\"][message=\"Take AppConsistent snapshots successfully\"]
錯誤碼資訊
錯誤碼(ExitCode) | 說明 |
0 | 表示快照建立成功。 |
1 | 條件檢查錯誤。可能錯誤如下:
|
2 |
|
3 | 可能錯誤如下:
|
4 | 建立快照一致性組失敗。 |
5 | 快照一致性組狀態錯誤。 |
6 | 建立快照一致性組逾時。 |
7 | 快照一致性組內單個雲端硬碟快照的狀態不符合預期。 |
8 | 為快照設定標籤失敗。 |
9 | 執行prescript.sh指令碼失敗。 |
10 | 執行postscript.sh指令碼失敗。 |
11 | 暫停I/O失敗。 |
12 | 恢複I/O失敗。 |
13 | ECS執行個體沒有RAM角色授權。 |
14 | 快照個數超過限制。 |
15 | 快照狀態錯誤。 |
16 | 前一個快照正在建立中,不能繼續建立快照。 |
255 | 未知失敗。 |
相關文檔
您可以為MySQL資料庫或SQL Server資料庫建立應用一致性快照,請參見為MySQL建立應用一致性快照最佳實務(Linux)和為SQL Server建立應用一致性快照最佳實務(Windows)。