障害復元力について
RDU データベースでは、アプリケーション障害、システム障害、停電のような予測できない問題などが原因で発生するデータベースの破損を防止するために、 先行書き込みロギング と呼ばれる手法を使用しています。
先行書き込みロギングでは、データベース ファイルに変更を書き込む前に、すべてのデータベース変更の記述をデータベース ログ ファイルに書き込みます。このメカニズムによって、システム障害の原因になった可能性がある不適切なデータベース書き込みを修復できます。
RDU サーバでは、起動されるたびに自動回復が実行されます。この回復処理時に、データとデータベース ファイルとの同期をとるために、データベース ログ ファイルが使用されます。データベース ログには書き込まれたものの、データベースには書き込まれていなかったデータベース変更は、この自動回復の処理中にデータベースに書き込まれます。
このようにして、先行書き込みロギングによって、RDU サーバの再起動時にデータベースが自動的に修復されるので、RDU サーバの障害時にデータベースが破損しないことが実質的に保証されます。
先行書き込みロギングが正しく機能するには、次の条件が必要です。
• ファイル システムおよび物理ストレージが、要求時にデータを確実に物理ストレージ内にフラッシュするように設定されている必要があります。たとえば、書き込みキャッシュが SDRAM だけで構成されたストレージ システムは、システム障害中にデータが失われるので、適切ではありません。ただし、ディスクアレイの書き込みキャッシュがバッテリー バックアップされていて、システム障害時にもデータが失われないことが保証されている場合は正しく機能します。システムがバッテリーによりバックアップされた書き込みキャッシュを備えていない場合、要求時には、メモリ内のデータ キャッシュが実行される代わりにデータ ディスクがフラッシュされます。
• ファイル システムは、RDU データベースのブロック サイズに合せて、ブロック サイズが 8192 バイトに設定されている必要があります。Solaris では、通常、明示的に調整しない限り、この設定がデフォルトです。
データベース ファイル
RDU データベースでは、ファイルが格納されたパーティションをマウントしたファイル システムを使用して、データがバイナリ ファイルに保存されます。システム障害発生後の回復時間が長くならないようにファイル システムを選択し、設定することがきわめて重要です。
データベース ファイルは RDU の動作にとってきわめて重要です。したがって、誤って削除するなどの手作業による操作が行われないように、データベース ファイルを保護するための特別な予防措置を講じる必要があります。これらの重要ファイルを保護するための標準的なシステム管理方法に従ってください。たとえば、これらのファイルには、root ユーザだけがアクセス可能なアクセス権を与える必要があります。また、運用中のシステムには root ユーザではなく、root ユーザよりも権限の低いユーザとしてログインし、sudo コマンドを使用して root 特権が必要なタスクを実行することも、有効な方法です。
データベース ストレージ ファイル
RDU サーバは、データベース ディレクトリにある bpr.db というファイルに自身のデータベースを格納します。このディレクトリは BPR_DATA/rdu/db ディレクトリにあり、コンポーネントのインストール時に BPR_DATA パラメータを指定することで設定します。データベースの移動の詳細については、「データベースの場所の変更」を参照してください。
(注) 通常、データベース ファイルはランダムにアクセスされます。したがって、最高のデータベース パフォーマンスを得るためには、シーク時間が最も速く、回転アクセス レイテンシが最も小さいディスクを選択する必要があります。
データベースのトランザクション ログ ファイル
RDU サーバでは、データベースのトランザクション ログは 10 MB のファイルに保存され、そのファイルはデータベースのログ ディレクトリに保存されます。このディレクトリは、BPR_DBLOG パラメータを指定することでインストール時に設定します。ログ ディレクトリは、
BPR_DBLOG/rdu/dblog ディレクトリにあります。トランザクション ログの新しいディレクトリへの移動の詳細については、「データベースの場所の変更」を参照してください。
データベースのログ ファイルの名前には、最初に log.00000001、次に log.00000002 というように連番が付けられます。
(注) トランザクション ログが保存されるディスクは、通常、シーケンシャルにアクセスされるので、データはログ ファイルの最後に追加されます。最高のデータベース パフォーマンスを達成するには、このアクセス パターンを効率的に処理できるディスクを選択する必要があります。システム上で最も高速なディスクにデータベースのトランザクション ログ ディレクトリを置くことをお勧めします。また、1 GB のディスク容量を使用可能にしてください。
自動ログ管理
データベースのトランザクション ログ ファイルは、トランザクション データのデータベースへの書き込みが完了するまで、そのデータを保存しておくために使用されます。その後、トランザクション ログ データは冗長になり、ファイルがシステムから自動的に削除されます。通常の状況では、データベースのトランザクション ログ ディレクトリ内にあるログ ファイルの数は数個以内にする必要があります。時間の経過とともに古いトランザクション ログはなくなり、新しいトランザクション ログが作成されます。
注意 データベースのトランザクション ログは、データベースにとって不可欠です。トランザクション ログ ファイルを手動で削除すると、データベースが破損します。
各種データベース ファイル
データベース ディレクトリには、他にもデータベースの動作に不可欠なファイルが保存されています。これらのファイルは、 rdu.db ファイルとともに BPR_DATA/rdu/db ディレクトリにあり、データベース バックアップの一環としてコピーされます。
• DB_VERSION:データベースの物理的および論理的なバージョンを識別するためのもので、RDU によって内部で使用されます。
• history.log :ログ ファイルの自動的な削除、バックアップ、回復、復元処理などの不可欠なデータベース管理タスクに関するロギング動作のために使用されます。このログ ファイルは、管理者に有用な履歴情報を提供するだけでなく、RDU のデータベース処理にとっても非常に重要です。
ディスク容量の要件
完全に実装されたデータベースのサイズは、次の多くの要素で決まります。
• RDU が管理するデバイス オブジェクト
• 各オブジェクト上に保存されているカスタム プロパティ
• 各デバイスについてトラッキングされたデバイス履歴レコード
各パーティション上で必要なディスク容量の概算値は、次のとおりです。
• BPR_DATA(デバイス オブジェクトごとに約 3 ~ 5 KB)
• BPR_DBLOG(500 MB 以上)
注意
これらの数値は、単なる指針として示したものなので、通常のシステム監視の必要がなくなるわけではありません。
disk_monitor.sh ツールを使用すると、使用可能なディスク容量を監視したり、管理者に警告したりできます。詳細については、「disk_monitor.sh ツールの使用方法」を参照してください。
ディスク容量不足の対処方法
RDU サーバでディスク容量が不足すると、syslog ファシリティを通じて syslog アラートが生成され、RDU ログが記録されます。その後、RDU サーバは自動的に再起動を試みます。RDU サーバが再起動を試みたときに out of disk space
エラーが再び発生し、もう一度再起動が試みられる場合があります。
RDU サーバは、空きディスク容量が使用可能になるまで、繰り返し再起動しようとします。空き容量がほぼなくなっているディスク上である程度のディスク領域を解放すると、次の再起動で RDU が正常に起動します。
データベースのサイズが増大して現在のディスク パーティションの容量を超えた場合、そのデータベースを新しいディスクまたはパーティションに移動する必要があります。この操作を行う方法については、「データベースの場所の変更」を参照してください。
(注) ディスク容量の使用率を監視して障害を防止するのが望ましい方法です。詳細については、「disk_monitor.sh ツールの使用方法」を参照してください。
バックアップと回復
RDU サーバは、サーバを停止したり、サーバの活動を一時停止したりしなくても実行できる、効率性の高いバックアップ処理をサポートしています。データベースのバックアップおよび回復は、次の手順から構成されます。
• バックアップ:稼働中のサーバから RDU データベースのスナップショットをとります。
• 回復:データベース スナップショットを再利用するための準備をします。
• 復元:回復したデータベース スナップショットを RDU サーバにコピーします。
これらの手順のそれぞれに自動ツールが用意されています。これらのツールは対話モードまたはサイレント モードで使用できますが、これらのツールを使用するには root 特権が必要です。
データベースのバックアップ
バックアップとは、データベース ファイルをバックアップ ディレクトリにコピーする処理です。そのときに、これらのファイルを圧縮し、テープやその他のアーカイブに保存することができます。
RDU データベースのバックアップは、サーバのアクティビティを中断しないでファイルをコピーするだけなので、非常に効率的です。ただし、RDU データベース ディスクにアクセスするため、バックアップを行うと RDU のパフォーマンスが低下する場合があります。その逆の場合もあります。バックアップ中に発生した RDU のアクティビティにより、バックアップのパフォーマンスが低下します。そのため、バックアップは、RDU の使用率の低い時間帯に行う必要があります。
バックアップのパフォーマンスは、同時に実行されているシステム アクティビティ以外に、基礎となっているディスクおよびファイル システムのパフォーマンスからも影響を受けます。基本的にバックアップ速度は、データベース ファイルをコピー元からコピー先へコピーする速度と同じです。
BPR_HOME/rdu/bin ディレクトリにある backupDb.sh ツールを使用して、データベースのバックアップを行います。
• このツールを使用するには、バックアップ ファイルを保存するバックアップ先ディレクトリを指定する必要があります。このディレクトリは、現在のデータベース ファイル サイズの 120% に相当する使用可能ディスク容量があるディスクまたはパーティション上に存在する必要があります。
• 次の例で説明するように、このツールは、ユーザが指定したディレクトリの下に、タイムスタンプ付きのサブディレクトリを自動的に作成し、そこにバックアップを保存します。
例
backupDb.sh ツールの使用例を次に示します。
# backupDb.sh /var/backup
/var/backup には、データベースのバックアップ ディレクトリを指定します。
この例では、バックアップするすべてのデータベース ファイルは /var/backup/rdu-backup- 20020925-130345 というディレクトリに格納されます。最下位のサブディレクトリ( rdu-backup-20020925-130345 )は自動的に作成され、現在のタイムスタンプが付けられます。
(注) タイムスタンプ付きのサブディレクトリの形式は、rdu-backup-yyyyMMdd-HHmmss です。この例では、サブディレクトリは rdu-backup-20060427-175430 になります。これは、そのディレクトリに 2006 年 4 月 27 日午後 5 時 54 分 30 秒に開始したバックアップが保存されていることを意味しています。
また、 backupDb.sh ツールは、自動的に経過を画面にレポートし、その動作を history.log に記録します。
(注) backupDb.sh ツールを使用するときに、-help オプションを使用すると、使用状況情報を取得できます。また、必要であれば、-nosubdir というオプションのフラグを使用して、サブディレクトリの自動作成をディセーブルにできます。
データベースの回復
データベースの回復とは、データベースを一貫性のある状態に戻す処理です。バックアップは稼働中の RDU 上で行われるので、データベースはコピー中に変更される場合があります。ただし、データベースのログ ファイルによって、データベースを一貫性のある状態に戻せることが保証されています。
回復は、データベースのスナップショットに対して行われます。つまり、このタスクは、稼働中の RDU サーバ上のデータベースには作用しません。回復タスクは、バックアップの直後か、または、データベースを RDU サーバに復元する前に実行できます。
(注) シスコでは、バックアップを行うたびに、その直後に回復を行うことを推奨しています。この方法をとると、緊急時にバックアップしたデータベースをより速やかに復元できます。
データベースの回復に要する時間は、バックアップの一環としてコピーするデータベースのログ ファイルの数によって決まり、したがって、バックアップの実行時の RDU のアクティビティ レベルによって決まります。バックアップの実行時に RDU が同時に実行している活動の数が多いほど、バックアップの一環としてコピーする必要があるトランザクション ログ ファイルの数が多くなり、回復に要する時間が長くなります。一般に、データベースの回復の所要時間は、トランザクション ログ ファイルあたり 10 ~ 60 秒です。
BPR_HOME/rdu/bin ディレクトリにある recoverDb.sh ツールを使用して、データベースのスナップショットの回復を行います。このツールを使用するときは、バックアップの場所を指定する必要があります。このディレクトリでは、回復も行われます。
例
recoverDb.sh ツールの使用例を次に示します。
# recoverDb.sh /var/backup/rdu-backup-20060427-130345
この例では、 /var/backup/rdu-backup-20060427-130345 ディレクトリにあるスナップショットを一貫性のある状態に回復します。回復処理の経過は画面に表示され、そのアクティビティはスナップショット ディレクトリにある history.log ファイルに記録されます。
(注) recoverDb.sh ツールを使用するときに、-help オプションを使用して、ツールの使用状況情報を取得できます。
データベースの復元
データベースの復元とは、あらかじめ回復したデータベースのスナップショットを、RDU サーバによって使用されるデータベース上の場所にコピーする処理です。復元できるのは、あらかじめ回復しておいたデータベースだけです。
データベースの復元とは現行の RDU データベースの交換を意味するので、最初に古いデータベースを適切に削除し、アーカイブすることが非常に重要になります。
(注) 置換中にデータベースの削除を絶対に行わないでください。古いデータベースのコピーを残しておくと、将来のシステム診断が簡単になる場合があります。
BPR_HOME/rdu/bin ディレクトリにある restoreDb.sh ツールを使用して、現行の RDU データベースを別のデータベースと置換します。このツールを使用するときは、入力ディレクトリを指定する必要があります。このディレクトリには、RDU サーバに復元するデータベースの、回復したバックアップ スナップショットが含まれている必要があります。
(注) restoreDb.sh ツールを実行する前に、RDU サーバを停止する必要があります。また、データベースをバックアップしてから、データベース ファイルを rdu/db ディレクトリおよび rdu/dblog ディレクトリから削除する必要もあります。
例
restoreDb.sh ツールの実行例を次に示します。
# restoreDb.sh /var/backup/rdu-backup-20060427-130345
この例では、 /var/backup/rdu-backup-200604275-130345 ディレクトリにあるデータベースが RDU サーバに復元されます。
(注) restoreDb.sh ツールを使用するときに、-help オプションを使用すると、このツールについての使用状況情報を取得できます。
復元処理の完了後は、RDU を再起動する必要があります。RDU ログ ファイルには、起動が成功したことを示すメッセージが書き込まれます。
このツールを実行すると、経過がモニタに表示され、その動作が history.log ファイルに記録されます。
データベースの場所の変更
あるパーティションまたはディスクから、同じシステム上の別のパーティションまたはディスクにデータベースを移動することができます。管理上の理由で、この処理が必要になる場合があります。この処理を行うには、RDU サーバおよび BAC プロセス ウォッチドッグを停止する必要があります。
データベースの場所を変更する処理では、システム パラメータを変更し、該当のファイルを新しい場所にコピーします。次のパラメータの一方または両方を調整できます。
• BPR_DATA :このパラメータは、インストール時に最初に設定され、データベース、およびログや設定ファイルなどその他多くの重要なファイルが保存されるディレクトリを示しています。
また、このディレクトリには、特に BAC プロセス ウォッチドッグ、DPE(同じシステムにインストールされている場合)、RDU、および SNMP エージェントのログ データが格納されます。
• BPR_DBLOG :このパラメータは、インストール時に最初に設定され、データベースのトランザクション ログ ファイルが保存されるディレクトリを示しています。
上記のパラメータの値は、 BPR_DATA / bpr_definitions.sh というファイルに記録されます。このファイルを変更した場合、システム上で実行されているすべての BAC コンポーネントを再起動する必要があります。
データベースおよびトランザクション ファイルの場所を変更するには、次の手順に従います。
ステップ 1 /etc/init.d/bprAgent stop コマンドを実行して BAC プロセス ウォッチドッグおよびすべての BAC コンポーネントを停止します。
ステップ 2 BPR_HOME / bpr_definitions.sh ファイルのバックアップ コピーを作成します。
ステップ 3 このファイルを編集して、 BPR_DATA パラメータおよび BPR_DBLOG パラメータの一方または両方を新しいディレクトリに変更します。
ステップ 4 このファイルを保存します。
ステップ 5 BPR_DATA ディレクトリと BPR_DBLOG ディレクトリの一方または両方の元のディレクトリ構造および内容を、新しい場所にコピーまたは移動します。コピーを行う場合は、すべてのファイルおよびディレクトリのアクセス権が維持されるようにしてください。
ステップ 6 / etc/init.d/bprAgent start コマンドを実行して、BAC プロセス ウォッチドッグおよびすべての BAC コンポーネントを起動します。
ステップ 7 該当のログ ファイルを監視して、すべてのコンポーネントが正常に起動したことを確認します。