外部バックアップ
外部バックアップ
外部バックアップは、現時点でデータベース全体のバックアップに推奨される最適な方法です。外部バックアップは、既存のシステム・バックアップ手順に簡単に統合でき、通常はダウンタイムなしでバックアップできることを見越しておけます。外部バックアップは主に、論理ディスク・ボリュームの有効な “スナップショット” を迅速に作成するテクノロジと共に使用します。このようなテクノロジは、ストレージアレイからオペレーティング・システム、ディスクの単純なミラーリングに至るまで、さまざまなレベルで存在します。このセクションでは、スナップショット・テクノロジが使用できないシステムに関する特別な考慮事項についても説明します。
スナップショットの整合性を確保するために、InterSystems IRIS には、スナップショットの作成中にデータベースへの書き込みをフリーズする方法があります。スナップショットの作成中は、データベース・ファイルへの物理的な書き込みのみがフリーズされ、ユーザ・プロセスによるメモリ内の更新は引き続き実行できます。このスナップショットは通常、システムで使用中のファイル・システムすべてのスナップショットになります。このスナップショットには、少なくとも InterSystems IRIS データベースが使用するすべてのディレクトリが何らかの形で収録されています。このディレクトリには、インストール・ディレクトリ、データベース・ディレクトリ、ジャーナル・ディレクトリおよび代替ジャーナル・ディレクトリ、WIJ ディレクトリ、システムで使用する外部ファイルを格納したあらゆるディレクトリなどがあります。書き込みができるようになったら、スナップショットをバックアップすることができます。その後、プロダクションに再結合するか、またはウォーム・バックアップとしてオンラインのままにしておくことができます (使用されている具体的なテクノロジによって異なる)。
使用中のデータベースの整合性チェック実行時にエラーが誤って報告されるという問題を回避するために、ファイル・システムのスナップショットが取られた直後にデータベースがチェックされるように、整合性チェックをこのセクションで説明したような手順に統合することができます。(データベースの整合性のチェックの詳細は、"構造的な整合性の検証" を参照してください。)
以下の表に、外部バックアップ方法のメリットとデメリットを示します。
メリット | デメリット |
---|---|
ほとんどのシステムで、ユーザの操作が停止されることなく、ダウンタイムなしのバックアップが可能です。 |
書き込みのフリーズが 10 分を超える場合に、引き続きユーザに実行を許可するには、特別な考慮が必要になります。 |
既存のバックアップ手順と簡単に統合できます。 |
データベースをフリーズするクラス・メソッドは Backup.General.ExternalFreeze()Opens in a new tab で、フリーズを解除するクラス・メソッドは Backup.General.ExternalThaw()Opens in a new tab です。書き込みの停止に加えて、フリーズする方法では、ジャーナル・ファイルの切り替えやジャーナルへのバックアップ・マーカの書き込みも処理されます。データベースの物理的な書き込みがフリーズされている間も、ジャーナル・ファイルには引き続き正常に書き込まれます。データベースの物理的な書き込みがフリーズしている間にシステムがクラッシュした場合、通常どおり起動時にジャーナルからデータがリカバリされます。
外部バックアップを設定するには、以下の手順を実行するスクリプトを記述します。
-
Backup.General.ExternalFreeze()Opens in a new tab メソッドを使用して、データベースへの書き込みをフリーズします。このメソッドをさまざまなプラットフォームで使用する例が、クラス・ドキュメントに含まれています。
Note:セキュリティ構成で、バックアップ・スクリプトがデータベース資格情報を提供するように求められる場合、必要な資格情報が含まれているファイルから入力をリダイレクトすることにより、これを実行できます。あるいは、OS レベルの認証を有効にし、スクリプトを実行している OS ユーザの InterSystems IRIS アカウントを作成できます。
-
外部のスナップショット・ユーティリティを使用して、ファイル・システムのスナップショットを作成します。
-
Backup.General.ExternalThaw()Opens in a new tab メソッドを使用して、データベース書き込みを再開します。
Note:Backup.General.ExternalThaw()Opens in a new tab メソッドでライト・デーモンが再開されず、インスタンスのフリーズが解除されない場合、-W オプションを指定して irisstat コマンドを発行することで、これを行うことができます(このオプションでは、バックアップ以外が原因で発生したハングまたは一時停止の場合、ライト・デーモンのフリーズは解除されません)。
-
バックアップ・メディアにスナップショットをコピーします。
-
バックアップが完了したら、Backup.General.ExternalSetHistory()Opens in a new tab メソッドを使用して、バックアップをバックアップ履歴に記録できます。バックアップを記録することで、[ジャーナル設定] ページの [ジャーナルファイルを削除するタイミング]→[この回数のバックアップ成功後] の設定 (既定値は 2) によっては、ジャーナルの削除がトリガされる可能性があることに注意してください。詳細は、"ジャーナル設定の構成" を参照してください。
これらのメソッドのプラットフォーム固有の例については、"Backup.GeneralOpens in a new tab" を参照してください。
スナップショット・テクノロジが使用できないシステムの場合、上記のスナップショットの作成をファイル・システムのコピーに置き換えることにより、外部バックアップ・アプローチで低速のファイル・システム・コピーを使用できます。これは以下のいずれかの方法で実行するか、または必要に応じてオンライン・バックアップを代替手段として使用することができます。
-
ダウンタイムの追放:Backup.General.ExternalFreeze()Opens in a new tab を呼び出すときに ExternalFreezeTimeOut パラメータの値を指定し、フリーズ中でもデータベースの更新をメモリのバッファに格納できるように、十分なデータベース・キャッシュを構成しておきます。この場合、ユーザは物理的な書き込みがフリーズしている間に、最大で ExternalFreezeTimeOut に指定した値まで操作を続行できます。ジャーナリングは、書き込みがフリーズされている間にシステム・クラッシュが発生した場合に、データが失われないようにするうえで重要です。クラッシュが発生した場合は、通常よりもシステムの起動に時間がかかる可能性があります。[エラー発生時に凍結する] に対するジャーナルの設定は、[はい] に設定する必要があります (詳細は、"ジャーナル入出力エラー" を参照)。
-
ユーザ操作の停止:フリーズ時間として想定する時間の既定値を 10 分にします。この時間が経過すると、Backup.General.ExternalThaw()Opens in a new tab が呼び出されるまで、ユーザの操作は一時停止状態になります。
バックアップされているインスタンスがミラーのプライマリ・フェイルオーバー・メンバである場合 ("ミラーリング" を参照)、外部フリーズが Backup.General.ExternalFreeze()Opens in a new tab の ExternalFreezeTimeOut パラメータの指定よりも長く更新を中断しないようにする必要があります。指定時間より長い中断が起こると、ミラーがバックアップ・フェイルオーバー・メンバにフェイルオーバーし、その結果、進行中のバックアップ操作が終了されてしまいます。
InterSystems IRIS は、Windows のボリューム・シャドウ・コピー・サービス (VSS) をサポートしており、その際にはデータベースに代わってライタとして動作します。VSS シャドウに含まれる InterSystems IRIS データベースのコピーには、トランザクション上の論理的な整合性はありませんが、物理的な整合性があるため、個別にリストアできます。リストアしたデータベースのトランザクション上の整合性を確保するには、ジャーナル・ファイルもリストアする必要があります。VSS シャドウの作成時にマウントされたデータベースのみが VSS シャドウに含まれます。
InterSystems IRIS 用 VSS ライタは、管理者のみが起動できます。
Windows システムでは、iris.cpf ファイルの EnableVSSBackup パラメータは既定で 1 (有効) に設定されています。InterSystems IRIS の起動時に、“InterSystems IRIS VSS ライタが起動しました” というメッセージがメッセージ・ログに書き込まれます。VSS のシャドウ・コピーを作成すると、InterSystems IRIS は、メッセージ・ログのメッセージに示されているように、Backup.General.ExternalFreeze()Opens in a new tab および Backup.General.ExternalThaw()Opens in a new tab を自動的に呼び出します。
VSS を使用する場合は、vSphere のスナップショット・オプション [Quiesce guest file system] を使用するようにします。このオプションは VSS コールバックを呼び出して、スナップショットの前にデータベースをフリーズし、スナップショットの後にデータベースのフリーズを解除します。メッセージ・ログには、VSS Writer: OnFreeze と VSS Writer: OnThaw が表示されます。
一方、このオプションを使用しない場合、vSphere はメモリ・スナップショットのみを実行し、メッセージ・ログにこれらのメッセージは含まれません。
コマンド行でのバックアップ
以下のコマンド行オプションを使用して、バックアップを実行できます。
Backup.General.CommandLineFreeze()Opens in a new tab クラス・メソッドを呼び出します。これは、インスタンスがシャード・クラスタのメンバであるかどうかを判断し、適切なクラス・メソッドを以下のように呼び出します。
-
インスタンスがシャード・クラスタのメンバの場合、Backup.General.CommandLineFreeze() は Backup.Sharded Cluster.ExternalFreeze()Opens in a new tab クラス・メソッドを呼び出します。
-
インスタンスがシャード・クラスタのメンバでない場合、Backup.General.CommandLineFreeze() は Backup.General.ExternalFreeze()Opens in a new tab クラス・メソッドを呼び出します。
Backup.General.CommandLineThaw()Opens in a new tab クラス・メソッドを呼び出します。これは、インスタンスがシャード・クラスタのメンバであるかどうかを判断し、適切なクラス・メソッドを以下のように呼び出します。
-
インスタンスがシャード・クラスタのメンバの場合、Backup.General.CommandLineThaw() は Backup.Sharded Cluster.ExternalThaw()Opens in a new tab クラス・メソッドを呼び出します。
-
インスタンスがシャード・クラスタのメンバでない場合、Backup.General.CommandLineThaw() は Backup.General.ExternalThaw()Opens in a new tab クラス・メソッドを呼び出します。
完了すると、コマンド行メソッドはバイナリの成功と失敗を OS の呼び出し元に渡し、プロセスを停止します。テストが目的の場合は、CommandLineFreeze() または CommandLineThaw() の doHalt パラメータを 0 に設定して、停止する代わりにステータスを返すことができます。
コマンド行引数 timeout は、ExternalFreeze() または ExternalThaw() の ExternalFreezeTimeout 引数に対応します。通常はシステムの既定値 (600 秒) で十分ですが、低速のシステムではタイムアウトを延長することもできます。時間切れになると、システムはデータベースの書き込みを停止するだけでなく、すべての操作を停止します。
コマンド行引数 namespace は、ExternalFreeze() または ExternalThaw() の ShardMasterNamespace 引数に対応します。namespace 引数は、一般的なケースでは無視され、シャード・ケースではオプションになります。CommandLineFreeze() と CommandLineThaw() は、既定ではクラスタの MasterNamespace メタデータ値になります。データ・マスタから呼び出される場合は、既定値で十分です。
推奨される使用法を以下に示します。
-
シャード化されていないすべてのデータ・サーバ、またはシャード・データ・マスタに対してのみ、iris freeze <instance> を呼び出します。
-
バックアップ用のスナップショットを撮ります。
-
iris freeze <instance> を呼び出した場所で、iris thaw <instance> を呼び出します。