実行中の Elastic Compute Service (ECS) インスタンスでは、データベースなどのアプリケーションの一部のデータがまだメモリに保存されているか、ストレージデバイスに書き込まれている可能性があります。スナップショットは、ディスクに書き込まれていないデータを記録できません。これは、スナップショットを使用してデータを復元する場合に、アプリケーションデータの損失またはデータの不整合が発生する可能性があります。Alibaba Cloud は、スナップショットサービスと Cloud Assistant を組み合わせて、アプリケーション整合性スナップショット機能を提供します。この機能は、スナップショットからデータを復元する際のアプリケーション内のデータ整合性を確保します。
背景情報
スナップショット整合性グループを作成するときにアプリケーション整合性スナップショット機能を有効にすると、システムはビジネスシナリオに基づいてアプリケーション整合性スナップショットまたはファイルシステム整合性スナップショットを作成します。次の表に、2 種類のスナップショットについて説明します。
項目 | アプリケーション整合性スナップショット | ファイルシステム整合性スナップショット |
データ整合性 | 保存データとアプリケーション (データベースなど) 内のデータ整合性を確保します。 | ファイルシステム内のデータ整合性を確保します。 |
実装 |
|
|
サポートされるシナリオ | アプリケーション整合性スナップショットは、データベースや重要な業務システムなど、データ整合性が必要なアプリケーションに適しています。 | ファイルシステム整合性スナップショットは、ファイルサーバーやドキュメント管理システムなど、ファイルシステム全体の整合性が必要なシナリオに適しています。 |
タグ | APPConsistent:True | FsConsistent:True |
アプリケーション整合性スナップショットのしくみ
次のセクションでは、アプリケーション整合性スナップショットのしくみについて説明します。
Linux インスタンス
Linux インスタンスでアプリケーション整合性スナップショット機能を有効にすると、システムはデフォルトでファイルシステム整合性状態になります。事前に準備した prescript.sh スクリプトと postscript.sh スクリプトを含むシェルスクリプトをアップロードすると、システムはスクリプトに基づいてアプリケーションの整合性をチェックします。チェックに合格すると、スナップショットはアプリケーション整合性スナップショットとしてマークされます。チェックに失敗すると、スナップショットはファイルシステム整合性スナップショットとしてマークされます。
次の表に、prescript.sh スクリプトと postscript.sh スクリプトについて説明します。
スクリプト名 | 機能 | タイプ | パス | 権限 | コンテンツ |
prescript.sh | アプリケーションに影響を与える可能性のある操作を実行する前に、アプリケーションへのすべての書き込み操作を一時停止するために使用されます。これにより、操作中に生成される新しいデータによるデータの不整合を防ぎます。 | シェル | /tmp/prescript.sh | ルートユーザーのみが、スクリプトに対する読み取り、書き込み、および実行の権限を持っています。 | ビジネス要件に基づいてカスタムスクリプトをコンパイルする必要があります。たとえば、「手順 1: prescript.sh スクリプトと postscript.sh スクリプトを作成する」の手順に従ってスクリプトをコンパイルします。 |
postscript.sh | データバックアップなど、アプリケーションに影響を与える可能性のある操作が完了すると、postscript.sh スクリプトが実行され、アプリケーションが復元され、書き込み操作が再開されます。 | シェル | /tmp/postscript.sh |
アプリケーション整合性スナップショットを作成するためのスクリプト名、スクリプトタイプ、およびストレージパスは固定されています。カスタムスクリプトをコンパイルするときは、固定値を使用してください。そうしないと、スクリプトが実行されない場合があります。
スナップショットを作成する ECS インスタンスでアプリケーション整合性スナップショット機能を有効にし、Cloud Assistant がインスタンスにインストールされているかどうかを確認します。
説明インスタンスに Cloud Assistant をインストールせずに [アプリケーション整合性スナップショットを有効にする] オプションを選択すると、必要な Cloud Assistant プラグインがインスタンスに自動的にインストールされます。
Cloud Assistant は ECS インスタンスにアクセスして関連コマンドを自動的に実行し、prescript.sh スクリプトを実行し、I/O 操作を一時停止し、スナップショットを作成します。
スクリプト設定が正しく、スクリプトが想定どおりに実行され、アプリケーション整合性スナップショットが作成されます。
権限、ストレージパス、スクリプト名などのスクリプト設定が無効であるか、スクリプトの実行に失敗した場合、アプリケーション整合性スナップショットの代わりにファイルシステム整合性スナップショットが作成されます。
Cloud Assistant は postscript.sh スクリプトにアクセスして I/O 操作を再開します。
Windows インスタンス
Windows インスタンスでアプリケーション整合性スナップショット機能を有効にすると、Cloud Assistant は VSS とともにアプリケーション整合性チェックを実行します。チェックに合格すると、スナップショットはアプリケーション整合性スナップショットとしてマークされます。チェックに失敗すると、スナップショットはファイルシステム整合性スナップショットとしてマークされます。
スナップショットを作成する ECS インスタンスでアプリケーション整合性スナップショット機能を有効にし、Cloud Assistant がインスタンスにインストールされているかどうかを確認します。
説明インスタンスに Cloud Assistant をインストールせずに [アプリケーション整合性スナップショットを有効にする] オプションを選択すると、必要な Cloud Assistant プラグインがインスタンスに自動的にインストールされます。
Cloud Assistant は ECS インスタンスにアクセスして関連コマンドを自動的に実行し、I/O 操作を一時停止し、スナップショットを作成します。
Cloud Assistant は VSS を呼び出し、すべての I/O 操作を一時停止します。
[Contain Writers by Default] オプションが選択されているかどうかを確認します。
オプションが選択されている場合、アプリケーション整合性スナップショットが作成されます。
オプションが選択されていない場合、ファイルシステム整合性スナップショットが作成されます。
I/O 操作を再開します。
制限
アプリケーション整合性スナップショットは、マルチアタッチ機能が無効になっている企業向け SSD (ESSD) でのみサポートされています。
同じ ECS インスタンスにアタッチされているクラウドディスクのアプリケーション整合性スナップショットを作成できますが、異なる ECS インスタンスには作成できません。
前提条件
ECS インスタンスが作成され、次のオペレーティングシステムバージョンのいずれかを実行しています。
Windows: Windows Server 2012 R2 以降。
Linux: CentOS 7.6 以降、Ubuntu 18.04 以降、または Alibaba Cloud Linux 2。
ECS インスタンスは [実行中] 状態です。Cloud Assistant はインスタンス上で通常の状態です。Cloud Assistant のステータスを表示する方法については、「Cloud Assistant のステータスを表示し、異常を処理する」をご参照ください。
Resource Access Management (RAM) ロールが ECS インスタンスにアタッチされ、アプリケーション整合性スナップショットの権限を含むカスタムポリシーが RAM ロールにアタッチされています。詳細については、「インスタンス RAM ロールの作成と ECS インスタンスへのアタッチ」をご参照ください。
説明アプリケーション整合性スナップショットを作成する場合、Cloud Assistant を呼び出して ECS インスタンスにアクセスし、コマンドを実行する必要があります。Cloud Assistant を呼び出す前に、RAM ロールを使用して Cloud Assistant に必要な権限を付与します。
AppSnapshotRoleName などのカスタム RAM ロールを構成します。
カスタムポリシーを RAM ロールにアタッチします。次のサンプルコードは、RAM ロールがスナップショットのクエリ、スナップショットの作成、タグの追加、およびディスク情報のクエリを行う権限を持っていることを示すカスタムポリシーを示しています。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeSnapshot*", "ecs:CreateSnapshot*", "ecs:TagResources", "ecs:DescribeDisks" ], "Resource": [ "*" ], "Condition": {} } ] }
手順
ECS コンソールの使用
Linux インスタンス
準備した prescript.sh スクリプトと postscript.sh スクリプトを事前に ECS インスタンスにアップロードします。
詳細については、「Workbench を使用して ECS インスタンスにファイルをアップロードまたは ECS インスタンスからファイルをダウンロードする」をご参照ください。
説明prescript.sh スクリプトと postscript.sh スクリプトについては、このトピックの「アプリケーション整合性スナップショットのしくみ」セクションをご参照ください。
ECS コンソール - スナップショット整合性グループ に移動します。
上部のナビゲーションバーで、管理するリソースのリージョンとリソースグループを選択します。
[スナップショット整合性グループ] タブで、[スナップショット整合性グループの作成] をクリックします。
[スナップショットの作成] ダイアログボックスで、次の表に示すパラメーターを構成して、スナップショット整合性グループを作成します。
デフォルトでは、[リソースタイプ] パラメーターは [インスタンス] に設定されています。
[インスタンスの選択] ドロップダウンリストから Linux インスタンスを選択します。次に、[クラウドディスクの選択] セクションで、インスタンスからスナップショットを作成する ESSD を選択します。
[高度な設定] を展開し、アプリケーション整合性スナップショット設定を構成します。
[アプリケーション整合性スナップショットの有効化] を選択し、スクリプトを正しく構成すると、アプリケーション整合性スナップショットが作成されます。
[アプリケーション整合性スナップショットの有効化] を選択したが、スクリプトを構成していないか、誤って構成した場合、ファイルシステム整合性スナップショットが作成されます。
説明インスタンスに Cloud Assistant をインストールせずに [アプリケーション整合性スナップショットを有効にする] を選択すると、必要な Cloud Assistant プラグインがインスタンスに自動的にインストールされます。
[有効] を選択してファイルシステム I/O の一時停止と再開機能を有効にし、タイムアウト期間を指定することもできます。
説明[ファイルシステム I/O の一時停止と再開] 機能を有効にすると、スナップショットの作成中にシステムはファイルシステムへの I/O 操作を一時停止し、進行中の I/O 操作によって発生するデータの不整合を防ぎます。[タイムアウト期間] パラメーターを 16 より大きい値に設定し、I/O 操作の一時停止が期間内に完了しない場合、I/O 操作の一時停止は失敗し、データの不整合の問題が発生する可能性があります。
パラメーターについては、このトピックの「手順」セクションをご参照ください。
[OK] をクリックします。
スナップショット整合性グループが作成されると、Cloud Assistant コマンド ID とタスク ID を含むメッセージが表示されます。タスク ID に基づいて、アプリケーション整合性スナップショットが作成されたかどうかを確認できます。
[ECS クラウドアシスタント] ページの [コマンド実行結果] タブで、タスク ID をクリックし、アプリケーション整合性スナップショットが作成されたかどうかを確認します。
前の図に示すように、[終了コード] の値は
0
です。これは、Cloud Assistant でアプリケーション整合性スナップショットが想定どおりに作成されたことを示します。この場合、スナップショット整合性グループの ID がコマンド出力に表示されます。説明[終了コード] の値が
0
でない場合は、エラーが発生しています。[終了コード] 列の値に基づいて問題のトラブルシューティングを行ってください。詳細については、このトピックの「エラーコード」セクションをご参照ください。作成されたスナップショット整合性グループとグループ内のスナップショットに関する情報を表示します。
ECS コンソール - スナップショット整合性グループ に移動します。
[スナップショット整合性グループ] タブで、作成したスナップショット整合性グループを見つけ、スナップショット整合性グループの ID をクリックしてスナップショットの詳細を表示します。
[スナップショット情報] セクションで、タグに基づいてスナップショットがアプリケーション整合性スナップショットかファイルシステム整合性スナップショットかを確認します。
AppConsistent:True
タグが表示されている場合、アプリケーション整合性スナップショットが作成されています。FsConsistent:True
タグが表示されている場合、ファイルシステム整合性スナップショットが作成されています。
Windows インスタンス
ECS コンソール - スナップショット整合性グループ に移動します。
上部のナビゲーションバーで、管理するリソースのリージョンとリソースグループを選択します。
[スナップショット整合性グループ] タブで、[スナップショット整合性グループの作成] をクリックします。
[スナップショットの作成] ダイアログボックスで、次の表に示すパラメーターを構成して、スナップショット整合性グループを作成します。
デフォルトでは、[リソースタイプ] パラメーターは [インスタンス] に設定されています。
[インスタンスの選択] ドロップダウンリストから Windows インスタンスを選択します。次に、[クラウドディスクの選択] セクションで、インスタンスからスナップショットを作成する ESSD を選択します。
[詳細設定] を展開し、アプリケーション整合性スナップショット設定を構成します。
[アプリケーション整合性スナップショットを有効にする] と [デフォルトでライターを含める] を選択すると、アプリケーション整合性スナップショットが作成されます。
[アプリケーション整合性スナップショットを有効にする] のみを選択した場合、ファイルシステム整合性スナップショットが作成されます。
説明インスタンスに Cloud Assistant をインストールせずに [アプリケーション整合性スナップショットを有効にする] を選択すると、必要な Cloud Assistant プラグインがインスタンスに自動的にインストールされます。
パラメーターについては、このトピックの「手順」セクションをご参照ください。
[OK] をクリックします。
スナップショット整合性グループが作成されると、Cloud Assistant コマンド ID とタスク ID を含むメッセージが表示されます。
[コマンド実行結果][ECS Cloud Assistant] ページの タブで、タスク ID をクリックし、アプリケーション整合性スナップショットが作成されたかどうかを確認します。
前の図に示すように、[終了コード] の値は
0
です。これは、Cloud Assistant でアプリケーション整合性スナップショットが想定どおりに作成されたことを示します。この場合、スナップショット整合性グループの ID がコマンド出力に表示されます。説明[終了コード] の値が
0
でない場合は、エラーが発生しています。[終了コード] 列の値に基づいて問題のトラブルシューティングを行ってください。詳細については、このトピックの「エラーコード」セクションをご参照ください。作成されたスナップショット整合性グループとグループ内のスナップショットに関する情報を表示します。
ECS コンソール - スナップショット整合性グループ に移動します。
[スナップショット整合性グループ] タブで、作成したスナップショット整合性グループを見つけ、スナップショット整合性グループの ID をクリックしてスナップショットの詳細を表示します。
[スナップショット情報] セクションで、タグに基づいてスナップショットがアプリケーション整合性スナップショットかファイルシステム整合性スナップショットかを確認します。
AppConsistent:True
タグが表示されている場合、アプリケーション整合性スナップショットが作成されています。FsConsistent:True
タグが表示されている場合、ファイルシステム整合性スナップショットが作成されています。
API 操作の呼び出し
RunCommand 操作を呼び出して、Cloud Assistant を使用して 1 つ以上の 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
は、Cloud Assistant コマンドを実行するために使用される app-snapshot-plugin プラグインを示します。--params=
は、プラグインの構成パラメーターを示します。次の表に、これらのパラメーターについて説明します。パラメーター
タイプ
必須
説明
RamRoleName
文字列
はい
ECS インスタンスにアタッチされている RAM ロール。
EnableFsFreeze
ブール値
いいえ
スナップショットを作成する前に Linux FsFreeze 機能を有効にして、ファイルシステムを読み取り専用状態に設定するかどうかを指定します。
デフォルト値: True。
TimeoutInSeconds
整数
いいえ
I/O 操作のタイムアウト期間。単位: 秒。
デフォルト値: 30。
PreScriptPath
文字列
いいえ
prescript.sh スクリプトが保存されているパス。例: /tmp/prescript.sh。prescript.sh スクリプトは、次の要件を満たしている必要があります。
権限: 権限値を 700 に設定します。これは、ルートユーザーのみが読み取り、書き込み、および実行の権限を持っていることを示します。
スクリプトコンテンツ: ビジネス要件に基づいてカスタムスクリプトコンテンツをコンパイルします。
重要Linux インスタンスのアプリケーション整合性スナップショットを作成する場合、このパラメーターは必須です。スクリプトに権限、パス、ファイル名などの無効な設定が含まれている場合、アプリケーション整合性スナップショットの代わりにファイルシステム整合性スナップショットが作成されます。
PostScriptPath
文字列
いいえ
postscript.sh スクリプトが保存されているパス。例: /tmp/postscript.sh。postscript.sh スクリプトは、次の要件を満たしている必要があります。
権限: 権限値を 700 に設定します。これは、ルートユーザーのみが読み取り、書き込み、および実行の権限を持っていることを示します。
スクリプトコンテンツ: ビジネス要件に基づいてカスタムスクリプトコンテンツをコンパイルします。
重要Linux インスタンスのアプリケーション整合性スナップショットを作成する場合、このパラメーターは必須です。スクリプトに権限、パス、ファイル名などの無効な設定が含まれている場合、アプリケーション整合性スナップショットの代わりにファイルシステム整合性スナップショットが作成されます。
ExcludeDiskId
文字列
いいえ
スナップショットから除外するクラウドディスク。
Name
文字列
はい
スナップショット整合性グループの名前。
Description
文字列
いいえ
スナップショット整合性グループの説明。
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
は、Cloud Assistant コマンドを実行するために使用される app-snapshot-plugin-win プラグインを示します。--params=
は、プラグインの構成パラメーターを示します。次の表に、これらのパラメーターについて説明します。パラメーター
タイプ
必須
説明
RamRoleName
文字列
はい
ECS インスタンスにアタッチされている RAM ロール。
EnableWriters
ブール値
いいえ
アプリケーション整合性スナップショットを作成するかどうかを指定します。有効な値:
true
false
デフォルト値: true。
ExcludeDiskId
文字列
いいえ
スナップショットから除外するクラウドディスク。
Name
文字列
はい
スナップショット整合性グループの名前。
Description
文字列
いいえ
スナップショット整合性グループの説明。
InvokeId
の戻り値に基づいて、DescribeInvocationResults 操作を呼び出します。アプリケーション整合性スナップショットが作成されたかどうかを確認します。
ExitCode
はエラーコードを返します。値
0
は、アプリケーション整合性スナップショットが作成されたことを示します。ExitCode の値が
0
でない場合は、エラーが発生しています。ExitCode 列に返されたエラーコードに基づいてエラーを修正してください。詳細については、このトピックの「エラーコード」セクションをご参照ください。
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 | 1 つ以上の条件が満たされていません。次のいずれかのエラーが発生している可能性があります。
|
2 |
|
3 | 次のいずれかのエラーが発生している可能性があります。
|
4 | スナップショット整合性グループを作成できません。 |
5 | スナップショット整合性グループが予期された状態ではありません。 |
6 | スナップショット整合性グループの作成リクエストがタイムアウトしました。 |
7 | スナップショット整合性グループ内のディスクスナップショットが予期された状態ではありません。 |
8 | スナップショットにタグを追加できません。 |
9 | prescript.sh スクリプトを実行できません。 |
10 | postscript.sh スクリプトを実行できません。 |
11 | I/O 操作を一時停止できません。 |
12 | I/O 操作を再開できません。 |
13 | インスタンスに RAM ロールがアタッチされていません。 |
14 | スナップショットの数が上限を超えました。 |
15 | スナップショットが予期された状態ではありません。 |
16 | 前のスナップショットが作成中のため、新しいスナップショットを作成できません。 |
255 | 不明なエラーが発生しました。 |
関連情報
MySQL または SQL Server データベースのアプリケーション整合性スナップショットを作成できます。詳細については、「MySQL がデプロイされている Linux インスタンスのアプリケーション整合性スナップショットを作成するためのベストプラクティス」または「SQL Server がデプロイされている Windows インスタンスのアプリケーション整合性スナップショットを作成するためのベストプラクティス」をご参照ください。