この記事では、Azure Backup を使用して、Azure にデプロイされた Linux VM のアプリケーション整合性バックアップを作成する方法について説明します。 スクリプトフレームワークの設定とトラブルシューティングについて説明します。
Azure Backup が VM のスナップショットを作成すると、アプリケーションの整合性により、VM の復元後にアプリケーションが正しく起動することが保証されます。 これを実現するには、Azure Resource Manager にデプロイされた Linux VM をサポートする Linux プリスクリプトとポストスクリプト フレームワークを使用します。 ただし、これらのスクリプトは、Service Managerデプロイされた VM または Windows VM では機能しません。
フレームワークはどのように機能しますか?
このフレームワークには、VM スナップショットの作成中にカスタムのプリスクリプトとポストスクリプトを実行するオプションが用意されています。 プリスクリプトは VM スナップショットを作成する直前に実行され、事後スクリプトは VM スナップショットを取得した直後に実行されます。 プリスクリプトとポストスクリプトを使用すると、VM スナップショットを作成しながら、アプリケーションと環境を柔軟に制御できます。
プリスクリプトはネイティブ アプリケーション API を呼び出し、IO を静止し、メモリ内のコンテンツをディスクにフラッシュします。 これらのアクションにより、スナップショットのアプリケーション整合性が確保されます。 事後スクリプトでは、ネイティブ アプリケーション API を使用して IO を解凍します。そのため、アプリケーションは VM スナップショットの後に通常の操作を再開できます。
Azure Linux VM の事前スクリプトと事後スクリプトを構成する
PreScript と Post-Script を設定するには、次の手順を実行します。
バックアップする Linux VM にルート ユーザーとしてサインインします。
GitHub から VMSnapshotScriptPluginConfig.json をダウンロードし、バックアップするすべての VM の /etc/azure フォルダーにコピーします。 /etc/azure フォルダーが存在しない場合は、作成します。
バックアップする予定のすべての VM にアプリケーションのプリスクリプトとポストスクリプトをコピーします。 スクリプトは、VM 上の任意の場所にコピーできます。 VMSnapshotScriptPluginConfig.json ファイル内のスクリプトファイルのフルパスを必ず更新してください。
次のファイルを使用するには、対応する権限があることを確認してください。
VMSnapshotScriptPluginConfig.json:許可 600。 たとえば、このファイルに対する読み取りと書き込みのアクセス許可を持つのは root ユーザーのみであり、実行アクセス許可を持つユーザーは持たないようにする必要があります。
プリスクリプト ファイル: Permission 700。 たとえば、このファイルに対する読み取り、書き込み、および実行の権限を持つのは root ユーザーだけです。 ファイルはシェル スクリプトであると想定されていますが、理論的には、このスクリプトは内部的に生成したり、Python スクリプトなどの他のスクリプトを参照したりできます。
追記 許可 700。 たとえば、このファイルに対する読み取り、書き込み、および実行の権限を持つのは root ユーザーだけです。 ファイルはシェル スクリプトであると想定されていますが、理論的には、このスクリプトは内部的に生成したり、Python スクリプトなどの他のスクリプトを参照したりできます。
Von Bedeutung
このフレームワークは、ユーザーに多くの力を与えます。 フレームワークをセキュリティで保護し、重要なJSONおよびスクリプトファイルにアクセスできるの はroot ユーザーのみであることを確認します。 要件が満たされていない場合、スクリプトは実行されず、ファイル システムがクラッシュし、バックアップが不整合になります。
次の説明に従って VMSnapshotScriptPluginConfig.json を構成します。
pluginName: このフィールドはそのままにするか、スクリプトが期待どおりに動作しない可能性があります。
preScriptLocation: バックアップする VM 上のプレスクリプトの完全なパスを指定します。
postScriptLocation: バックアップする VM 上の事後スクリプトの完全なパスを指定します。
preScriptParams: prescriptに渡す必要のあるオプションのパラメータを指定します。 すべてのパラメーターは引用符で囲む必要があります。 複数のパラメーターを使用する場合は、パラメーターをコンマで区切ります。
postScriptParams: 事後スクリプトに渡す必要がある省略可能なパラメーターを指定します。 すべてのパラメーターは引用符で囲む必要があります。 複数のパラメーターを使用する場合は、パラメーターをコンマで区切ります。
preScriptNoOfRetries: エラーが発生した場合に、終了する前にプリスクリプトを再試行する回数を設定します。 0 は、1 回の試行のみを意味し、失敗した場合は再試行しません。
postScriptNoOfRetries を: 終了前にエラーが発生した場合に、事後スクリプトを再試行する回数を設定します。 0 は、1 回の試行のみを意味し、失敗した場合は再試行しません。
timeoutInSeconds: プリスクリプトとポストスクリプトの個々のタイムアウトを指定します (最大値は 1800 です)。
continueBackupOnFailure: プリスクリプトまたはポストスクリプトが失敗した場合に、Azure Backup をファイル システム整合性バックアップ/クラッシュ整合性バックアップにフォールバックする場合は、この値を true に設定します。 これを false 設定すると、スクリプトエラーが発生した場合にバックアップが失敗します (ただし、この設定に関係なく、クラッシュ整合性バックアップにフォールバックする単一ディスク VM がある場合を除きます)。 continueBackupOnFailure 値が false に設定されている場合、バックアップが失敗した場合、(規定された試行回数に対して) サービス内の再試行ロジックに基づいてバックアップ操作が再試行されます。
fsFreezeEnabled: ファイル システムの一貫性を確保するために、VM スナップショットの作成中に Linux fsfreeze を呼び出す必要があるかどうかを指定します。 アプリケーションが fsfreeze の無効化に依存しない限り、この設定 true に設定しておくことをお勧めします。
ScriptsExecutionPollTimeSeconds: 各ポーリングからスクリプト実行までの間に拡張機能がスリープ状態にする時間を設定します。 たとえば、値が 2 の場合、拡張機能は、事前/事後スクリプトの実行が 2 秒ごとに完了したかどうかを確認します。 取得できる最小値と最大値はそれぞれ 1 と 5 です。 値は厳密に整数である必要があります。
スクリプト フレームワークが構成されました。 VM バックアップが既に構成されている場合、次のバックアップによってスクリプトが呼び出され、アプリケーション整合性バックアップがトリガーされます。 VM バックアップが構成されていない場合は、Recovery Services コンテナーへの Azure 仮想マシンのバックアップを使用して構成します。
Azure Linux VM のアプリケーション整合性バックアップ エラーのトラブルシューティング
プリスクリプトとポストスクリプトの記述中に適切なログを追加し、スクリプトのログを確認してスクリプトの問題を修正してください。 スクリプトの実行にまだ問題がある場合は、次の表で詳細を参照してください。
エラー | エラーメッセージ | 推奨されるアクション |
---|---|---|
Pre-ScriptExecutionFailed (スクリプト実行失敗) | プリスクリプトがエラーを返したため、バックアップがアプリケーションと整合性を欠いている可能性があります。 | スクリプトの失敗ログを確認して、問題を修正します。 |
Post-ScriptExecutionFailed (英語) | 事後スクリプトは、アプリケーションの状態に影響を与える可能性のあるエラーを返しました。 | スクリプトの失敗ログを確認して問題を修正し、アプリケーションの状態を確認します。 |
プレスクリプトNotFound | プリスクリプトは、 VMSnapshotScriptPluginConfig.json 設定ファイルで指定された場所で見つかりませんでした。 | アプリケーション整合性バックアップを確保するために、構成ファイルで指定されたパスにプリスクリプトが存在することを確認します。 |
ポストスクリプトNotFound | 事後スクリプトは、 VMSnapshotScriptPluginConfig.json 構成ファイルで指定された場所で見つかりませんでした。 | アプリケーション整合性バックアップを確保するために、構成ファイルで指定されたパスに事後スクリプトが存在することを確認します。 |
正しくないプラグインホストファイル | VmSnapshotLinux 拡張子が付属している Pluginhost ファイルが破損しているため、プリスクリプトとポストスクリプトを実行できず、バックアップはアプリケーションの一貫性がありません。 |
VmSnapshotLinux拡張機能をアンインストールすると、次のバックアップで自動的に再インストールされ、問題が解決されます。 |
正しくないJSONConfigFile | VMSnapshotScriptPluginConfig.json ファイルが正しくないため、プリスクリプトとポストスクリプトを実行できず、バックアップはアプリケーションの一貫性がありません。 | GitHub からコピーをダウンロードし、再度構成します。 |
InsufficientPermissionforPre-Script | スクリプトを実行する場合、 root ユーザーはファイルの所有者であり、ファイルには 700 のアクセス許可が必要です (つまり、 所有者 のみが 読み取り、 書き込み、 および実行 のアクセス許可を持つ必要があります)。 | root ユーザーがスクリプトファイルの所有者であり、所有者のみが読み取り、書き込み、および実行の権限を持っていることを確認します。 |
InsufficientPermissionforPost-Script | スクリプトを実行する場合、root ユーザーはファイルの所有者であり、ファイルには 700 のアクセス許可が必要です (つまり、 所有者 のみが 読み取り、 書き込み、 および実行 のアクセス許可を持つ必要があります)。 | root ユーザーがスクリプトファイルの所有者であり、所有者のみが読み取り、書き込み、および実行の権限を持っていることを確認します。 |
Pre-ScriptTimeout (スクリプトタイムアウト前) | アプリケーション整合性バックアップの事前スクリプトの実行がタイムアウトしました。 | スクリプトを確認し、/etc/azure にある VMSnapshotScriptPluginConfig.json ファイルのタイムアウトを増やします。 |
ポストスクリプトタイムアウト | アプリケーション整合性バックアップのポストスクリプトの実行がタイムアウトしました。 | スクリプトを確認し、/etc/azure にある VMSnapshotScriptPluginConfig.json ファイルのタイムアウトを増やします。 |