Share via


使用 Azure 備份的 Azure Linux VM 應用程式一致備份

本文說明如何使用 Azure 備份,建立Linux 虛擬機器至 Azure 的應用程式一致備份。 在本文中,您將設定腳本架構來備份 Azure 部署的 Linux VM。 本文也提供疑難解答資訊。

當您擷取 VM 的備份快照集時,應用程式一致性表示應用程式會在 VM 在還原後開機時啟動。 可想而知,應用程式一致性是多麼重要的環節。 為了確保 Linux VM 的應用程式一致,您可以使用 Linux 規範和後置腳本架構來取得應用程式一致的備份。 規範和後置腳本架構支援 Azure Resource Manager 部署的 Linux 虛擬機。 應用程式一致性指令碼不支援以 Service Manager 部署的虛擬機器或 Windows 虛擬機器。

架構的運作方式

架構提供選項,讓您在擷取 VM 快照集時執行自定義規範和後置腳本。 在擷取 VM 快照集之前,會執行述詞,並在您擷取 VM 快照集之後立即執行後腳本。 在擷取 VM 快照集時,述詞和後置腳本提供控制應用程式和環境的彈性。

述詞會叫用原生應用程式 API,其會停止 IO,並將記憶體內部內容排清到磁碟。 這些動作能確保快照集符合應用程式一致性。 備份後指令碼使用原生應用程式 API 解除凍結的 IOs,讓應用程式在 VM 快照集後繼續正常作業。

設定 Azure Linux VM 的規範和後置腳本

若要設定 Prescript 和後置腳本,請遵循下列步驟:

  1. 以根使用者身分登入您想要備份的 Linux VM。

  2. GitHub 下載 VMSnapshotScriptPluginConfig.json,並將它複製到所有要備份之 VM 上的 /etc/azure 資料夾。 如果 /etc/azure 資料夾不存在,請予以建立。

  3. 在您打算備份的所有 VM 上,複製應用程式的規範和後置腳本。 您可以將指令碼複製到 VM 上的任何位置。 請務必更新 VMSnapshotScriptPluginConfig.json 檔案中指令碼檔案的完整路徑。

  4. 請確定這些檔案的下列權限:

    • VMSnapshotScriptPluginConfig.json: 權限「600」。 例如,只有「根」使用者能夠擁有此檔案的「讀取」與「寫入」權限,且沒有任何使用者應擁有「執行」權限。

    • 備份前指令碼檔案:權限「700」。 例如,只有「根」使用者擁有此檔案的「讀取」、「寫入」及「執行」權限。 檔案應該是殼層指令碼,但理論上此指令碼可以在內部繁衍或參考其他指令碼,例如 Python 指令碼。

    • 備份後後指令碼:權限「700」。 例如,只有「根」使用者擁有此檔案的「讀取」、「寫入」及「執行」權限。 檔案應該是殼層指令碼,但理論上此指令碼可以在內部繁衍或參考其他指令碼,例如 Python 指令碼。

    重要

    此架構讓使用者擁有強大的能力。 請妥善保護架構,並確認只有「根」使用者能夠存取重要的 JSON 與指令碼檔案。 如果需求不符,指令碼將不會執行,因而導致檔案系統毀損和不一致的備份。

  5. 如以下所述設定 VMSnapshotScriptPluginConfig.json

    • pluginName:將此欄位保留原狀,否則您的指令碼可能無法如預期般運作。

    • preScriptLocation:提供要備份之 VM 上之述詞的完整路徑。

    • postScriptLocation:在要備份的 VM 上提供後指令碼完整路徑。

    • preScriptParams:提供需要傳遞至述詞的選擇性參數。 所有參數都應該以引號括住。 如果您使用多個參數,請以逗號分隔參數。

    • postScriptParams:提供必須傳遞給後指令碼的選擇性參數。 所有參數都應該以引號括住。 如果您使用多個參數,請以逗號分隔參數。

    • preScriptNoOfRetries:如果終止之前發生任何錯誤,請設定應該重試述詞的次數。 零表示只嘗試一次,若系統故障則不重試。

    • postScriptNoOfRetries:設定在終止前如果發生任何錯誤,應重試後指令碼的次數。 零表示只嘗試一次,若系統故障則不重試。

    • timeoutInSeconds:為述詞和後置腳本指定個別逾時(最大值可以是 1800)。

    • continueBackupOnFailure:如果您想要 Azure 備份 回復至文件系統一致/當機一致備份,如果述詞或後置腳本失敗,請將此值設定為 true。 如果指令碼失敗,將此設定為 false 會導致備份失敗 (除非您有一個單一磁碟的 VM,無論此設定為何,都會回復為損毁一致的備份)。 當 continueBackupOnFailure 值設定為 false 時,如果備份失敗,會根據服務中的重試邏輯再次嘗試備份作業 (規定的嘗試次數)。

    • fsFreezeEnabled:指定當您在擷取 VM 快照時是否應該呼叫 Linux fsfreeze,以確保檔案系統一致性。 我們建議您將這個設定保持為 true,除非您的應用程式在已停用的 fsfreeze 上具有相依性。

    • ScriptsExecutionPollTimeSeconds:設定延伸模組每次輪詢至指令碼執行之間的睡眠時間。 例如,如果值為 2,此延伸模組會檢查前/後指令碼執行是否每隔 2 秒完成一次。 最小值和最大值可以分別是 1 和 5。 該值嚴格來說應該為整數。

  6. 此指令碼架構現在已設定完成。 如果已經設定 VM 備份,則下次備份會叫用指令碼,並觸發應用程式一致備份。 如果未設定 VM 備份,則使用將 Azure 虛擬機器備份到復原服務保存庫來設定。

疑難排解

請務必在撰寫規範和後置腳本時新增適當的記錄,並檢閱腳本記錄,以修正任何腳本問題。 如果仍有執行指令碼的問題,請參閱下列表格以取得詳細資訊。

錯誤 錯誤訊息 建議的動作
Pre-ScriptExecutionFailed 述詞傳回錯誤,因此備份可能不一致。 查看您指令碼的失敗記錄來修正此問題。
Post-ScriptExecutionFailed 後置指令碼傳回可能會影響應用程式狀態的錯誤。 查看您指令碼的失敗記錄並檢查應用程式狀態來修正此問題。
Pre-ScriptNotFound 在 VMSnapshotScriptPluginConfig.json組態檔中指定的位置找不到述詞。 請確定在組態檔中指定的路徑上存在述詞,以確保應用程式一致備份。
Post-ScriptNotFound 在 VMSnapshotScriptPluginConfig.json 組態檔中指定的位置找不到後置指令碼。 確定後置指令碼會出現在組態檔中所指定的路徑,以確保應用程式一致的備份。
IncorrectPluginhostFile VmSnapshotLinux 擴展名隨附的 Pluginhost 檔案已損毀,因此無法執行述詞和後置腳本,而且備份不會是應用程式一致。 解除安裝 VmSnapshotLinux 延伸模組,它會自動與下一次備份重新安裝以解決問題。
IncorrectJSONConfigFile VMSnapshotScriptPluginConfig.json檔案不正確,因此述詞和後置腳本無法執行,而且備份不會與應用程式一致。 GitHub 下載副本並再設定一次。
InsufficientPermissionforPre-Script 針對執行指令碼,「根」使用者應該是檔案擁有者,且檔案應具有 “700” 權限 (也就是應只有擁有者具有「讀取」、「寫入」和「執行」權限)。 請確定「根」使用者是指令碼檔案的「擁有者」,且只有擁有者具有「讀取」、「寫入」和「執行」權限。
InsufficientPermissionforPost-Script 針對執行指令碼,根使用者應該是檔案擁有者,且檔案應具有 “700” 權限 (也就是應只有擁有者具有「讀取」、「寫入」和「執行」權限)。 請確定「根」使用者是指令碼檔案的「擁有者」,且只有擁有者具有「讀取」、「寫入」和「執行」權限。
Pre-ScriptTimeout 執行應用程式一致備份前置指令碼逾時。 請檢查指令碼,並增加位於 /etc/azure 的 VMSnapshotScriptPluginConfig.json 檔案中的逾時
Post-ScriptTimeout 應用程式一致備份後腳本的執行逾時。 請檢查指令碼,並增加位於 /etc/azure 的 VMSnapshotScriptPluginConfig.json 檔案中的逾時

下一步

設定 VM 備份至復原服務保存庫