Red Hat Directory Server のバックアップおよび復元
Red Hat Directory Server のバックアップおよび復元
概要
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。これを行うには、以下を行います。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
Bugzilla からのフィードバック送信 (アカウントが必要)
- Bugzilla の Web サイトに移動します。
- Component として Documentation を使用します。
- Description フィールドに、ドキュメントの改善に向けたご提案を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- Submit Bug をクリックします。
第1章 Directory Server のバックアップ
Directory Server のバックアップには、次のファイルが含まれます。
-
データベースのインデックス化された属性が含まれる LDIF ファイル
dse_index.ldif
-
インスタンスの設定属性が含まれる LDIF ファイル
dse_instance.ldif
-
データベースで定義されたインデックスの
.db
ファイルが含まれる、各バックエンドのディレクトリー (userRoot
など) -
トランザクションログファイル
log.*
-
データベースのバージョンファイル
DBVERSION
Directory Server は個別のデータベースのバックアップをサポートしない点に注意してください。
設定などの他の重要なファイルのバックアップに関する詳細は、設定ファイル、証明書データベース、およびカスタムスキーマファイルのバックアップ を参照してください。
バックアップとは対照的に、Directory Server からのデータのエクスポート で説明されているようにデータをエクスポートできます。エクスポート機能を使用して、サブツリーなどの特定のデータをサーバーから LDIF 形式でエクスポートします。
1.1. インスタンスの実行中にコマンドラインを使用した全データベースのバックアップ
実行中の Directory Server インスタンスのデータベースをすべてバックアップするには、dsconf backup create
コマンドを使用します。
Directory Server は、データベースをオンラインバックアップから復元する際に変更ログを消去します。したがって、オンラインバックアップを使用する場合は、データベースの復元後にレプリカを再初期化する必要があります。再初期化を回避するには、オフラインバックアップを使用します。
前提条件
dirsrv
ユーザーに、バックアップ先ディレクトリーの書き込みパーミッションがある。Directory Server はデフォルトで独自のプライベートディレクトリーを使用することに注意してください。その結果、PrivateTmp systemd ディレクティブを無効にしない限り、ディレクトリー
/var/tmp/
、/tmp/
、および/root/
の下のバックアップとエクスポートは失敗します。- Directory Server インスタンスが実行している。
手順
すべてのデータベースをバックアップします。
#
dsconf -D "cn=Directory Manager" ldap://server.example.com backup create
The backup create task has finished successfullyデフォルトでは、
dsconf
は、バックアップを/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーのinstance_name-YYYY_MM_DD_hh_mm_ss
というサブディレクトリーに保存します。別の場所を指定するには、コマンドにディレクトリー名を追加します。-
バックアップ中の問題について、
/var/log/dirsrv/slapd-instance_name/errors
ログを検索します。
関連情報
-
データのバックアップに使用できる追加の設定をすべて表示するには、
dsconf ldap://server.example.com backup create --help
コマンドの出力を参照してください。 - 設定ファイル、証明書データベース、およびカスタムスキーマファイルのバックアップ
- インスタンスの実行中にコマンドラインを使用した全データベースの復元
- Directory Server からのデータのエクスポート
1.2. インスタンスのオフライン時にコマンドラインを使用した全データベースのバックアップ
Directory Server インスタンスがオフライン時にデータベースのバックアップを作成するには、dsctl db2bak
コマンドを使用します。
前提条件
dirsrv
ユーザーに、バックアップ先ディレクトリーの書き込みパーミッションがある。Directory Server はデフォルトで独自のプライベートディレクトリーを使用することに注意してください。その結果、PrivateTmp systemd ディレクティブを無効にしない限り、ディレクトリー
/var/tmp/
、/tmp/
、および/root/
の下のバックアップとエクスポートは失敗します。- Directory Server インスタンスが実行していない。
手順
すべてのデータベースをバックアップします。
#
dsctl instance_name db2bak
db2bak successfulデフォルトでは、
dsctl db2bak
は、バックアップを/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーのinstance_name-YYYY_MM_DD_hh_mm_ss
というサブディレクトリーに保存します。別の場所を指定するには、コマンドにディレクトリー名を追加します。必要に応じて、コマンドに
-v
オプションを指定して詳細な出力を表示します。#
dsctl -v instance_name db2bak
... DEBUG: Instance allocated DEBUG: systemd status -> True ... INFO: db2bak successful-
バックアップ中の問題について、
/var/log/dirsrv/slapd-instance_name/errors
ログを検索します。 オプション: インスタンスを起動します。
#
dsctl instance_name start
1.3. Web コンソールを使用して全データベースをバックアップする
Directory Server は、Web コンソールを使用したデータのバックアップをサポートします。
Directory Server は、データベースをオンラインバックアップから復元する際に変更ログを消去します。したがって、オンラインバックアップを使用する場合は、データベースの復元後にレプリカを再初期化する必要があります。再初期化を回避するには、オフラインバックアップを使用します。
前提条件
dirsrv
ユーザーに、バックアップ先ディレクトリーの書き込みパーミッションがある。Directory Server はデフォルトで独自のプライベートディレクトリーを使用することに注意してください。その結果、PrivateTmp systemd ディレクティブを無効にしない限り、
/var/tmp/
、/tmp/
、および/root/
ディレクトリーでのバックアップとエクスポートは失敗します。- Web コンソールでインスタンスにログインしている。
手順
-
Actions ボタンをクリックして、
Manage Backups
を選択します。 - Create Backup をクリックします。
- バックアップの作成日時を示すタイムスタンプなど、バックアップの名前を入力します。
- Create Backup をクリックします。
- バックアップ中の問題についてログを確認するには、Monitoring → Logging → Errors Log メニューを開きます。
サーバーは、バックアップを /var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリー内の指定した名前のサブディレクトリーに保存します。
1.4. 設定ファイル、証明書データベース、およびカスタムスキーマファイルのバックアップ
インスタンスがオンラインでもオフラインでも、データベースをバックアップすると、Directory Server は設定ファイル、証明書データベース、およびカスタムスキーマファイルもバックアップします。dsconf backup create
および dsctl db2bak
コマンドは、ファイルをバックアップのデフォルトディレクトリーである /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/
にバックアップします。これらのファイルは、ハードウェア障害の後にインスタンスを別のサーバーに復元するために必要になる可能性があります。
バックアップ時に、証明書データベースを更新しないでください。更新してしまうと、バックアップ内のデータベースで一貫性がなくなる可能性があります。
手順
- インスタンスの実行中にコマンドラインを使用した全データベースのバックアップ または インスタンスのオフライン時にコマンドラインを使用した全データベースのバックアップ に記載されているとおりに、インスタンスの実行中、またはインスタンスがオフラインの間に Directory Server のバックアップを実行します。
検証
バックアップディレクトリーでバックアップされた設定ファイルを見つけます。
# ls /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/
注記Directory Server は、バックアップされた設定ファイルを自動的に復元しません。これらのファイルは手動で復元する必要があります。
第2章 グループのメンバーが Directory Server をバックアップすることの許可、およびグループメンバーの 1 つとしてのバックアップの実行
グループのメンバーに、インスタンスをバックアップして、そのバックアップを実施するパーミッションを設定できます。バックアップスクリプトまたは cron ジョブに cn=Directory Manager
の認証情報を設定する必要がなくなるため、セキュリティーが向上します。また、グループを変更して、バックアップのパーミッションを簡単に許可し、取り消すことができます。
2.1. グループが Directory Server をバックアップすることの許可
この手順を使用して、cn=backup_users,ou=groups,dc=example,dc=com
グループを追加し、このグループのメンバーがバックアップタスクを作成するのを許可します。
前提条件
-
エントリー
ou=groups,dc=example,dc=com
がデータベースに存在する。
手順
cn=backup_users,ou=groups,dc=example,dc=com
グループを作成します。#
dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group create --cn backup_users
cn=backup_users,ou=groups,dc=example,dc=com
グループのメンバーによるバックアップタスクの作成を許可するアクセス制御手順 (ACI) を追加します。#
ldapadd -D "cn=Directory Manager" -W -H ldap://server.example.com
dn: cn=config changetype: modify add: aci aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*") (version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) - add: aci aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass") (version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";)ユーザーを作成します。
ユーザーアカウントを作成します。
#
dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" user create --uid="example" --cn="example" --uidNumber="1000" --gidNumber="1000" --homeDirectory="/home/example/" --displayName="Example User"
ユーザーアカウントのパスワードを設定します。
#
dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" account reset_password "uid=example,ou=People,dc=example,dc=com" "password"
uid=example,ou=People,dc=example,dc=com
ユーザーをcn=backup_users,ou=groups,dc=example,dc=com
グループに追加します。#
dsidm -D "cn=Directory manager" ldap://server.example.com -b "dc=example,dc=com" group add_member backup_users uid=example,ou=People,dc=example,dc=com
検証
cn=config
エントリーに設定された ACI を表示します。#
ldapsearch -o ldif-wrap=no -LLLx -D "cn=directory manager" -W -H ldap://server.example.com -b cn=config aci=* aci -s base
dn: cn=config aci: (target = "ldap:///cn=backup,cn=tasks,cn=config")(targetattr="*")(version 3.0 ; acl "permission: Allow backup_users group to create backup tasks" ; allow (add, read, search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) aci: (target = "ldap:///cn=config")(targetattr = "nsslapd-bakdir || objectClass")(version 3.0 ; acl "permission: Allow backup_users group to access bakdir attribute" ; allow (read,search) groupdn = "ldap:///cn=backup_users,ou=groups,dc=example,dc=com";) ...
2.2. 通常ユーザーとしてのバックアップの実行
cn=Directory Manager
ではなく、通常のユーザーとしてバックアップを実行できます。
前提条件
-
cn=backup_users,ou=groups,dc=example,dc=com
グループのメンバーがデータをバックアップするのを許可している。 -
バックアップの実行に使用するユーザーが
cn=backup_users,ou=groups,dc=example,dc=com
グループのメンバーである。
手順
以下の方法のいずれかを使用してバックアップタスクを作成します。
dsconf backup create
コマンドの使用:#
dsconf -D "uid=example,ou=People,dc=example,dc=com" ldap://server.example.com backup create
タスクの手動での作成:
#
ldapadd -D "uid=example,ou=People,dc=example,dc=com" -W -H ldap://server.example.com
dn: cn=backup-2021_07_23_12:55_00,cn=backup,cn=tasks,cn=config changetype: add objectClass: extensibleObject nsarchivedir: /var/lib/dirsrv/slapd-instance_name/bak/backup-2021_07_23_12:55_00 nsdatabasetype: ldbm database cn: backup-2021_07_23_12:55_00
検証
バックアップが作成されたことを確認します。
#
ls -l /var/lib/dirsrv/slapd-instance_name/bak/
total 0 drwx------. 3 dirsrv dirsrv 108 Jul 23 12:55 backup-2021_07_23_12_55_00 ...
第3章 Directory Server の復元
ハードウェア障害の後などの特定の状況では、Directory Server を復元する必要があります。これは、コマンドラインまたは Web コンソールを使用して実行できます。Directory Server は個別のデータベースの復元をサポートしない点に注意してください。
データベースにカスタムデータを入力する場合は、インポート機能を使用します。サーバーから特定のデータを LDIF 形式でインポートできます。詳細は、Directory Server へのデータのインポート を参照してください。
3.1. インスタンスの実行中にコマンドラインを使用した全データベースの復元
実行中の Directory Server インスタンスにすべてのデータベースを復元するには、dsconf backup restore
コマンドを使用します。
前提条件
- Directory Server のバックアップがある。
-
dirsrv
ユーザーに、バックアップディレクトリーの読み取りパーミッションがある。 - Directory Server インスタンスが実行している。
手順
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss
ディレクトリーに保存されているバックアップから、すべてのデータベースを復元します。#
dsconf -D "cn=Directory Manager" ldap://server.example.com backup restore /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss
The backup restore task has finished successfully-
復元中の問題について、
/var/log/dirsrv/slapd-instance_name/errors
ログを検索します。
関連情報
-
データの復元に使用できる追加の設定をすべて表示するには、
dsconf ldap://server.example.com backup restore --help
コマンドの出力を参照してください。 - インスタンスの実行中にコマンドラインを使用した全データベースのバックアップ
- Directory Server へのデータのインポート
3.2. インスタンスのオフライン時コマンドラインを使用した全データベースの復元
インスタンスがオフライン時にすべてのデータベースを復元するには、dsctl bak2db
コマンドを使用します。
前提条件
- Directory Server のバックアップがある。
-
dirsrv
ユーザーに、バックアップディレクトリーの読み取りパーミッションがある。 - Directory Server インスタンスが実行していない。
手順
/var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss
ディレクトリーに保存されているバックアップから、すべてのデータベースを復元します。#
dsctl instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss/
bak2db successful必要に応じて、コマンドに
-v
オプションを指定して詳細な出力を表示します。#
dsctl -v instance_name bak2db /var/lib/dirsrv/slapd-instance_name/bak/instance_name-YYYY_MM_DD_hh_mm_ss/
... DEBUG: Instance allocated DEBUG: OK group dirsrv exists DEBUG: OK user dirsrv exists DEBUG: systemd status -> True ... INFO: bak2db successful-
復元中の問題について、
/var/log/dirsrv/slapd-instance_name/errors
ログを検索します。 オプション: インスタンスを起動します。
#
dsctl instance_name start
3.3. Web コンソールを使用した全データベースの復元
Directory Server は、Web コンソールを使用したデータの復元をサポートします。
前提条件
-
バックアップが、
/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーに保存されている。 -
dirsrv
ユーザーに、バックアップディレクトリーの読み取りパーミッションがある。 - Web コンソールでインスタンスにログインしている。
手順
-
Actions
メニューをクリックして、Manage Backups
を選択します。表示されるウィンドウには、/var/lib/dirsrv/slapd-instance_name/bak/
ディレクトリーで利用可能なバックアップが表示されます。 -
復元するバックアップの横にある
Actions
メニューを開き、Restore Backup
を選択します。 - Yes をクリックして確定します。
- 復元中の問題についてログを確認するには、Monitoring → Logging → Errors Log メニューを開きます。
3.4. 複製されたエントリーが含まれるデータベースの復元
サプライヤーサーバーを復元すると、いくつかの状況が発生する可能性があります。
コンシューマーサーバーも復元される。
(データが同期されるように) 全く同じ時間に作成されたバックアップからすべてのデータベースを復元するような非常にまれな状況においては、コンシューマーはサプライヤーと同期が取れた状態のままであるため、特に何もする必要はありません。レプリケーションは中断せずに再開します。
サプライヤーだけが復元される。
サプライヤーのみが復元された場合や、コンシューマーが別のバックアップから復元された場合は、サプライヤーがコンシューマーを再初期化して、データベースのデータを更新します。
サプライヤーサーバーで変更ログエントリーの有効期限がまだ切れていない。
データベースのバックアップの取得後にサプライヤーの変更ログが期限切れになっていない場合は、ローカルコンシューマーを復元し、通常の操作を継続します。この状態は、
cn=changelog,cn=database_name,cn=ldbm database,cn=plugins,cn=config
エントリーで、変更ログの最大有効期限属性nsslapd-changelogmaxage
に設定された値よりも短い期間内にバックアップを作成した場合に限り発生します。Directory Server は、レプリカとその変更ログの間の互換性を自動的に検出します。不一致が検出されると、サーバーは古い変更ログファイルを削除し、空のファイルを新たに作成します。
変更ログエントリーが、ローカルバックアップを作成した後にサプライヤーサーバー上で期限切れになる。
変更ログエントリーの有効期限が切れている場合は、コンシューマーが再初期化される。
例3.1 Directory Server のレプリケーショントポロジーの復元
2 つのサプライヤーと 2 つのコンシューマーサーバーで設定されるレプリケーション環境のサーバーをすべて復元するには、以下を実行します。
- restore または import のいずれかを使用して、最初のサプライヤーを再初期化します。
レプリケーションを使用して残りのサーバーをオンラインに初期化します。
- 最初のサプライヤーから 2 番目のサプライヤーを初期化します。
- サプライヤーからコンシューマーを初期化します。
- 各サーバーでレプリケーションのステータスを表示し、レプリケーションが正しく機能していることを確認します。
復元操作中に、復元されたデータベースに関連する変更ログが削除されます。再初期化が必要であることを示すメッセージが、サプライヤーサーバーのログファイルに記録されます。
3.5. 設定ファイル、証明書データベース、およびカスタムスキーマファイルの復元
設定ファイル、証明書データベース、カスタムスキーマファイルをバックアップから手動で復元できます。
前提条件
- Directory Server のバックアップがある。
-
dirsrv
ユーザーに、/var/lib/dirsrv/slapd-instance_name/bak/
バックアップディレクトリーの読み取りパーミッションがある。 - Directory Server インスタンスが実行していない。
手順
バックアップディレクトリーから Directory Server 設定ディレクトリーに、復元するファイルをコピーします。たとえば、
dse.ldif
設定ファイルを復元するには、次のように入力します。# cp /var/lib/dirsrv/slapd-instance_name/bak/example_backup/config_files/dse.ldif /etc/dirsrv/slapd-instance_name/
インスタンスを起動します。
# dsctl instance_name start
検証
サーバーがサーバー設定を復元したことを確認します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config get