6.4. Directory Server の復元

特定の状況では、管理者がハードウェア障害後など Directory Server を復元する必要があります。本セクションでは、サポートされている復元方法を説明します。
注記
Directory Server は、個別のデータベースの復元には対応していません。
Directory Server は、復元操作を dirsrv ユーザーとして実行します。そのため、バックアップを含むディレクトリーのパーミッションにより、このユーザーがファイルを読み取ることができます。

6.4.1. コマンドラインでのすべてのデータベースの復元

Directory Server は、インスタンスの実行中またはオフライン時にデータベースの復元をサポートします。

6.4.1.1. サーバーの実行中にすべてのデータベースの復元

6.4.1.1.1. dsconf backup restore コマンドを使用した全データベースの復元
dsconf backup restore コマンドを使用して、バックアップディレクトリーからすべてのデータベースを復元するタスクを自動的に作成します。
たとえば、/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ ディレクトリーに保存されているバックアップを復元するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
The backup restore task has finished successfully
6.4.1.1.2. cn=tasks エントリーを使用した全データベースの復元
Directory Server 設定の cn=tasks,cn=config エントリーは、サーバーがタスクの管理に使用する一時的なエントリー用のコンテナーエントリーです。復元操作を開始するには、cn=restore,cn=tasks,cn=config エントリーでタスクを作成します。
警告
復元タスクを使用すると、インスタンス内のすべてのデータが上書きされます。
復元タスクエントリーには以下の属性が必要です。
  • cn: タスクの一意の名前を設定します。
  • nsArchiveDir: バックアップが含まれるディレクトリーへのパスを設定します。
  • nsDatabaseType: 復元するデータベースのタイプを設定します。Directory Server は、この属性の ldbm database 値のみをサポートします。
たとえば、/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ ディレクトリーに保存されているバックアップからすべてのデータベースを復元するタスクを追加するには、次のコマンドを実行します。
# ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com -x

dn: cn=example_restore,cn=import,cn=tasks,cn=config
changetype: add
objectclass: extensibleObject
cn: example_restore
nsArchiveDir: /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
nsDatabaseType: ldbm database
タスクが完了すると、エントリーはディレクトリー設定から削除されます。

6.4.1.2. サーバーがオフライン時の全データベースの復元

データベースの復元時にサーバーがオフラインの場合は、dsctl bak2db コマンドを使用します。
  1. インスタンスを停止します。
    # dsctl instance_name stop
  2. データベースを復元します。たとえば、/var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/ ディレクトリーに保存されているバックアップからすべてのデータベースを復元するタスクを追加するには、次のコマンドを実行します。
    # dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-time_stamp/
    bak2db successful
    注記
    dsctl bak2db コマンドは、dirsrv ユーザーとして復元として実行されます。したがって、ソースディレクトリーのパーミッションでは、このユーザーがファイルとディレクトリーを読み取りできるようにする必要があります。
  3. インスタンスを起動します。
    # dsctl instance_name start

6.4.2. Web コンソールを使用した全データベースの復元

Web コンソールを使用してすべてのデータベースを復元するには、以下を行います。
  1. Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
  2. インスタンスを選択します。
  3. Actions ボタンをクリックして、Manage Backups を選択します。
    表示されるウィンドウには、/var/lib/dirsrv/slapd-instance_name/bak/ ディレクトリーで利用可能なバックアップが表示されます。
  4. 復元するバックアップの横にある Actions メニューを開き、Restore Backup を選択します。
  5. Yes をクリックして確定します。

6.4.3. 複製されたエントリーが含まれるデータベースの復元

サプライヤーサーバーを復元すると、いくつかの状況が発生する可能性があります。
  • コンシューマーサーバーも復元される。
    (データが同期されるように) 全く同じ時間に作成されたバックアップからすべてのデータベースを復元するような非常にまれな状況においては、コンシューマーはサプライヤーと同期が取れた状態のままであるため、特に何もする必要はありません。レプリケーションは中断せずに再開します。
  • サプライヤーだけが復元します。
    サプライヤーのみが復元された場合や、コンシューマーが別のバックアップから復元された場合は、サプライヤーがコンシューマーを再初期化して、データベースのデータを更新します。サプライヤーのみが復元された場合や、コンシューマーが別のバックアップから復元された場合は、サプライヤーがコンシューマーを再初期化して、データベースのデータを更新します。
  • サプライヤーサーバーでチェンジログエントリーの有効期限が切れていません。
    データベースのバックアップの取得後にサプライヤーの変更ログが期限切れになっていない場合は、ローカルコンシューマーを復元し、通常の操作を継続します。この状態は、cn=changelog5,cn=config エントリーで、最大 changelog age 属性 nsslapd-changelogmaxage に設定された値よりも短い期間内にバックアップを取得した場合に限り発生します。このオプションの詳細は、Red Hat Directory Server 設定、コマンド、およびファイルリファレンス を参照してください。
    Directory Server は、レプリカとその変更ログの間の互換性を自動的に検出します。不一致が検出されると、サーバーは古い変更ログファイルを削除し、空のファイルを新たに作成します。
  • 変更ログエントリーが、ローカルバックアップを作成した後にサプライヤーサーバー上で期限切れになる。
    変更ログエントリーの有効期限が切れている場合は、コンシューマーが再初期化される。コンシューマーの再初期化に関する詳細は、「コンシューマーの初期化」を参照してください。

例6.3 Directory Server のレプリケーショントポロジーの復元

たとえば、2 つのサプライヤーと 2 つのコンシューマーサーバーで設定されるレプリケーション環境のサーバーをすべて復元するには、以下を実行します。
  1. 最初のサプライヤーを復元します。dsconf backend import コマンドを使用して、データをインポートします。「コマンドラインでのインポート」を参照してください。
  2. レプリケーションを使用して残りのサーバーをオンラインに初期化します。
    1. 最初のサプライヤーから 2 番目のサプライヤーを初期化します。
    2. サプライヤーからコンシューマーを初期化します。
    詳細については、「コンシューマーの初期化」 を参照してください。
  3. 各サーバーでレプリケーションのステータスを表示し、レプリケーションが正しく機能していることを確認します。詳細については、「特定のレプリカ合意の状態の表示」 を参照してください。
復元操作中に、復元されたデータベースに関連する変更ログが削除されます。再初期化が必要であることを示すメッセージが、サプライヤーサーバーのログファイルに記録されます。
レプリケーションの管理に関する情報は、15章レプリケーションの管理を参照してください。