本文說明如何使用 Azure 備份,為 Azure 部署的 Linux 虛擬機器 (VM) 建立應用程式一致的備份。 它涵蓋如何設定指令碼架構和疑難排解。
當 Azure 備份建立 VM 的快照集時,應用程式一致性可確保應用程式在 VM 還原之後正確啟動。 若要達成此行為,請使用 Linux prescript 和 postscript 架構,以支援使用 Azure Resource Manager 部署的 Linux VM。 這些腳本不適用於使用 System Center Service Manager 或 Windows 部署的 VM。
該框架如何運作?
此架構提供選項,讓您在建立 VM 快照時執行自訂的 prescript 和 postscript。 Prescript會在您建立VM快照之前執行。 Postscript 會在您建立 VM 快照之後立即執行。 Prescript 和 Postscript 可讓您在建立 VM 快照集時靈活地控制應用程式和環境。
Prescript 會呼叫原生應用程式 API,以使 I/O 靜默,並將記憶體內內容排清至磁碟。 這些動作可確保快照集與應用程式一致。 Postscript 使用原生應用程式 API 來解凍 I/O,這可讓應用程式在 VM 快照之後繼續正常作業。
設定 Azure Linux VM 的前置指令碼和後置指令碼
若要設定 prescript 和 postscript,請遵循下列步驟:
以根使用者身分登入您想要備份的Linux VM。
從 GitHub 下載 VMSnapshotScriptPluginConfig.json ,並將其複製到您要備份的所有 VM 的 /etc/azure 資料夾。 如果 /etc/azure 資料夾不存在,請予以建立。
請在您計劃備份的所有虛擬機器 (VM) 上複製您的應用程式的預設腳本和後設腳本。 您可以將文稿複製到 VM 上的任何位置。 請務必更新 VMSnapshotScriptPluginConfig.json 檔案中指令碼檔案的完整路徑。
若要使用以下檔案,請確保您具有相應的權限:
- VMSnapshotScriptPluginConfig.json:權限為 600。 例如,只有root使用者應該擁有此檔案的讀寫權限,而任何使用者都不應具有執行權限。
- Prescript 檔案:權限為 700。 例如,只有 root 使用者應該具有此檔案的讀取、寫入和執行權限。 該檔案預計是一個 shell 腳本,但理論上,該腳本可以在內部產生或引用其他腳本,例如 Python 腳本。
- 後記:許可是 700。 例如,只有 root 使用者應該具有此檔案的讀取、寫入和執行權限。 該檔案預計是一個 shell 腳本,但理論上,該腳本可以在內部產生或引用其他腳本,例如 Python 腳本。
這很重要
該框架賦予用戶眾多權力。 保護架構,並確保只有根使用者才能存取重要的 JSON 和指令碼檔案。
如果不符合需求,指令碼就無法執行,這會導致檔案系統當機和備份不一致。
設定 VMSnapshotScriptPluginConfig.json,如這裡所述:
-
pluginName:請保持此欄位不變,否則您的指令碼可能無法如預期般運作。 -
preScriptLocation:提供要備份的虛擬機器上預設的完整路徑。 -
postScriptLocation:提供要備份的虛擬機器上指令碼的完整路徑。 -
preScriptParams:提供必須傳遞給前置腳本的選用參數。 所有參數都必須以引號括起來。 如果您使用多個參數,請以逗號分隔參數。 -
postScriptParams:提供必須傳遞給後記的選用參數。 所有參數都必須以引號括起來。 如果您使用多個參數,請以逗號分隔參數。 -
preScriptNoOfRetries:設定在終止前發生錯誤時應重試處方的次數。 零表示只有一次嘗試,如果失敗則不重試。 -
postScriptNoOfRetries:設定在終止前發生錯誤時應重試 PostScript 的次數。 零表示只有一次嘗試,如果失敗則不重試。 -
timeoutInSeconds:指定 prescript 和 postscript 的個別逾時 (最大值為 1800)。 -
continueBackupOnFailure:如果您想要 Azure 備份在 prescript 或 postscript 失敗時回復至檔案系統一致/損毀一致的備份,請將此值設定為 true 。 如果發生指令碼失敗,將此值設定為 false 會失敗備份。 (例外狀況是,當您有一個單一磁碟 VM 時,無論此設定為何,都會降級為崩潰一致性備份。)當continueBackupOnFailure值設定為 false 時,如果備份失敗,則會根據服務中的重試邏輯,再次嘗試備份作業(針對規定的嘗試次數)。 -
fsFreezeEnabled:指定在建立 VM 快照集時是否應該呼叫 Linuxfsfreeze,以確保檔案系統的一致性。 建議您將此設定設定為 true ,除非您的應用程式相依於停用fsfreeze。 -
ScriptsExecutionPollTimeSeconds:設定延伸模組在每次輪詢至指令碼執行之間必須休眠的時間。 例如,如果值為 2,則延伸模組會每 2 秒檢查一次 prescript 或 postscript 執行是否完成。 它可以採用的最小值和最大值分別為 1 和 5。 此值應嚴格為整數。
-
現在已設定腳本架構。 如果 VM 備份已設定,下一個備份會叫用腳本並觸發應用程式一致備份。 如果未設定 VM 備份,請遵循將 Azure 虛擬機器備份至 Recovery Services 保存庫中的步驟進行設定。
針對 Azure Linux VM 應用程式一致性備份錯誤進行疑難排解
請確定在撰寫 prescript 和 postscript 時新增適當的記錄。 檢閱您的指令碼記錄以修正任何指令碼問題。 如果您在執行指令碼時仍有問題,請參閱下表。
| 錯誤 | 錯誤訊息 | 建議的動作 |
|---|---|---|
Pre-ScriptExecutionFailed |
Prescript 傳回錯誤,備份可能無法保持應用程式的一致狀態。 | 查看您指令碼的失敗記錄來修正此問題。 |
Post-ScriptExecutionFailed |
PostScript 指令回傳了可能影響應用程式狀態的錯誤。 | 查看指令碼的失敗記錄以修正問題,並檢查應用程式狀態。 |
Pre-ScriptNotFound |
在 VMSnapshotScriptPluginConfig.json 設定檔中指定的位置找不到指定的腳本。 | 請確定預設存在於設定檔中指定的路徑中,以確保應用程式一致的備份。 |
Post-ScriptNotFound |
在 VMSnapshotScriptPluginConfig.json 組態檔中指定的位置找不到附註。 | 請確定 PostScript 存在於設定檔中指定的路徑上,以確保應用程式一致的備份。 |
IncorrectPluginhostFile |
Pluginhost 損毀的檔案具有 VmSnapshotLinux 副檔名,因此 prescript 和 postscript 無法執行,而且備份不具應用程式一致性。 |
解除安裝 VmSnapshotLinux 擴充功能。 它會在下一次備份時自動重新安裝以解決問題。 |
IncorrectJSONConfigFile |
VMSnapshotScriptPluginConfig.json 檔案不正確,因此 prescript 和 postscript 無法執行,而且備份與應用程式不一致。 | 從 GitHub 下載副本並再設定一次。 |
InsufficientPermissionforPre-Script |
若要執行指令碼,root 使用者應該是檔案的擁有者。 檔案應該有 700 個權限。 (也就是說,只有擁有者應該具有讀取、寫入和執行權限。 | 請確定 root 使用者是指令碼檔案的擁有者,且只有擁有者具有讀取、寫入和執行許可權。 |
InsufficientPermissionforPost-Script |
若要執行指令碼,root 使用者應該是檔案的擁有者。 檔案應該有 700 個權限。 (也就是說,只有擁有者應該具有讀取、寫入和執行權限。 | 請確定 root 使用者是指令碼檔案的擁有者,且只有擁有者具有讀取、寫入和執行許可權。 |
Pre-ScriptTimeout |
應用程式一致備份的預設指令的執行逾時。 | 檢查指令碼,並在位於 /etc/azure 的 VMSnapshotScriptPluginConfig.json 檔案中增加逾時。 |
Post-ScriptTimeout |
應用程式一致性備份的 PostScript 執行逾時。 | 檢查指令碼,並在位於 /etc/azure 的 VMSnapshotScriptPluginConfig.json 檔案中增加逾時。 |