レプリケーションの設定および管理
他の Directory Server インスタンスへのデータの複製
概要
Red Hat Directory Server に関するフィードバックの提供 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat のドキュメントおよび製品に関するご意見をお待ちしております。ドキュメントの改善点があればお知らせください。改善点を報告する場合は、以下のように行います。
Jira を通じて Red Hat Directory Server ドキュメントに関するフィードバックを送信する場合 (アカウントが必要):
- Red Hat Issue Tracker にアクセスしてください。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
Jira を通じて Red Hat Directory Server 製品に関するフィードバックを送信する場合 (アカウントが必要):
- Red Hat Issue Tracker にアクセスしてください。
- Create Issue ページで、 をクリックします。
- Summary フィールドに入力します。
- Component フィールドでコンポーネントを選択します。
Description フィールドに以下の内容を入力します。
- 選択したコンポーネントのバージョン番号。
- 問題を再現するための手順、または改善のための提案。
- Create をクリックします。
第1章 コマンドラインを使用した単一サプライヤーレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
単一サプライヤーレプリケーション環境では、1 つの書き込み可能なサプライヤーが、データを 1 つまたは複数の読み取り専用のコンシューマーに複製します。たとえば、接尾辞が多数の検索要求を受け取るが、書き込み要求数が少ない場合などに、単一サプライヤーレプリケーションを設定します。負荷を分散するために、クライアントは読み取り専用のコンシューマーで接尾辞を検索し、書き込み要求をサプライヤーに送信します。
本セクションでは、既存の Directory Server インスタンスが supplier.example.com という名前のホストで実行されていることを前提としています。このホストは、レプリケーショントポロジーに設定されるサプライヤーとして機能します。手順では、consumer.example.com という名前の読み取り専用コンシューマーをトポロジーに追加する方法と、dc=example,dc=com 接尾辞に単一サプライヤーレプリケーションを設定する方法を説明します。
1.1. コマンドラインを使用した新しいコンシューマーの準備 リンクのコピーリンクがクリップボードにコピーされました!
consumer.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するコンシューマーで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。詳細は、コマンドラインで .inf ファイルを使用して新しいインスタンスをセットアップする を参照してください。
-
dc=example,dc=com接尾辞のデータベースが存在する。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://consumer.example.com replication enable --suffix "dc=example,dc=com" --role "consumer" --bind-dn "cn=replication manager,cn=config" --bind-passwd "password"このコマンドは、
consumer.example.comホストをdc=example,dc=com接尾辞のコンシューマーとして設定します。また、このコマンドは、指定したパスワードを持つcn=replication manager,cn=configユーザーを作成し、このアカウントが接尾辞の変更をこのホストに複製するのを許可します。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://consumer.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaBindDN: cn=replication manager,cn=config nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 2 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaBindDNはレプリケーションマネージャーアカウントを指定します。 -
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを2に設定して、このホストがコンシューマーであることを定義します。
-
1.2. コマンドラインを使用した、既存サーバーのコンシューマーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
supplier.example.com ホストを準備するには、次のことを行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- コンシューマーへのレプリカ合意を作成します。
- コンシューマーを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
前提条件
-
コンシューマーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication enable --suffix "dc=example,dc=com" --role "supplier" --replica-id 1このコマンドは、
supplier.example.comホストをdc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を1に設定します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。レプリカ合意を追加し、コンシューマーを初期化します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt create --suffix "dc=example,dc=com" --host "consumer.example.com" --port 389 --conn-protocol=LDAP --bind-dn "cn=replication manager,cn=config" --bind-passwd "password" --bind-method=SIMPLE --init example-agreementこのコマンドは、
example-agreementという名前のレプリカ合意を作成します。レプリカ合意は、コンシューマーのホスト名、プロトコル、このコンシューマーへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。この合意の作成後、Directory Server は
consumer.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 3 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを3に設定して、このホストがサプライヤーであることを定義します。
-
初期化が成功したかどうかを確認します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt init-status --suffix "dc=example,dc=com" example-agreement Agreement successfully initialized.レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement Status For Agreement: "example-agreement" (consumer.example.com:389) Replica Enabled: on Update In Progress: FALSE Last Update Start: 20210330075608Z Last Update End: 20210330075608Z Number Of Changes Sent: 1:3/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded Last Init Start: 20210330074603Z Last Init End: 20210330074606Z Last Init Status: Error (0) Total update succeeded Reap Active: 0 Replication Status: Not in Synchronization: supplier (6062d73c000000010000) consumer (Unavailable) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded) Replication Lag Time: UnavailableReplication StatusフィールドおよびLast Update Statusフィールドを確認します。
トラブルシューティング
デフォルトでは、サーバー上のすべての合意に対するレプリケーションアイドルタイムアウトは 1 時間です。タイムアウトが原因で大規模なデータベースの初期化が失敗する場合は、
nsslapd-idletimeoutパラメーターをより高い値に設定します。たとえば、パラメーターを7200(2 時間) に設定するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com config replace nsslapd-idletimeout=7200無制限の期間を設定するには、
nsslapd-idletimeoutを0に設定します。
第2章 Web コンソールを使用した単一サプライヤーレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
単一サプライヤーレプリケーション環境では、1 つの書き込み可能なサプライヤーが、データを 1 つまたは複数の読み取り専用のコンシューマーに複製します。たとえば、接尾辞が多数の検索要求を受け取るが、書き込み要求数が少ない場合などに、単一サプライヤーレプリケーションを設定します。負荷を分散するために、クライアントは読み取り専用のコンシューマーで接尾辞を検索し、書き込み要求をサプライヤーに送信します。
本セクションでは、既存の Directory Server インスタンスが supplier.example.com という名前のホストで実行されていることを前提としています。このホストは、レプリケーショントポロジーに設定されるサプライヤーとして機能します。手順では、consumer.example.com という名前の読み取り専用コンシューマーをトポロジーに追加する方法と、dc=example,dc=com 接尾辞に単一サプライヤーレプリケーションを設定する方法を説明します。
2.1. Web コンソールを使用した新しいコンシューマーの準備 リンクのコピーリンクがクリップボードにコピーされました!
consumer.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するコンシューマーで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。詳細は、Web コンソールを使用した新規インスタンスの設定 を参照してください。
-
dc=example,dc=com接尾辞のデータベースが存在する。 - Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 - をクリックします。
Replication RoleフィールドでConsumerを選択し、作成するレプリケーションマネージャーアカウントおよびパスワードを入力します。
この設定により、ホストを
dc=example,dc=com接尾辞のコンシューマーとして設定します。さらに、サーバーは指定のパスワードでcn=replication manager,cn=configユーザーを作成し、このアカウントがこのホストに接尾辞の変更を複製することができます。- をクリックします。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 -
Replica Roleフィールドに値Consumerが含まれている場合、レプリケーションが有効になり、ホストがコンシューマーとして設定されます。
2.2. Web コンソールを使用した、既存サーバーのコンシューマーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
supplier.example.com ホストを準備するには、次のことを行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- コンシューマーへのレプリカ合意を作成します。
- コンシューマーを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
前提条件
-
コンシューマーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 - Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリケーションを有効にします。
- をクリックします。
Replication RoleフィールドでSupplierを選択し、レプリカ ID、レプリケーションマネージャーの認証情報を入力して、Bind Group DNフィールドを空のままにします。
この設定により、ホストを
dc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を1に設定します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。- をクリックします。
レプリカ合意を追加し、コンシューマーを初期化します。
Agreementsタブで、 をクリックし、次のフィールドに入力します。
この設定により、
example-agreementという名前のレプリカ合意が作成されます。レプリカ合意は、コンシューマーのホスト名、プロトコル、このコンシューマーへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。-
Consumer InitializationフィールドでDo Online Initializationを選択し、合意の保存後にコンシューマーを自動的に初期化します。 をクリックします。
この合意の作成後、Directory Server は
consumer.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 Agreementsタブで、テーブルのState列での契約のステータスを確認。
第3章 コマンドラインを使用したマルチサプライヤーレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーション環境では、2 つ以上の書き込み可能なサプライヤーが互いにデータを複製します。たとえば、マルチサプライヤーレプリケーションを設定してフェイルオーバー環境を提供し、複数のサーバーに負荷を分散します。その後、クライアントは読み取り/書き込みレプリカである任意のホストで読み取り/書き込み操作を実行できます。
本セクションでは、既存の Directory Server インスタンスが supplier1.example.com という名前のホストで実行されていることを前提としています。この手順では、supplier2.example.com という名前の別の読み取り/書き込みレプリカをトポロジーに追加する方法と、dc=example,dc=com 接尾辞のマルチサプライヤーレプリケーションを設定する方法を説明します。
3.1. コマンドラインを使用した新しいサプライヤーの準備 リンクのコピーリンクがクリップボードにコピーされました!
supplier2.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するサプライヤーで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。詳細は、コマンドラインで .inf ファイルを使用して新しいインスタンスをセットアップする を参照してください。
-
dc=example,dc=com接尾辞のデータベースが存在する。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com replication enable --suffix "dc=example,dc=com" --role "supplier" --replica-id 1 --bind-dn "cn=replication manager,cn=config" --bind-passwd "password"このコマンドは、
supplier2.example.comホストをdc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を1に設定します。また、このコマンドは、指定したパスワードを持つcn=replication manager,cn=configユーザーを作成し、このアカウントが接尾辞の変更をこのホストに複製するのを許可します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaBindDN: cn=replication manager,cn=config nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 3 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaBindDNはレプリケーションマネージャーアカウントを指定します。 -
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを3に設定して、このホストがサプライヤーであることを定義します。
-
3.2. コマンドラインを使用した、既存サーバーの新規サーバーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
既存のサーバー supplier1.example.com をサプライヤーとして準備するには、次のことを行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- 新規サプライヤーへのレプリカ合意を作成します。
- 新しいサプライヤーを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
前提条件
-
参加するサプライヤーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com replication enable --suffix "dc=example,dc=com" --role "supplier" --replica-id 2 --bind-dn "cn=replication manager,cn=config" --bind-passwd "password"このコマンドは、
supplier1.example.comホストをdc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を2に設定します。また、このコマンドは、指定したパスワードを持つcn=replication manager,cn=configユーザーを作成し、このアカウントが接尾辞の変更をこのホストに複製するのを許可します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。レプリカ合意を追加し、新規サーバーを初期化します。
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt create --suffix "dc=example,dc=com" --host "supplier2.example.com" --port 389 --conn-protocol LDAP --bind-dn "cn=replication manager,cn=config" --bind-passwd "password" --bind-method SIMPLE --init example-agreement-supplier1-to-supplier2このコマンドは、
example-agreement-supplier1-to-supplier2という名前のレプリカ合意を作成します。レプリカ合意は、新規サプライヤーのホスト名、プロトコル、新規サプライヤーへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。この合意の作成後、Directory Server は
supplier2.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaBindDN: cn=replication manager,cn=config nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 3 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaBindDNはレプリケーションマネージャーアカウントを指定します。 -
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを3に設定して、このホストがサプライヤーであることを定義します。
-
初期化が成功したかどうかを確認します。
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt init-status --suffix "dc=example,dc=com" example-agreement-supplier1-to-supplier2 Agreement successfully initialized.レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement-supplier1-to-supplier2 Status For Agreement: "example-agreement-supplier1-to-supplier2" (supplier2.example.com:389) Replica Enabled: on Update In Progress: FALSE Last Update Start: 20210331071545Z Last Update End: 20210331071546Z Number Of Changes Sent: 2:1/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded Last Init Start: 20210331071541Z Last Init End: 20210331071544Z Last Init Status: Error (0) Total update succeeded Reap Active: 0 Replication Status: Not in Synchronization: supplier (6064219e000100020000) consumer (Unavailable) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded)Replication StatusフィールドおよびLast Update Statusフィールドを確認します。
トラブルシューティング
デフォルトでは、サーバー上のすべての合意に対するレプリケーションアイドルタイムアウトは 1 時間です。タイムアウトが原因で大規模なデータベースの初期化が失敗する場合は、
nsslapd-idletimeoutパラメーターをより高い値に設定します。たとえば、パラメーターを7200(2 時間) に設定するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com config replace nsslapd-idletimeout=7200無制限の期間を設定するには、
nsslapd-idletimeoutを0に設定します。
3.3. コマンドラインを使用した、新規サーバーの既存サーバーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
新しいサーバー supplier2.example.com をサプライヤーとして準備するには、次のいずれかの方法を使用します。
- 接尾辞のレプリケーションを有効にします。
- 既存サーバーへのレプリカ合意を作成します。
新しいサーバーから既存のサプライヤーを初期化しないでください。それ以外の場合は、新規サーバーの空のデータベースは、既存のサプライヤーのデータベースを上書きします。
既存のサプライヤーに以下の手順を適用します。
- 新しいサーバーへのレプリカ合意を作成します。
- 新しいサーバーを初期化します。
前提条件
-
新規サーバーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 -
既存のサーバーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 - 参加する新しいサーバーが正常に初期化されている。
手順
レプリカ合意を既存のインスタンスに追加します。
# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com repl-agmt create --suffix "dc=example,dc=com" --host "supplier1.example.com" --port 389 --conn-protocol LDAP --bind-dn "cn=replication manager,cn=config" --bind-passwd "password" --bind-method SIMPLE example-agreement-supplier2-to-supplier1--initオプションを使用して、新しいインスタンスにレプリカ合意を追加します。# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt create --suffix "dc=example,dc=com" --host "supplier2.example.com" --port 389 --conn-protocol LDAP --bind-dn "cn=replication manager,cn=config" --bind-passwd "password" --bind-method SIMPLE --init example-agreement-supplier1-to-supplier2
検証
合意のステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com repl-agmt init-status --suffix "dc=example,dc=com" example-agreement-supplier2-to-supplier1 Agreement successfully initialized.レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement-supplier2-to-supplier1 Status For Agreement: ""example-agreement-supplier2-to-supplier1 (supplier1.example.com:389) Replica Enabled: on Update In Progress: FALSE Last Update Start: 20210331073540Z Last Update End: 20210331073540Z Number Of Changes Sent: 7:1/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded Last Init Start: 20210331073535Z Last Init End: 20210331073539Z Last Init Status: Error (0) Total update succeeded Reap Active: 0 Replication Status: Not in Synchronization: supplier (60642649000000070000) consumer (Unavailable) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded) Replication Lag Time: UnavailableReplication StatusフィールドおよびLast Update Statusフィールドを確認します。
トラブルシューティング
デフォルトでは、サーバー上のすべての合意に対するレプリケーションアイドルタイムアウトは 1 時間です。タイムアウトが原因で大規模なデータベースの初期化が失敗する場合は、
nsslapd-idletimeoutパラメーターをより高い値に設定します。たとえば、パラメーターを7200(2 時間) に設定するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com config replace nsslapd-idletimeout=7200無制限の期間を設定するには、
nsslapd-idletimeoutを0に設定します。
第4章 Web コンソールを使用したマルチサプライヤーレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーション環境では、2 つ以上の書き込み可能なサプライヤーが互いにデータを複製します。たとえば、マルチサプライヤーレプリケーションを設定してフェイルオーバー環境を提供し、複数のサーバーに負荷を分散します。その後、クライアントは読み取り/書き込みレプリカである任意のホストで読み取り/書き込み操作を実行できます。
本セクションでは、既存の Directory Server インスタンスが supplier1.example.com という名前のホストで実行されていることを前提としています。この手順では、supplier2.example.com という名前の別の読み取り/書き込みレプリカをトポロジーに追加する方法と、dc=example,dc=com 接尾辞のマルチサプライヤーレプリケーションを設定する方法を説明します。
4.1. Web コンソールを使用した新しいサプライヤーの準備 リンクのコピーリンクがクリップボードにコピーされました!
supplier2.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するサプライヤーで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。詳細は、Web コンソールを使用した新規インスタンスの設定 を参照してください。
-
dc=example,dc=com接尾辞のデータベースが存在する。 - Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリケーションを有効にします。
- をクリックします。
Replication RoleフィールドでSupplierを選択し、レプリカ ID を入力し、作成するレプリケーションマネージャーアカウントの識別名 (DN) およびパスワードを入力します。
この設定により、ホストを
dc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を1に設定します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。レプリケーションマネージャー DN を設定しない場合は、バインドグループ DN を設定します。その後、レプリカ合意でこのグループの任意のメンバーを使用できます。
- をクリックします。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 -
Replica Roleフィールドに値Supplierが含まれている場合、レプリケーションが有効になり、ホストがサプライヤーとして設定されます。
4.2. Web コンソールを使用した、既存サーバーの新規サーバーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
既存のサーバー supplier1.example.com をサプライヤーとして準備するには、次のことを行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- 新規サプライヤーへのレプリカ合意を作成します。
- 新しいサプライヤーを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
前提条件
-
参加するサプライヤーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 - Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリケーションを有効にします。
- をクリックします。
Replication RoleフィールドでSupplierを選択し、レプリカ ID を入力し、作成するレプリケーションマネージャーアカウントの識別名 (DN) およびパスワードを入力します。
この設定により、ホストを
dc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を2に設定します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。- をクリックします。
レプリカ合意を追加し、新規サーバーを初期化します。
Agreementsタブで、 をクリックし、次のフィールドに入力します。
この設定により、
example-agreement-supplier1-to-supplier2という名前のレプリカ合意が作成されます。レプリカ合意は、新規サプライヤーのホスト名、プロトコル、新規サプライヤーへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。-
Consumer InitializationフィールドでDo Online Initializationを選択し、合意の保存後に新規サーバーを自動的に初期化します。 をクリックします。
この合意の作成後、Directory Server は
supplier2.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 Agreementsタブで、テーブルのState列での契約のステータスを確認。
4.3. Web コンソールを使用した、新規サーバーの既存サーバーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
新しいサーバー supplier2.example.com をサプライヤーとして準備するには、次のことを行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- 既存サーバーへのレプリカ合意を作成します。
- 既存サーバーを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
既存のサーバーでレプリカ合意を初期化していない場合は、続行しないでください。それ以外の場合は、新規サーバーの空のデータベースは、既存のサプライヤーのデータベースを上書きします。
前提条件
-
新規サーバーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 -
既存のサーバーで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 - 参加する新しいサーバーが正常に初期化されている。
- Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリカ合意を追加し、既存のサーバーを初期化します。
Agreementsタブで、 をクリックし、次のフィールドに入力します。
この設定により、
example-agreement-supplier2-to-supplier1という名前のレプリカ合意が作成されます。レプリカ合意は、既存サーバーのホスト名、プロトコル、既存サプライヤーへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。-
Consumer InitializationフィールドでDo Online Initializationを選択し、合意の保存後に新規サーバーを自動的に初期化します。 をクリックします。
この合意の作成後、Directory Server は
supplier1.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 Agreementsタブで、テーブルのState列での契約のステータスを確認。
第5章 証明書ベースの認証を使用したマルチサプライヤーレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
2 つの Directory Server インスタンス間のレプリケーションを設定する場合、バインド DN とパスワードを使用してレプリケーションパートナーを認証する代わりに、証明書ベースの認証を使用できます。
これを行うには、新しいサーバーをレプリケーショントポロジーに追加し、証明書ベースの認証を使用して新しいホストと既存のサーバーの間にレプリケーションアグリーメントを設定します。
証明書ベースの認証には、TLS 暗号化接続が必要です。
5.1. 証明書ベースの認証によるレプリカ合意で使用するためのアカウントとバインドグループの準備 リンクのコピーリンクがクリップボードにコピーされました!
複製合意で証明書ベースの認証を使用するには、まずアカウントを準備し、クライアント証明書をこれらのアカウントの userCertificate 属性に保存します。さらに、この手順では、後で複製合意で使用するバインドグループを作成します。
この手順は、既存のホスト server1.example.com で実行します。
前提条件
- Directory Server で TLS 暗号化を有効にしています。
/root/server1.derファイルと/root/server2.derファイルに、クライアント証明書を Distinguished Encoding Rules (DER) 形式で保存しました。クライアント証明書の詳細と、認証局 (CA) から証明書を要求する方法は、CA のドキュメントを参照してください。
手順
ou=servicesエントリーが存在しない場合は作成します。# ldapadd -D "cn=Directory Manager" -W -H ldaps://server1.example.com -x dn: ou=services,dc=example,dc=com objectClass: organizationalunit objectClass: top ou: servicescn=server1,ou=services,dc=example,dc=comおよびcn=server1,ou=services,dc=example,dc=comなど、両方のサーバーのアカウントを作成します。# ldapadd -D "cn=Directory Manager" -W -H ldaps://server1.example.com -x dn: cn=server1,ou=services,dc=example,dc=com objectClass: top objectClass: person objectClass: inetOrgPerson sn: server1 cn: server1 userPassword: password userCertificate:< file:///root/server1.der adding new entry "cn=server1,ou=services,dc=example,dc=com" dn: cn=server2,ou=services,dc=example,dc=com objectClass: top objectClass: person objectClass: inetOrgPerson sn: server2 cn: server2 userPassword: password userCertificate:< file:///root/server2.der adding new entry "cn=server2,ou=services,dc=example,dc=com"cn=repl_servers,dc=groups,dc=example,dc=comなどのグループを作成します。# dsidm -D "cn=Directory Manager" ldaps://server1.example.com -b "dc=example,dc=com" group create --cn "repl_servers"2 つのレプリケーションアカウントをメンバーとしてグループに追加します。
# dsidm -D "cn=Directory Manager" ldaps://server1.example.com -b "dc=example,dc=com" group add_member repl_servers "cn=server1,ou=services,dc=example,dc=com" # dsidm -D "cn=Directory Manager" ldaps://server1.example.com -b "dc=example,dc=com" group add_member repl_servers "cn=server2,ou=services,dc=example,dc=com"
5.2. 一時レプリケーションマネージャーアカウントを使用した新しいサーバーの初期化 リンクのコピーリンクがクリップボードにコピーされました!
証明書ベースの認証では、ディレクトリーに格納されている証明書が使用されます。ただし、新しいサーバーを初期化する前は、server2.example.com のデータベースは空であり、関連付けられた証明書を持つアカウントは存在しません。したがって、データベースの初期化前に、証明書を使用してレプリケーションすることはできません。この問題は、server2.example.com を一時的なレプリケーションマネージャーアカウントで初期化することで解決できます。
前提条件
-
Directory Server インスタンスを
server2.example.comにインストールした。詳細は、.inf ファイルを使用したコマンドラインでの新規インスタンスの設定 を参照してください。 -
dc=example,dc=com接尾辞のデータベースが存在する。 -
server1.example.comとserver2.example.comの両方のサーバーの Directory Server で TLS 暗号化を有効にした。
手順
server2.example.comで、dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldaps://server2.example.com replication enable --suffix "dc=example,dc=com" --role "supplier" --replica-id 2 --bind-dn "cn=replication manager,cn=config" --bind-passwd "password"このコマンドは、
server2.example.comホストをdc=example,dc=com接尾辞のサプライヤーとして設定し、このホストのレプリカ ID を2に設定します。さらに、このコマンドは、指定されたパスワードで一時的なcn=replication manager,cn=configユーザーを作成し、このアカウントが接尾辞の変更をこのホストに複製できるようにします。トポロジー内のすべてのサプライヤーにわたって、1 つの接尾辞に対するレプリカ ID は
1から65534の間の一意の整数である必要があります。server1.example.com上で:レプリケーションを有効にします。
# dsconf -D "cn=Directory Manager" ldaps://server1.example.com replication enable --suffix="dc=example,dc=com" --role="supplier" --replica-id="1"認証用に直前の手順で一時的なアカウントを使用する一時的なレプリカ合意を作成します。
# dsconf -D "cn=Directory Manager" ldaps://server1.example.com repl-agmt create --suffix="dc=example,dc=com" --host="server1.example.com" --port=636 --conn-protocol=LDAPS --bind-dn="cn=Replication Manager,cn=config" --bind-passwd="password" --bind-method=SIMPLE --init temporary_agreement
検証
初期化が成功したことを確認します。
# dsconf -D "cn=Directory Manager" ldaps://server1.example.com repl-agmt init-status --suffix "dc=example,dc=com" temporary_agreement Agreement successfully initialized.
5.3. 証明書ベースの認証を使用したマルチサプライヤーレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
証明書ベースの認証を使用するマルチサプライヤーレプリケーション環境では、レプリカは証明書を使用して相互に認証します。
前提条件
-
server1.example.comとserver2.example.comの両方のホストで証明書ベースの認証を設定します。 - Directory Server は、クライアント証明書を発行する認証局 (CA) を信頼します。
-
クライアント証明書は、サーバーの
/etc/dirsrv/slapd-instance_name/certmap.confで設定された要件を満たしています。
手順
server1.example.com上で:一時的なレプリカ合意を削除します。
# dsconf -D "cn=Directory Manager" ldaps://server1.example.com repl-agmt delete --suffix="dc=example,dc=com" temporary_agreementcn=repl_servers,dc=groups,dc=example,dc=comバインドグループをレプリケーション設定に追加します。# dsconf -D "cn=Directory Manager" ldaps://server1.example.com replication set --suffix="dc=example,dc=com" --repl-bind-group "cn=repl_servers,dc=groups,dc=example,dc=com"バインドグループの変更を自動的にチェックするように Directory Server を設定します。
# dsconf -D "cn=Directory Manager" ldaps://server1.example.com replication set --suffix="dc=example,dc=com" --repl-bind-group-interval=0
server2.example.com上で:一時的なレプリケーションマネージャーアカウントを削除します。
# dsconf -D "cn=Directory Manager" ldaps://server2.example.com replication delete-manager --suffix="dc=example,dc=com" --name="Replication Manager"cn=repl_servers,dc=groups,dc=example,dc=comバインドグループをレプリケーション設定に追加します。# dsconf -D "cn=Directory Manager" ldaps://server2.example.com replication set --suffix="dc=example,dc=com" --repl-bind-group "cn=repl_servers,dc=groups,dc=example,dc=com"バインドグループの変更を自動的にチェックするように Directory Server を設定します。
# dsconf -D "cn=Directory Manager" ldap://server2.example.com replication set --suffix="dc=example,dc=com" --repl-bind-group-interval=0証明書ベースの認証を使用して複製合意を作成します。
dsconf -D "cn=Directory Manager" ldaps://server2.example.com repl-agmt create --suffix="dc=example,dc=com" --host="server1.example.com" --port=636 --conn-protocol=LDAPS --bind-method="SSLCLIENTAUTH" --init server2-to-server1
server1.example.comで、証明書ベースの認証を使用して複製合意を作成します。dsconf -D "cn=Directory Manager" ldaps://server1.example.com repl-agmt create --suffix="dc=example,dc=com" --host="server2.example.com" --port=636 --conn-protocol=LDAPS --bind-method="SSLCLIENTAUTH" --init server1-to-server2
検証
初期化が成功したことを各サーバーで確認します。
# dsconf -D "cn=Directory Manager" ldaps://server1.example.com repl-agmt init-status --suffix "dc=example,dc=com" server1-to-server2 Agreement successfully initialized. # dsconf -D "cn=Directory Manager" ldaps://server2.example.com repl-agmt init-status --suffix "dc=example,dc=com" server2-to-server1 Agreement successfully initialized.
第6章 コマンドラインを使用したカスケードレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
カスケードレプリケーションのシナリオでは、ハブとなる 1 台のサーバーがコンシューマーとサプライヤーの両方のロールを果たします。ハブは、変更ログを維持する読み取り専用のレプリカです。サプライヤーから更新を受け取り、これらの更新をコンシューマーに提供します。カスケードレプリケーションは、負荷の高いトラフィックのバランスをとる場合や、地理的に分散した環境でサプライヤーをローカルに配置する場合に使用します。
6.1. コマンドラインを使用した新しいハブサーバーの準備 リンクのコピーリンクがクリップボードにコピーされました!
hub.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するハブで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。
- dc=example,dc=com 接尾辞のデータベースが存在する。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://hub.example.com replication enable --suffix "dc=example,dc=com" --role "hub" --bind-dn "cn=replication manager,cn=config" --bind-passwd "password"このコマンドは、
dc=example,dc=com接尾辞のハブとしてhub.example.comホストを設定します。また、このコマンドは、指定したパスワードを持つcn=replication manager,cn=configユーザーを作成し、このアカウントが接尾辞の変更をこのホストに複製するのを許可します。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://hub.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaBindDN: cn=replication manager,cn=config nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 2 nsDS5ReplicaId: 65535 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaBindDNはレプリケーションマネージャーアカウントを指定します。 -
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを2に設定して、このホストがコンシューマーで、ハブにも有効であることを定義します。 -
nsDS5ReplicaIdを65535に設定して、このホストがハブであることを定義します。--role "hub"オプションを定義すると、dsconfユーティリティーはこの値を自動的に設定します。
-
6.2. コマンドラインを使用した、既存サーバーのハブサーバーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
既存のサーバーをサプライヤーとして準備するには、以下を行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- ハブへのレプリカ合意を作成します。
- ハブを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
前提条件
-
参加するハブで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication enable --suffix "dc=example,dc=com" --role "supplier" --replica-id 1このコマンドは、
supplier.example.comホストをdc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を1に設定します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。レプリカ合意を追加し、新規サーバーを初期化します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt create --suffix "dc=example,dc=com" --host "hub.example.com" --port 389 --conn-protocol LDAP --bind-dn "cn=replication manager,cn=config" --bind-passwd "password" --bind-method SIMPLE --init example-agreement-supplier-to-hubこのコマンドは、
example-agreement-supplier-to-hubという名前のレプリカ合意を作成します。レプリカ合意は、ハブのホスト名、プロトコル、ハブへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。この合意の作成後、Directory Server は
hub.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 3 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを3に設定して、このホストがサプライヤーであることを定義します。
-
初期化が成功したかどうかを確認します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt init-status --suffix "dc=example,dc=com" example-agreement-supplier-to-hub Agreement successfully initialized.レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement-supplier-to-hub Status For Agreement: "example-agreement-supplier-to-hub" (hub.example.com:389) Replica Enabled: on Update In Progress: FALSE Last Update Start: 20210331105030Z Last Update End: 20210331105030Z Number Of Changes Sent: 0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded Last Init Start: 20210331105026Z Last Init End: 20210331105029Z Last Init Status: Error (0) Total update succeeded Reap Active: 0 Replication Status: Not in Synchronization: supplier (Unknown) consumer (Unknown) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded) Replication Lag Time: UnavailableReplication StatusフィールドおよびLast Update Statusフィールドを確認します。
トラブルシューティング
デフォルトでは、サーバー上のすべての合意に対するレプリケーションアイドルタイムアウトは 1 時間です。タイムアウトが原因で大規模なデータベースの初期化が失敗する場合は、
nsslapd-idletimeoutパラメーターをより高い値に設定します。たとえば、パラメーターを7200(2 時間) に設定するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com config replace nsslapd-idletimeout=7200無制限の期間を設定するには、
nsslapd-idletimeoutを0に設定します。
6.3. コマンドラインを使用したハブの新しいコンシューマーの準備 リンクのコピーリンクがクリップボードにコピーされました!
consumer.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にハブが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するコンシューマーで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。詳細は、コマンドラインで .inf ファイルを使用して新しいインスタンスをセットアップする を参照してください。
-
dc=example,dc=com接尾辞のデータベースが存在する。
手順
dc=example,dc=com接尾辞のレプリケーションを有効にします。# dsconf -D "cn=Directory Manager" ldap://consumer.example.com replication enable --suffix "dc=example,dc=com" --role "consumer" --bind-dn "cn=replication manager,cn=config" --bind-passwd "password"このコマンドは、
consumer.example.comホストをdc=example,dc=com接尾辞のコンシューマーとして設定します。また、このコマンドは、指定したパスワードを持つcn=replication manager,cn=configユーザーを作成し、このアカウントが接尾辞の変更をこのホストに複製するのを許可します。
検証
レプリケーション設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://consumer.example.com replication get --suffix "dc=example,dc=com" dn: cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config ... nsDS5ReplicaBindDN: cn=replication manager,cn=config nsDS5ReplicaRoot: dc=example,dc=com nsDS5ReplicaType: 2 ...これらのパラメーターは以下を示しています。
-
nsDS5ReplicaBindDNはレプリケーションマネージャーアカウントを指定します。 -
nsDS5ReplicaRootは、レプリケートされる接尾辞を設定します。 -
nsDS5ReplicaTypeを2に設定して、このホストがコンシューマーであることを定義します。
-
6.4. コマンドラインを使用した、ハブサーバーのコンシューマーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
ハブを準備するには、以下を行う必要があります。
- コンシューマーへのレプリカ合意を作成します。
- コンシューマーを初期化します。
レプリケーショントポロジーのハブでこの手順を実行します。
前提条件
- ハブが初期化され、サプライヤーからハブへのレプリケーションが機能する。
-
ハブで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。
手順
レプリカ合意を追加し、コンシューマーを初期化します。
# dsconf -D "cn=Directory Manager" ldap://hub.example.com repl-agmt create --suffix "dc=example,dc=com" --host "consumer.example.com" --port 389 --conn-protocol LDAP --bind-dn "cn=replication manager,cn=config" --bind-passwd "password" --bind-method SIMPLE --init example-agreement-hub-to-consumerこのコマンドは、
example-agreement-hub-to-consumerという名前のレプリカ合意を作成します。レプリカ合意は、コンシューマーのホスト名、プロトコル、このコンシューマーへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。この合意の作成後、Directory Server は
consumer.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
初期化が成功したかどうかを確認します。
# dsconf -D "cn=Directory Manager" ldap://hub.example.com repl-agmt init-status --suffix "dc=example,dc=com" example-agreement-hub-to-consumer Agreement successfully initialized.レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://hub.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement-hub-to-consumer Status For Agreement: "example-agreement-hub-to-consumer" (consumer.example.com:389) Replica Enabled: on Update In Progress: FALSE Last Update Start: 20210331131534Z Last Update End: 20210331131534Z Number Of Changes Sent: 0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded Last Init Start: 20210331131530Z Last Init End: 20210331131533Z Last Init Status: Error (0) Total update succeeded Reap Active: 0 Replication Status: Not in Synchronization: supplier (Unknown) consumer (Unknown) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded) Replication Lag Time: UnavailableReplication StatusフィールドおよびLast Update Statusフィールドを確認します。
トラブルシューティング
デフォルトでは、サーバー上のすべての合意に対するレプリケーションアイドルタイムアウトは 1 時間です。タイムアウトが原因で大規模なデータベースの初期化が失敗する場合は、
nsslapd-idletimeoutパラメーターをより高い値に設定します。たとえば、パラメーターを7200(2 時間) に設定するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://hub .example.com config replace nsslapd-idletimeout=7200無制限の期間を設定するには、
nsslapd-idletimeoutを0に設定します。
第7章 Web コンソールを使用したカスケードレプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
カスケードレプリケーションのシナリオでは、ハブとなる 1 台のサーバーがコンシューマーとサプライヤーの両方のロールを果たします。ハブは、変更ログを維持する読み取り専用のレプリカです。サプライヤーから更新を受け取り、これらの更新をコンシューマーに提供します。カスケードレプリケーションは、負荷の高いトラフィックのバランスをとる場合や、地理的に分散した環境でサプライヤーをローカルに配置する場合に使用します。
7.1. Web コンソールを使用した新しいハブサーバーの準備 リンクのコピーリンクがクリップボードにコピーされました!
hub.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するハブで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。
- dc=example,dc=com 接尾辞のデータベースが存在する。
- Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリケーションを有効にします。
- をクリックします。
Replication RoleフィールドでConsumerを選択し、作成するレプリケーションマネージャーアカウントおよびパスワードを入力します。
この設定により、ホストを
dc=example,dc=com接尾辞のハブとして設定します。- をクリックします。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 -
Replica Roleフィールドに値Hubが含まれている場合、レプリケーションが有効になり、ホストがコンシューマーとして設定されます。
7.2. Web コンソールを使用した、既存サーバーのハブサーバーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
既存のサーバーをサプライヤーとして準備するには、以下を行う必要があります。
- 接尾辞のレプリケーションを有効にします。
- ハブへのレプリカ合意を作成します。
- ハブを初期化します。
レプリケーショントポロジーの既存のサプライヤーでこの手順を実行します。
前提条件
-
参加するハブで
dc=example,dc=com接尾辞のレプリケーションを有効にしている。 - Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリケーションを有効にします。
- をクリックします。
Replication RoleフィールドでSupplierを選択し、レプリカ ID を入力し、作成するレプリケーションマネージャーアカウントの識別名 (DN) およびパスワードを入力します。
この設定により、ホストを
dc=example,dc=com接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を1に設定します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数である必要があります。- をクリックします。
レプリカ合意を追加し、新規サーバーを初期化します。
Agreementsタブで、 をクリックし、次のフィールドに入力します。
この設定により、
example-agreement-supplier-to-hubという名前のレプリカ合意が作成されます。レプリカ合意は、ハブのホスト名、プロトコル、このハブへのデータの接続や複製時にサプライヤーが使用する認証情報などの設定を定義します。-
Consumer InitializationフィールドでDo Online Initializationを選択し、合意の保存後に新規サーバーを自動的に初期化します。 をクリックします。
この合意の作成後、Directory Server は
hub.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 Agreementsタブで、テーブルのState列での契約のステータスを確認。
7.3. Web コンソールを使用したハブの新規コンシューマーの準備 リンクのコピーリンクがクリップボードにコピーされました!
consumer.example.com ホストを準備するには、レプリケーションを有効にします。このプロセスでは、以下を行います。
- レプリケーショントポロジーでこのサーバーのロールを設定します。
- レプリケートされる接尾辞を定義します。
- このホストへの接続にサプライヤーが使用するレプリケーションマネージャーアカウントを作成します。
レプリケーショントポロジーに追加するコンシューマーで、以下の手順を実行します。
前提条件
- Directory Server インスタンスがインストールされている。詳細は、Web コンソールを使用した新規インスタンスの設定 を参照してください。
-
dc=example,dc=com接尾辞のデータベースが存在する。 - Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 - をクリックします。
Replication RoleフィールドでConsumerを選択し、作成するレプリケーションマネージャーアカウントおよびパスワードを入力します。
この設定により、ホストを
dc=example,dc=com接尾辞のコンシューマーとして設定します。さらに、サーバーは指定のパスワードでcn=replication manager,cn=configユーザーを作成し、このアカウントがこのホストに接尾辞の変更を複製することができます。- をクリックします。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 -
Replica Roleフィールドに値Consumerが含まれている場合、レプリケーションが有効になり、ホストがコンシューマーとして設定されます。
7.4. Web コンソールを使用した、ハブサーバーのコンシューマーに対するサプライヤーとしての設定 リンクのコピーリンクがクリップボードにコピーされました!
ハブを準備するには、以下を行う必要があります。
- コンシューマーへのレプリカ合意を作成します。
- コンシューマーを初期化します。
レプリケーショントポロジーのハブでこの手順を実行します。
前提条件
- ハブが初期化され、サプライヤーからハブへのレプリケーションが機能する。
- ハブで dc=example,dc=com 接尾辞のレプリケーションを有効にしている。
- Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 レプリカ合意を追加し、コンシューマーを初期化します。
Agreementsタブで、 をクリックし、次のフィールドに入力します。
この設定により、
example-agreement-hub-to-consumerという名前のレプリカ合意が作成されます。レプリカ合意は、コンシューマーのホスト名、プロトコル、このコンシューマーへのデータの接続や複製時にハブが使用する認証情報などの設定を定義します。-
Consumer InitializationフィールドでDo Online Initializationを選択し、合意の保存後にコンシューマーを自動的に初期化します。 をクリックします。
この合意の作成後、Directory Server は
consumer.example.comを初期化します。複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 Agreementsタブで、テーブルのState列での契約のステータスを確認。
第8章 マルチサプレットレプリケーション環境でのレイテンシーの改善 リンクのコピーリンクがクリップボードにコピーされました!
特定のマルチサプライヤーレプリケーション環境では (たとえば、サーバーがワイドエリアネットワーク (WAN) を介して接続されている場合)、マルチサプライヤーが同時に更新を受け取ると、レプリケーションのレイテンシーが高くなる可能性があります。これは、1 つのサプライヤーがレプリカを長期間解放せずにレプリカのみにアクセスした場合に発生します。このような場合は、他のサプライヤーがこのコンシューマーに更新を送信できないため、レプリケーションのレイテンシーが増加します。
一定期間の経過後にレプリカを解放するには、レプリケーションサプライヤーとハブに nsds5ReplicaReleaseTimeout パラメーターを設定します。
ほとんどの環境では 60 秒のデフォルト値が適しています。設定した値が高すぎるまたは低すぎると、レプリケーションのパフォーマンスに影響を及ぼす可能性があります。設定した値が低すぎると、レプリケーションサーバーは常に相互に再取得し、サーバーは多くの更新を送信できなくなります。トラフィックの多いレプリケーション環境では、タイムアウトが長いと 1 つのサプライヤーのみがレプリカにアクセスする状況を改善できます。ただし、ほとんどの場合、120 秒よりも高い値を設定するとレプリケーションの速度が低下します。
8.1. コマンドラインを使用したレプリケーション解放タイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーション環境でレプリケーションの効率を向上させるには、すべてのハブおよびサプライヤーでレプリケーションリリースのタイムアウト値を更新します。
前提条件
- 複数のサプライヤーとハブ間でレプリケーションを設定している。
手順
接尾辞のタイムアウト値を設定します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication set --suffix="dc=example,dc=com" --repl-release-timeout=70このコマンドは、
example,dc=comの接尾辞のレプリケーションタイムアウトを70秒に変更します。インスタンスを再起動します。
# dsctl instance_name restart
8.2. Web コンソールを使用したレプリケーション解放タイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーション環境でレプリケーションの効率を向上させるには、すべてのハブおよびサプライヤーでレプリケーションリリースのタイムアウト値を更新します。
前提条件
- 複数のサプライヤーとハブ間でレプリケーションを設定している。
手順
- タブで、接尾辞エントリーを選択します。
-
Show Advanced Settingsをクリックします。 -
Replication Release Timeoutフィールドの値を更新します。 - をクリックします。
第9章 レプリケーショントポロジーにおけるコンシューマーの初期化 リンクのコピーリンクがクリップボードにコピーされました!
レプリカ合意を作成した後、コンシューマーを初期化する必要があります。そうしないと、Directory Server はレプリケーションを開始しません。初期化操作中に、サプライヤーは既存のデータをコンシューマーにコピーします。
9.1. コンシューマーの初期化のタイミング リンクのコピーリンクがクリップボードにコピーされました!
コンシューマーの初期化には、サプライヤーサーバーからコンシューマーサーバーへのデータのコピーが含まれます。サブツリーがコンシューマーに物理的に配置されたら、サプライヤーサーバーはコンシューマーサーバーへの更新操作のリプレイを開始できます。
通常の操作では、コンシューマーを再初期化しないでください。ただし、サプライヤーとコンシューマーのデータに大きな相違がある場合は、コンシューマーの再初期化を実行します。
たとえば、サプライヤーサーバーのデータをバックアップから復元した場合は、そのサーバーによって提供されるすべてのコンシューマーも再初期化する必要があります。もう 1 つの例としては、サプライヤーが長期間 (1 週間以上) コンシューマーと連絡が取れず、コンシューマーが古すぎて更新できないと判断し、再初期化する必要があるとサプライヤーが判断した場合が挙げられます。
トポロジーに応じて、オンラインまたはオフラインの方法を使用してコンシューマーを初期化します。
- コンシューマーの数が少ない場合は、Web コンソールを使用してオンラインでコンシューマーの初期化を実行します。オンラインコンシューマーの初期化は、コンシューマーがサプライヤーサーバーでのレプリカ合意の設定の一部として初期化される時に使用する方法です。
- レプリカの数が多い場合やデータベースが大きい場合は、コマンドラインを使用して、単一の LDIF ファイルから手動でコンシューマー初期化を実行します。
9.2. コマンドラインを使用してインスタンスがオンラインのときにコンシューマーを初期化する リンクのコピーリンクがクリップボードにコピーされました!
サプライヤーとコンシューマーのインスタンスがオンラインの場合、コマンドラインを使用してコンシューマーを初期化できます。
前提条件
-
サプライヤーサーバーとコンシューマーサーバーで
dc=example,dc=com接尾辞のレプリケーションを有効化している。 - サプライヤーサーバーとコンシューマーサーバーの間でレプリカ合意を作成している。
手順
コンシューマーを初期化するには、次を実行します。
# dsconf <supplier_instance_name> repl-agmt init --suffix="dc=example,dc=com" <supplier_consumer_agreement_name>複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
合意のステータスを表示します。
# dsconf <supplier_instance_name> repl-agmt init-status --suffix "dc=example,dc=com" <supplier_consumer_agreement_name> Agreement successfully initialized.
9.3. Web コンソールを使用してオンラインでコンシューマーを初期化する リンクのコピーリンクがクリップボードにコピーされました!
サプライヤーインスタンスとコンシューマーインスタンスがオンラインの場合のみ、Web コンソールを使用してコンシューマーを初期化できます。
前提条件
-
サプライヤーサーバーとコンシューマーサーバーで
dc=example,dc=com接尾辞のレプリケーションを有効化している。 - サプライヤーサーバーとコンシューマーサーバーの間でレプリカ合意を作成している。
- Web コンソールで Directory Server インスタンスにログインしている。
手順
- Replication メニューを開き、レプリケートする接尾辞を選択します。
- Agreements タブで、レプリカ合意の名前の横にあるオプションメニュー (⋮) をクリックし、 を選択します。
ポップアップウィンドウの Yes, I am sure チェックボックスをオンにして初期化を確定します。
複製するデータ量によっては、初期化に時間がかかる場合があります。
検証
- 初期化が正常に完了した場合、Last Init Status 列に Initialized 状態が表示されます。
9.4. インスタンスがオフラインのときにコンシューマーを初期化する リンクのコピーリンクがクリップボードにコピーされました!
大規模なデータベースや多数のコンシューマーがある場合は、コマンドラインを使用して、オフライン初期化を行うことを検討してください。この手順には、サプライヤーサーバーからデータをエクスポートし、そのデータをコンシューマーサーバーにインポートすることが含まれます。
前提条件
-
サプライヤーサーバーとコンシューマーサーバーで
dc=example,dc=com接尾辞のレプリケーションを有効化している。 - サプライヤーサーバーとコンシューマーサーバーの間でレプリカ合意を作成している。
手順
サプライヤーサーバーで、次の手順を実行します。
サプライヤー上のインスタンスをシャットダウンします。
# dsctl <supplier_instance_name> stopレプリケートする接尾辞を含む
userRootデータベースを、レプリケーション情報を含む/var/lib/dirsrv/slapd-<supplier_instance_name>/ldif/example.ldifファイルにエクスポートします。# dsctl <supplier_instance_name> db2ldif userRoot /var/lib/dirsrv/slapd-<supplier_instance_name>/ldif/example.ldifサプライヤーでインスタンスを起動します。
# dsctl <supplier_instance_name> start
コンシューマーサーバーで、次の手順を実行します。
コンシューマー上のインスタンスをシャットダウンします。
# dsctl <consumer_instance_name> stop-
エクスポートされた
example.ldifファイルをコンシューマーの/var/lib/dirsrv/slapd-<consumer_instance_name>/ldif/ディレクトリーにコピーします。 -
/var/lib/dirsrv/slapd-<consumer_instance_name>/ldif/example.ldifファイルからuserRootデータベースをインポートします。dsctl ldif2db コマンドを使用してデータをインポートする方法の詳細は、サーバーがオフラインのときにコマンドラインを使用してデータをインポートする を参照してください。 コンシューマー側でインスタンスを起動します。
# dsctl <consumer_instance_name> start
検証
合意のステータスを表示します。
# dsconf <supplier_instance_name> repl-agmt init-status --suffix "dc=example,dc=com" <supplier_consumer_agreement_name> Agreement successfully initialized.
9.5. 初期化タイムアウトの設定 リンクのコピーリンクがクリップボードにコピーされました!
タイムアウトが原因で大規模なデータベースの初期化が失敗する場合は、次のいずれかのパラメーターをより長い期間または無期限に設定します。
-
サーバー上のすべてのレプリカ合意のタイムアウトを設定する、
cn=configエントリーのnsslapd-idletimeout設定パラメーター。 -
レプリケーションマネージャーの DN 内の
nsIdleTimeoutパラメーターは、このレプリケーションマネージャーエントリーを使用するすべての合意のタイムアウトを設定します。
前提条件
- root 権限がある。
手順
タイムアウトをグローバルに無効にするには、
nsslapd-idletimeoutを0に設定します。# dsconf <instance_name> config replace nsslapd-idletimeout=0 Successfully replaced value(s) for 'nsslapd-idletimeout': '0'cn=replication manager,cn=configエントリーのタイムアウトを無効にするには、以下のコマンドを実行します。# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x password: <password> dn: cn=replication manager,cn=config changetype: modify add: nsIdleTimeout nsIdleTimeout: 0
第10章 レプリケーショントポロジーからのインスタンスの削除 リンクのコピーリンクがクリップボードにコピーされました!
ハードウェアの停止や構造の変更など、特定の状況では、管理者はレプリケーショントポロジーから Directory Server インスタンスを削除します。インスタンスを削除する手順は、削除するレプリカのロールによって異なります。
10.1. レプリケーショントポロジーからのコンシューマーまたはハブの削除 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジーでコンシューマーまたはハブが不要になった場合は、これを削除します。
前提条件
- 削除するインスタンスがコンシューマーまたはハブである。
- 削除するホストがハブであり、トポロジー内の他のサーバーのサプライヤーとしても機能する場合、分離しないように、これらのサーバーにデータを複製するように他のサプライヤーまたはハブを設定している。
手順
削除するコンシューマーまたはハブ:
接尾辞とそれに対応するデータベースをリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix list dc=example,dc=com (userroot)データベースの名前を書き留めます。
データベースを読み取り専用モードに設定して、追加の更新を回避します。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --enable-readonly "userroot"
削除するコンシューマーまたはハブとレプリカ合意を結んでいるすべてのサプライヤーで以下を実行します。
レプリケートされる接尾辞のレプリカ合意をリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt list --suffix "dc=example,dc=com" dn: cn=example-agreement,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config cn: example-agreement ...cn属性には、次の手順に必要なレプリカ合意名が含まれます。レプリカ合意を削除します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt delete --suffix "dc=example,dc=com" example-agreement
コンシューマーまたはハブで、すべての接尾辞のレプリケーションを無効にします。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication disable --suffix "dc=example,dc=com"このホストがハブの場合は、レプリケーションを無効にすると、このサーバーのこの接尾辞のすべてのレプリカ合意も自動的に削除されます。
次のステップ
削除されたインスタンスをテスト目的に使用する場合は、読み取り専用モードを無効にします。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --disable-readonly userroot重要テスト目的でトポロジーから削除したインスタンスを使用する場合は、クライアントが引き続き使用していないことを確認してください。
インスタンスを削除します。
# dsctl instance_name remove --do-it
10.2. レプリケーショントポロジーからのサプライヤーの削除 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジーからサプライヤーをきれいに削除することは、ハブまたはコンシューマーを削除するよりも複雑です。これは、トポロジー内のすべてのサプライヤーが他のサプライヤーに関する情報を保存し、サプライヤーが利用できない状態になった場合でも、その情報を保持するためです。
Directory Server は、レプリカ更新ベクトル (RUV) と呼ばれるメタデータセットに、レプリケーショントポロジーに関する情報を維持します。RUV には、ID と URL 等のサプライヤーに関する情報、ローカルサーバー上の最新の変更状態番号 (CSN)、および最初の変更の CSN などが含まれています。サプライヤーとコンシューマーはいずれも RUV 情報を保存し、これを使用してレプリケーションの更新を制御します。
サプライヤーを完全に削除するには、設定エントリーと共にそのメタデータを削除する必要があります。
前提条件
- 削除するインスタンスがサプライヤーである。
- 削除するホストがトポロジー内の他のサーバーのサプライヤーとしても機能する場合、分離しないように、これらのサーバーにデータを複製するように他のサプライヤーまたはハブを設定している。
手順
削除するサプライヤーで、以下を行います。
接尾辞とそれに対応するデータベースをリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix list dc=example,dc=com (userroot)データベースの名前を書き留めます。
データベースを読み取り専用モードに設定して、追加の更新を回避します。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --enable-readonly "userroot"トポロジー内の他のすべてのサーバーが、このサプライヤーからすべてのデータを受け取るまで待ちます。確認のため、他のサーバーの CSN が、削除するサプライヤーの CSN と同等以上であることを確認します。
# ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://host-to-remove.example.com:389 -r ldap://server.example.com:389 -b dc=example,dc=com ================================================================================ Replication Synchronization Report (Tue Mar 5 09:46:20 2021) ================================================================================ Database RUV's ===================================================== Supplier RUV: {replica 1 ldap://host-to-remove.example.com:389} 5c7e8927000100010000 5c7e89a0000100010000 {replicageneration} 5c7e8927000000010000 Replica RUV: {replica 1 ldap://host-to-remove.example.com:389} 5c7e8927000100010000 5c7e8927000400010000 {replica 2 ldap://server.example.com:389} {replicageneration} 5c7e8927000000010000レプリカ ID を表示します。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication get --suffix "dc=example,dc=com" | grep -i "nsds5replicaid" nsDS5ReplicaId: 1この例では、レプリカ ID は
1です。この手順の最後のステップのレプリカ ID を書き留めます。
削除するホストとレプリカ合意があるすべてのサプライヤーで、以下を実施します。
レプリケートされる接尾辞のレプリカ合意をリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt list --suffix "dc=example,dc=com" dn: cn=example-agreement,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config cn: example-agreement ...cn属性には、次の手順に必要なレプリカ合意名が含まれます。レプリカ合意を削除します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt delete --suffix "dc=example,dc=com" example-agreement
削除するサプライヤーで、すべての接尾辞のレプリケーションを無効にします。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication disable --suffix "dc=example,dc=com"レプリケーションを無効にすると、このサーバーのこの接尾辞のレプリカ合意もすべて自動的に削除されます。
-
次に進む前に、
ds-replcheck出力のReplica RUVセクションにリスト表示されているすべての Directory Server インスタンスがオンラインであることを確認します。 トポロジー内の残りのサプライヤーのいずれかで、レプリカ ID の RUV をクリーンアップします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-tasks cleanallruv --suffix "dc=example,dc=com" --replica-id 1このコマンドでは、この手順の前のステップで表示されるレプリカ ID を指定する必要があります。
検証
ds-replcheckコマンドの出力で、削除したホストのレプリカ ID と URL を持つエントリーが残っていないことを確認します。# ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://host-to-remove.example.com:389 -r ldap://server.example.com:389 -b dc=example,dc=com
次のステップ
削除されたインスタンスをテスト目的に使用する場合は、読み取り専用モードを無効にします。
# dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --disable-readonly userroot重要テスト目的でトポロジーから削除したインスタンスを使用する場合は、クライアントが引き続き使用していないことを確認してください。
インスタンスを削除します。
# dsctl instance_name remove --do-it
第11章 マルチサプライヤーレプリケーショントポロジーでのレプリカの独占の防止 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーショントポロジーでは、大規模な更新負荷のサプライヤーが、他のサプライヤーも更新できないようにレプリカを独占する場合があります。
このセクションでは、独占が発生する状況、この問題を特定する方法、独占状態を回避するためにサプライヤーを設定する方法を説明します。
11.1. 独占が発生する場合 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーションの機能の 1 つは、サプライヤーがレプリカへの排他的アクセスを取得することです。ロックアウト時にサプライヤーがアクセスの取得を試みると、レプリカはビジー応答を送り、サプライヤーは nsds5ReplicaBusyWaitTime パラメーターに設定した時間が待機してから次の試行を開始します。その間、サプライヤーは更新を別のレプリカに送信します。最初のレプリカが解放されると、サプライヤーはこのホストに更新を送ります。
ロックアウトされたサプライヤーが大規模な更新負荷の配下にある場合や、変更ログに保留中の更新が多数あると、問題になる場合があります。この状況では、ロックしているサプライヤーは更新の送信を終えると、すぐに同じレプリカの再取得を試みます。他のサプライヤーは依然として待機している可能性があるため、このような試行はほとんどの場合で成功します。nsds5ReplicaSessionPauseTime パラメーターで、2 つの更新セッション間で一時停止を設定できます。これにより、単一のサプライヤーが数時間またはそれ以上にわたってレプリカを独占することになります。
11.2. レプリカの独占を識別するためのレプリケーションロギングの有効化 リンクのコピーリンクがクリップボードにコピーされました!
1 つ以上のサプライヤーが頻繁に高い更新負荷にあり、レプリカが頻繁に更新を受信しない場合は、レプリケーションメッセージのロギングを有効にして、独占状態を特定します。
前提条件
- レプリケーショントポロジーに複数のサプライヤーがある。
手順
レプリケーションロギングを有効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-errorlog-level=8192このコマンドは、レプリケーションロギングのみを有効にし、他のエラーメッセージのロギングは無効である点に注意してください。
/var/log/dirsrv/slapd-instance_name/errorsログファイルを監視し、以下のエラーメッセージを検索します。Replica Busy! Status: [Error (1) Replication error acquiring replica: replica busy]Directory Server がしばしばこのエラーをログに記録することがある点に注意してください。ただし、レプリカが頻繁に更新を受信せず、サプライヤーがこのエラーをログに記録する場合は、設定を更新してこの問題を解決することを検討してください。
11.3. レプリカの独占を回避するためのサプライヤーの設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、レプリカの独占を防ぐために、サプライヤーでパラメーターを設定する方法を説明します。
環境と負荷の違いにより、状況に関連するパラメーターのみを設定し、実際の環境に応じて値を調整します。
前提条件
- レプリケーショントポロジーに複数のサプライヤーがある。
-
Directory Server が頻繁に
Replica Busy!Status: [Error (1) Replication error acquiring replica: replica busy]エラーを記録する。
手順
nsds5ReplicaBusyWaitTimeパラメーターを設定し、レプリカがビジー応答を送信した後に、サプライヤーが再度レプリカへのアクセスの取得を試みるまでに待機する時間を設定します。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set --suffix "dc=example,dc=com" --busy-wait-time 5 replication_agreement_nameこのコマンドは、待機時間を
5秒に設定します。この設定は、指定されたレプリカ合意にのみ適用されます。nsds5ReplicaSessionPauseTimeパラメーターを設定して、2 つの更新セッション間でサプライヤーが待機する時間を設定します。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set --suffix "dc=example,dc=com" --session-pause-time 15 replication_agreement_nameこのコマンドは、一時停止を
15秒に設定します。デフォルトでは、nsds5ReplicaSessionPauseTimeはnsds5ReplicaBusyWaitTimeの値よりも 1 秒長くなるように設計されています。この設定は、指定されたレプリカ合意にのみ適用されます。nsds5ReplicaReleaseTimeoutパラメーターを設定して、更新の送信が完了したかどうかに関わらず、指定時間後にレプリケーションセッションを終了します。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication set --suffix "dc=example,dc=com" --repl-release-timeout 90このコマンドは、タイムアウトを
90秒に設定します。この設定は、指定した接尾辞のすべてのレプリカ合意に適用されます。オプション: サプライヤーのタイムアウト期間を設定して、低速または切断された接続を介して更新を無限に送信しようとするコンシューマーに接続されたままにならないようにします。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set --conn-timeout 600 --suffix "dc=example,dc=com" replication_agreement_nameこのコマンドは、タイムアウトを
600秒 (10 分) に設定します。最適な値を特定するには、アクセスログでレプリケーションプロセスにかかる平均時間を確認し、それに応じてタイムアウト期間を設定します。
第12章 レプリケーション環境のインスタンスがオフラインになった後のレプリケーション更新の強制 リンクのコピーリンクがクリップボードにコピーされました!
通常のメンテナンスでレプリケーションに関連する Directory Server インスタンスを停止する場合、インスタンスがオンラインに戻ったら、サプライヤーは直ちにディレクトリーデータを更新する必要があります。この更新は、コマンドラインおよび Web コンソールを使用して強制できます。
12.1. コマンドラインを使用したレプリケーション更新の強制 リンクのコピーリンクがクリップボードにコピーされました!
サプライヤーで以下の手順を実行し、example-agreement の dc=example,dc=com 接尾辞のレプリケーション更新を強制します。
前提条件
- レプリケーションが設定されている。
- コンシューマーが初期化されている。
手順
レプリカ合意に更新スケジュールが設定されているかどうかを確認します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt get --suffix "dc=example,dc=com" example-agreementコマンドの出力に
nsDS5ReplicaUpdateSchedule: *が含まれている、またはnsDS5ReplicaUpdateScheduleパラメーターが存在しない場合、更新スケジュールは設定されていません。nsDS5ReplicaUpdateScheduleに、以下のようなスケジュールが含まれる場合には、値を書き留めておきます。nsDS5ReplicaUpdateSchedule: 0800-2200 0246更新スケジュールが設定されている場合は、以下のコマンドを実行して一時的に無効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt set --schedule \ --suffix "dc=example,dc=com" example-agreement*レプリカ合意を一時的に無効にします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt disable --suffix "dc=example,dc=com" example-agreementレプリカ合意を再度有効にして、レプリケーションの更新を強制的に実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt enable --suffix "dc=example,dc=com" example-agreementこの手順の最初にレプリケーションスケジュールが設定されていた場合、スケジュールを以前の値に設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt set --schedule "0800-2200 0246" --suffix "dc=example,dc=com" example-agreement
検証
レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement ... Last Update Start: 20210406120631Z Last Update End: 20210406120631Z Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded ...
12.2. Web コンソールを使用したレプリケーション更新の強制 リンクのコピーリンクがクリップボードにコピーされました!
サプライヤーで以下の手順を実行し、レプリケーション更新を強制します。
前提条件
- レプリケーションが設定されている。
- コンシューマーが初期化されている。
- Web コンソールでインスタンスにログインしている。
手順
-
Replicationメニューを開きます。 -
dc=example,dc=com接尾辞を選択します。 -
Agreementsタブを開きます。 レプリカ合意に更新スケジュールが設定されているかどうかを確認します。
-
契約の横にあるオーバーフローメニューをクリックし、
Edit Agreementを選択します。 Schedulingタブで、現在設定されている値をメモします。
Use A Custom Scheduleが選択されていない場合、スケジュールは設定されません。
-
契約の横にあるオーバーフローメニューをクリックし、
レプリカ合意の横にあるオーバーフローメニューをクリックし、
Disable/Enable Agreementを選択して合意を無効にします。State列の合意のステータスがDisabledになります。レプリカ合意の横にあるオーバーフローメニューをもう一度クリックし、
Disable/Enable Agreementを選択して、レプリカ合意を再度有効にし、レプリケーションの更新を適用します。State列の合意のステータスがEnabledになります。この手順の最初にレプリケーションスケジュールが設定されていた場合、スケジュールを以前の値に設定します。
- オーバーフローメニューをクリックし、 → を選択します。
-
Schedulingタブで、以前の値を設定します。
検証
レプリケーションのステータスを表示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt status --suffix "dc=example,dc=com" example-agreement ... Last Update Start: 20210406120631Z Last Update End: 20210406120631Z Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded ...
第13章 レプリカのロールの変更 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジーでは、レプリカのロールを変更できます。たとえば、ハードウェアの停止によりサプライヤーが利用できない場合は、コンシューマーをサプライヤーにプロモートできます。逆に、ハードウェアリソースが少ないサプライヤーをコンシューマーにデモートし、その後新しいハードウェアを持つ別のサプライヤーを追加することもできます。
13.1. コマンドラインを使用したレプリカのプロモート リンクのコピーリンクがクリップボードにコピーされました!
以下のようにプロモートできます。
- コンシューマーをハブまたはサプライヤーへ
- ハブをサプライヤーへ
本セクションでは、dc=example,dc=com 接尾辞のレプリカをプロモートする方法を説明します。
前提条件
- Directory Server インスタンスがレプリケーショントポロジーのメンバーである。
- プロモートするレプリカがコンシューマーまたはハブである。
手順
プロモートするレプリカがレプリカ合意を持つハブで、ハブがプロモート後にデータを他のホストに送信しないようにするには、レプリカ合意を削除します。
ハブのレプリカ合意をリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt list --suffix "dc=example,dc=com" dn: cn=example-agreement,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config cn: example-agreement ...cn属性には、次の手順に必要なレプリカ合意名が含まれます。ハブからレプリカ合意を削除します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt delete --suffix "dc=example,dc=com" example-agreement
インスタンスをプロモートします。
コンシューマーまたはハブをサプライヤーにプロモートする場合は、以下を入力します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication promote --suffix "dc=example,dc=com" --newrole "supplier" --replica-id 2重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数値である必要があります。コンシューマーをハブにプロモートする場合は、以下を入力します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication promote --suffix "dc=example,dc=com" --newrole "hub"
- 新しいロールのレプリカがトポロジー内の他のホストに更新を送信する必要がある場合は、レプリカ合意を作成します。
13.2. Web コンソールを使用したレプリカのプロモート リンクのコピーリンクがクリップボードにコピーされました!
以下のようにプロモートできます。
- コンシューマーをハブまたはサプライヤーへ
- ハブをサプライヤーへ
本セクションでは、dc=example,dc=com 接尾辞のレプリカをプロモートする方法を説明します。
前提条件
- Directory Server インスタンスがレプリケーショントポロジーのメンバーである。
- プロモートするレプリカがコンシューマーまたはハブである。
- Web コンソールでインスタンスにログインしている。
手順
プロモートするレプリカがレプリカ合意を持つハブで、ハブがプロモート後にデータを他のホストに送信しないようにするには、レプリカ合意を削除します。
- → に移動します。
-
削除する合意の横にある をクリックし、
Delete Agreementを選択します。
→ に移動し、 ボタンをクリックします。
コンシューマーまたはハブをサプライヤーにプロモートする場合は、
Supplierを選択して一意のレプリカ ID を入力します。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は
1から65534の間の一意の整数値である必要があります。-
コンシューマーをハブにプロモートする場合は、
Hubを選択します。
-
Yes, I am sure. を選択します。 - をクリックします。
- 新しいロールのレプリカがトポロジー内の他のホストに更新を送信する必要がある場合は、レプリカ合意を作成します。
13.3. コマンドラインを使用したレプリカのデモート リンクのコピーリンクがクリップボードにコピーされました!
以下のようにデモートできます。
- サプライヤーまたはハブをコンシューマーへ
- ハブをコンシューマーへ
本セクションでは、dc=example,dc=com 接尾辞のレプリカをデモートする方法を説明します。
前提条件
- Directory Server インスタンスがレプリケーショントポロジーのメンバーである。
- デモートするレプリカがサプライヤーまたはハブである。
手順
デモートするレプリカに必要なくなったレプリカ合意がある場合は、たとえばレプリカをコンシューマーにデモートする場合、レプリカ合意を削除します。
レプリカのレプリカ合意をリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt list --suffix "dc=example,dc=com" dn: cn=example-agreement,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config cn: example-agreement ...cn属性には、次の手順に必要なレプリカ合意名が含まれます。レプリカからレプリカ合意を削除します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt delete --suffix "dc=example,dc=com" example-agreement
インスタンスをデモートします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication demote --suffix "dc=example,dc=com" --newrole "hub_or_consumer"設定するロールに応じて
--newroleパラメーターをhubまたはconsumerに設定します。- レプリカをハブとして設定していて、トポロジー内の他のホストに更新を送信する必要がある場合は、レプリカ合意を作成します。
13.4. Web コンソールを使用したレプリカのデモート リンクのコピーリンクがクリップボードにコピーされました!
以下のようにデモートできます。
- サプライヤーまたはハブをコンシューマーへ
- ハブをコンシューマーへ
本セクションでは、dc=example,dc=com 接尾辞のレプリカをデモートする方法を説明します。
前提条件
- Directory Server インスタンスがレプリケーショントポロジーのメンバーである。
- デモートするレプリカがサプライヤーまたはハブである。
- Web コンソールでインスタンスにログインしている。
手順
デモートするレプリカに必要なくなったレプリカ合意がある場合は、たとえばレプリカをコンシューマーにデモートする場合、レプリカ合意を削除します。
- → に移動します。
-
削除する合意の横にある をクリックし、
Delete Agreementを選択します。
- → に移動し、 ボタンをクリックします。
- 新しいレプリカロールを選択します。
-
Yes, I am sure. を選択します。 - をクリックします。
- 新しいロールのレプリカがトポロジー内の他のホストに更新を送信する必要がある場合は、レプリカ合意を作成します。
第14章 レプリケーション変更ログのトリミング リンクのコピーリンクがクリップボードにコピーされました!
Directory Server の changelog は、受け取ったおよび処理された変更のリストを管理します。これには、クライアントの変更やレプリケーションパートナーから受け取った変更が含まれます。
デフォルトでは、Directory Server は 7 日より古い changelog エントリーを削除します。ただし、次のように設定できます。
-
nsslapd-changelogmaxageパラメーター: 変更ログのエントリーの最大期間 -
nsslapd-changelogmaxentriesパラメーター: 変更ログにおけるレコードの合計数。
これらの設定の少なくとも 1 つを有効にした場合、ディレクトリーサーバーはデフォルトで 5 分ごとに変更ログをトリミングします (nsslapd-changelogtrim-interval)。
トリミング設定が有効であっても、どのレコードも、その後に作成されたレコードも、トポロジー内のすべてのサーバーに正常にレプリケートされるまで、changelog に残ります。レプリケーショントポロジーからサプライヤーを削除する の説明に従ってトポロジーからサプライヤーを削除すると、ディレクトリーサーバーはこのサプライヤーのすべての更新を他のサーバーの変更ログから削除します。
14.1. コマンドラインを使用したレプリケーション changelog トリミングの設定 リンクのコピーリンクがクリップボードにコピーされました!
Directory Server は、デフォルトで 7 日より古い changelog エントリーを削除します。ただし、Directory Server がエントリーを削除するまでの時間を設定できます。エントリー数が設定値を超えた場合にエントリーを自動的に削除するように Directory Server を設定することもできます。
このセクションでは、dc=example,dc=com 接尾辞の changelog のトリミングを設定する方法を説明します。
Red Hat は、最大エントリー数ではなく、最長期間を設定することを推奨します。最長期間は、cn=replica,cn=suffixDN,cn=mapping tree,cn=config エントリーの nsDS5ReplicaPurgeDelay パラメーターに設定されたレプリケーションパージ遅延と一致する必要があります。
サプライヤーでこの手順を実行します。
前提条件
-
dc=example,dc=com接尾辞のレプリケーションを有効にしている。
手順
変更ログのトリミングを設定します。
changelog エントリーの最長期間を設定するには、以下を入力します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --suffix "dc=example,dc=com" --max-age "4w"このコマンドは、最長期間を 4 週間に設定します。パラメーターは、以下の単位をサポートします。
-
s(S) (秒) -
m(M) (分) -
h(H) (時間) -
d(D) (日) -
w(W) (週)
-
エントリーの最大数を設定するには、以下を入力します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --suffix "dc=example,dc=com" --max-entries "100000"このコマンドは、changelog のエントリーの最大数を 100,000 に設定します。
デフォルトでは、Directory Server は changelog を 5 分 (300 秒) ごとにトリミングします。別の間隔を設定するには、以下を入力します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --suffix "dc=example,dc=com" --trim-interval 600このコマンドは、間隔を 10 分 (600 秒) に設定します。
検証
接尾辞の changelog 設定を表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication get-changelog --suffix "dc=example,dc=com" dn: cn=changelog,cn=userroot,cn=ldbm database,cn=plugins,cn=config cn: changelog nsslapd-changelogmaxage: 4w nsslapd-changelogtrim-interval: 600 ...このコマンドは、デフォルトとは異なるパラメーターのみを表示します。
14.2. 大規模な changelog の手動によるサイズ縮小 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーション changelog のトリミングが有効になっていない場合など、特定の状況では、changelog が過度に大きなサイズに増大する可能性があります。これを修正するには、changelog のサイズを手動で減らすことができます。
この手順では、dc=example,dc=com 接尾辞の変更ログをトリミングする方法を説明します。サプライヤーでこの手順を実行します。
前提条件
-
dc=example,dc=com接尾辞のレプリケーションを有効にしている。
手順
オプション: changelog のサイズを表示します。
dc=example,dc=com接尾辞のバックエンドデータベースを特定します。# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot)括弧内の名前は、対応する接尾辞のデータを保存するバックエンドデータベースです。
userrootバックエンドの変更ログファイルのサイズを表示します。# ls -lh /var/lib/dirsrv/slapd-instance_name/db/userroot/replication_changelog.db -rw-------. 1 dirsrv dirsrv 517M Jul 5 12:58 /var/lib/dirsrv/slapd-instance_name/db/userroot/replication_changelog.db
changelog サイズを縮小した後にパラメーターをリセットできるようにするには、対応するパラメーターの現在の値を表示して書き留めます。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication get-changelog --suffix "dc=example,dc=com" dn: cn=changelog,cn=userroot,cn=ldbm database,cn=plugins,cn=config cn: changelog nsslapd-changelogmaxage: 4w nsslapd-changelogtrim-interval: 300出力に特定の属性が表示されない場合、Directory Server はデフォルト値を使用します。
一時的に、トリミングに関連するパラメーターを減らします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --suffix "dc=example,dc=com" --max-age "300s" --max-entries 500 --trim-interval 60重要パフォーマンス上の理由から、短い間隔設定を永続的に使用しないでください。
-
--trim-intervalパラメーターに設定した時間が経過するのを待ちます。 changelog を圧縮して、ディスク領域を再度確保します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend compact-db --only-changelogchangelog パラメーターを、一時的に減らす前の値にリセットします。
# dsconf -D "cn=Directory Manager" ldap://server.example.com replication set-changelog --suffix "dc=example,dc=com" --max-age "4w" --trim-interval 300
検証
changelog のサイズを表示します。
# ls -lh /var/lib/dirsrv/slapd-instance_name/db/userroot/replication_changelog.db -rw-------. 1 dirsrv dirsrv 12M Jul 5 12:58 /var/lib/dirsrv/slapd-instance_name/db/userroot/replication_changelog.db
第15章 レプリケーション changelog の暗号化 リンクのコピーリンクがクリップボードにコピーされました!
攻撃者がサーバーのファイルシステムにアクセスできる場合は、レプリケーション changelog を暗号化してインスタンスのセキュリティーを強化します。
changelog 暗号化は、サーバーの TLS 暗号化キーと同じ PIN を使用してキーのロックを解除します。サーバーの起動時に PIN を手動で入力するか、PIN ファイルを使用する必要があります。
Directory Server は、無作為に生成された対称暗号キーを使用して、changelog を暗号化および復号化します。サーバーは、設定された暗号ごとに異なるキーを使用します。これらの鍵は、サーバーの TLS 証明書から公開鍵を使用してラップされ、生成したラップ済みキーがサーバーの設定ファイル内に保存されます。属性暗号化の効果的な強度は、ラップに使用されるサーバーの TLS キーの強度と同じです。サーバーの秘密鍵と PIN にアクセスできないと、ラップ済みのコピーから対称キーを復旧することができません。
15.1. コマンドラインを使用した changelog の暗号化 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジーのセキュリティーを向上させるには、サプライヤーおよびハブの changelog を暗号化します。この手順では、dc=example,dc=com 接尾辞に対して changelog 暗号化を有効にする方法を説明します。
前提条件
- サーバーの TLS 暗号化が有効になっている。
- ホストは、レプリケーショントポロジー内のサプライヤーまたはハブです。
手順
changelog(例:
/tmp/changelog.ldifファイル) をエクスポートします。# dsconf -D "cn=Directory Manager" ldap://server.example.com replication export-changelog to-ldif -o /tmp/changelog.ldif -r "dc=example,dc=com"dc=example,dc=com接尾辞の変更ログの暗号化を有効にします。# dsconf -D "cn=Directory Manager" ldap://server.example.com replication --suffix "dc=example,dc=com" --encrypt/tmp/changelog.ldifファイルから changelog をインポートします。# dsconf -D "cn=Directory Manager" ldap://server.example.com replication import-changelog from-ldif -r "dc=example,dc=com" /tmp/changelog.ldifインスタンスを再起動します。
# dsctl instance_name restart
検証
- エントリーの更新など、LDAP ディレクトリーに変更を加えます。
インスタンスを停止します。
# dsctl instance_name stop接尾辞とそれに対応するデータベースをリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend suffix list dc=example,dc=com (userroot)changelog の暗号化を有効にするデータベースの名前を書き留めておきます。
以下のコマンドを実行して、changelog の一部を表示します。
# dbscan -f /var/lib/dirsrv/slapd-instance_name/db/userroot/replication_changelog.db | tail -50changelog が暗号化されている場合は、暗号化されたデータのみが表示されます。
インスタンスを起動します。
# dsctl instance_name start
第17章 部分レプリケーションでの属性の管理 リンクのコピーリンクがクリップボードにコピーされました!
部分レプリケーションでは、Directory Server がサプライヤーからコンシューマー (または別のサプライヤー) に複製しない属性を設定します。したがって、Directory Server は、データベースに含まれるすべての情報や各エントリーのすべての情報を複製せずにデータベースを複製できるため、サーバーのパフォーマンスとセキュリティーが向上します。
次の場合には部分レプリケーションを使用します。
- 低速ネットワーク経由で送信されるサイズが大きい属性の数を制限する。
-
Directory Server が
memberOfの計算などの修正タスクを実行する回数を減らす。 - コンシューマーサーバーが信頼できないネットワーク上に配置されている場合は、機密属性をレプリケーションから除外する必要がある。
部分レプリケーションは、エントリーごとではなく、レプリカ合意ごとに有効化および設定されます。レプリケーションから属性を除外すると、レプリカ合意の範囲内のすべてのエントリーに等しく適用されます。増分更新 (nsDS5ReplicatedAttributeList) と全体更新 (nsDS5ReplicatedAttributeListTotal) に対して複製するさまざま属性を設定し、部分レプリケーション (nsds5ReplicaStripAttrs) 時に、空の更新を防ぐことができます。
部分レプリケーションパラメーターはレプリカ合意の一部であり、レプリカ合意の作成時にコマンドラインを使用して、または Web コンソールのレプリカ合意ウィザードでこれらのパラメーターを設定できます。
17.1. コマンドラインを使用して、合計更新と増分更新から属性を除外する リンクのコピーリンクがクリップボードにコピーされました!
基本的なシナリオでは、部分レプリケーションでは、合計更新と増分更新から同じ属性リストを除外します。ただし、次の設定属性を使用して、パフォーマンス上の理由から、増分更新と全体更新からさまざまな属性を除外するように Directory Server を設定できます。
nsDS5ReplicatedAttributeList-
これは主要な部分レプリケーション属性です。
nsDS5ReplicatedAttributeListのみを設定すると、Directory Server は指定された属性を増分更新と全体更新の両方から除外します。 nsDS5ReplicatedAttributeListTotal- この部分レプリケーション属性は、Directory Server が全体 (初期) 更新からのみ除外する必要がある属性のリストを指定します。
たとえば、エントリーに memberOf 属性を追加するたびに、Directory Server は memberOf 修正タスクを実行してグループメンバーシップを解決します。レプリケーションが発生するたびに Directory Server がタスクを実行すると、サーバーにオーバーヘッドが発生する可能性があります。合計の更新は、レプリケーションに新たに追加されたり、長期間オフラインになったデータベースでのみ実行されるため、合計更新後に memberOf 修正タスクを実行することは、許容可能なオプションです。この場合、nsDS5ReplicatedAttributeList 属性には memberOf が含まれており、増分更新から除外されますが、nsDS5ReplicatedAttributeListTotal には memberOf が含まれていないため、合計更新に含まれます。
次の手順では、増分更新と全体更新からさまざまな属性を除外します。
前提条件
-
dc=example,dc=com接尾辞を複製し、レプリカ合意example_agreementが存在する。
手順
dsconfユーティリティーを使用して部分レプリケーションを設定します。# dsconf -D "cn=Directory Manager" instance_name repl-agmt set example_agreement --suffix="dc=example,dc=com" --frac-list="authorityRevocationList accountUnlockTime memberof" --frac-list-total="accountUnlockTime"このコマンドは、
authorityRevocationList、accountUnlockTime、memberof属性を増分更新から除外し、accountUnlockTimeのみを合計更新から除外します。- 注記
-
合計更新と増分更新から同じ属性のリストを除外する場合は、the--
frac-list オプションを使用して、除外される属性のリストをnsDS5ReplicatedAttributeList設定属性にのみ追加します。
-
オプション: 空のレプリケーション更新を防ぐ場合は、
--strip-listオプションを使用して、Directory Server がレプリケーションから削除する属性を追加します。詳細は、部分レプリケーションでの空の更新の防止 を参照してください。
検証
レプリカ合意設定を表示します。
# dsconf instance_name repl-agmt list --suffix=dc=example,dc=com | grep -i nsDS5ReplicatedAttributeList nsDS5ReplicatedAttributeList: (objectclass=) $ EXCLUDE authorityRevocationList accountUnlockTime memberof nsDS5ReplicatedAttributeListTotal: (objectclass=) $ EXCLUDE accountUnlockTime- 重要
-
nsDS5ReplicatedAttributeListとnsDS5ReplicatedAttributeListTotalの値には(objectclass=*) $ EXCLUDE部分が含まれている必要があります。たとえば、ldapmodifyユーティリティーを使用して属性を直接編集する場合は、除外する属性のリストとともにこの部分を指定する必要があります。
-
nsDS5ReplicatedAttributeList -
nsDS5ReplicatedAttributeListTotal
17.2. Web コンソールを使用して、合計更新と増分更新から属性を除外する リンクのコピーリンクがクリップボードにコピーされました!
基本的なシナリオでは、部分レプリケーションでは、合計更新と増分更新から同じ属性リストを除外します。ただし、パフォーマンス上などの理由で、増分更新からさまざまな属性を除外するように Directory Server を設定できます。
前提条件
-
dc=example,dc=com接尾辞を複製し、レプリカ合意example_agreementが存在する。
手順
- → に移動します。
- 部分レプリケーションを設定する合意の Options メニュー (⫶) をクリックし、 を選択してウィザードウィンドウを開きます。
Fractional Settings タブを開き、次のフィールドを設定します。
- 合計更新と増分更新から同じ属性を除外する場合は、これらの属性を Exclude Attributes フィールドにのみ追加します。
合計更新と増分更新から異なる属性を除外する場合:
-
増分更新から除外される属性を、
nsDS5ReplicatedAttributeListパラメーターを設定する 除外属性 フィールドに追加します。 -
合計 (初期) 更新から除外される属性を、
nsDS5ReplicatedAttributeListTotalパラメーターを設定する Exclude Init Attributes フィールドに追加します。
-
増分更新から除外される属性を、
- オプション: 空のレプリケーション更新を防止する場合は、Directory Server がレプリケーションから削除する属性を Strip Attributes フィールドに追加します。
- Save Agreement ボタンをクリックします。
検証
- 変更を表示するには、レプリカ合意設定を開きます。
17.3. 部分レプリケーションにおける空の更新の防止 リンクのコピーリンクがクリップボードにコピーされました!
部分レプリケーションでは、レプリケーション更新から属性が除外されます (nsDS5ReplicatedAttributeList、nsDS5ReplicatedAttributeListTotal)。しかし、除外された属性への変更があっても、修正イベントが発生し、空のレプリケーション更新が生成されます。
空の更新を防ぐには、Directory Server が空のレプリケーションイベントで送信せず、更新シーケンスから削除する属性のリストを追加する nsds5ReplicaStripAttrs パラメーターを使用します。これには論理的に、modifiersName のような操作属性が含まれる必要があります。レプリケーションイベントが空でない場合、Directory Server は削除された属性を他の変更とともに複製します。
たとえば、accountUnlockTime 属性をレプリケーションから除外しました。ロックされたユーザーの場合、accountUnlockTime で設定された期間が経過すると、Directory Server は自動的にユーザーのロックを解除します。accountUnlockTime 属性のみが変更され、その属性はレプリケーションから除外されます。ただし、このロック解除イベントは、操作属性 internalmodifytimestamp も変更します。これにより、ユーザーアカウントが変更されたため、レプリケーションイベントがトリガーされます。ただし、複製されるデータは新しい変更タイムスタンプのみであり、それ以外の場合は更新は空になります。ログイン時間やパスワードの有効期限に関連する属性が多数ある場合、空のレプリケーション更新が多数作成され、サーバーのパフォーマンスに悪影響を与えたり、関連するアプリケーションに干渉したりする可能性があります。
次の手順では、空の更新を防ぐために不要な属性を削除します。
前提条件
-
dc=example,dc=com接尾辞を複製し、レプリカ合意example_agreementが存在する。
手順
dsconfユーティリティーを使用して部分レプリケーションを調整します。# dsconf -D "cn=Directory Manager" instance_name repl-agmt set example_agreement \ --suffix="dc=example,dc=com" --strip-list="modifiersname \ modifytimestamp internalmodifiersname" Successfully updated agreement
検証
レプリカ合意設定を表示します。
# dsconf instance_name repl-agmt list --suffix=dc=example,dc=com | grep -i nsds5ReplicaStripAttrs nsds5ReplicaStripAttrs: modifiersname modifytimestamp internalmodifiersname
17.4. レプリケーション keep-alive エントリーの表示 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジー内のサプライヤーの属性を更新すると、サプライヤーの changelog 変更シーケンス番号 (CSN) が増加します。次に、サプライヤーは最初のコンシューマーに接続し、ローカル CSN をコンシューマーの CSN と比較します。ローカル CSN の方が低い場合は、ローカルの changelog から更新内容を取得し、コンシューマーにレプリケートします。部分レプリケーションが有効になっているレプリケーショントポロジーでは、これが問題を引き起こす可能性があります。たとえば、レプリケーションから除外されている属性のみがサプライヤー上で更新された場合、レプリケートする更新は見つからないため、コンシューマー上で CSN は更新されません。さらに、サプライヤーの更新を不必要に検索すると、他のサーバーが必要な時間よりも遅れてデータを受信する可能性があります。この問題を回避するために、Directory Server ではキープアライブエントリーを使用します。
サプライヤー上の更新された属性がすべてレプリケーションから除外され、スキップされた更新の数が 100 を超える場合、Directory Server はサプライヤー上の keepalivetimestamp 属性を更新して、コンシューマーにレプリケートし、コンシューマー上の CSN を変更します。これで、コンシューマーの CSN はサプライヤーの CSN と等しくなり、次にサプライヤーがコンシューマーに接続するときには、コンシューマーの CSN よりも新しい更新のみが検索されます。これにより、サプライヤーが送信する新しい更新情報を検索するために費やす時間が短縮されます。
Directory Server は、次の状況でサプライヤーのレプリケーション keep-alive エントリーを自動的に作成または更新します。
- 一部レプリカ合意が 100 を超える更新を省略し、レプリケーションセッションの終了前に更新を送信しません。
- サプライヤーがコンシューマーを初期化すると、最初に独自のキープアライブエントリーを作成します。サプライヤーでもあるコンシューマーは、別のコンシューマーも初期化しない限り、独自のキープアライブエントリーを作成しません。
次の手順では、レプリケーションの問題を解決するために使用できる keep-alive エントリーの詳細を検索します。
前提条件
- Directory Manager のパスワード
手順
ldapsearchユーティリティーを使用して、keep-alive エントリーを見つけます。# ldapsearch -D "cn=Directory Manager" -b "dc=example,dc=com" -W -H ldap://server.example.com -x 'objectClass=ldapsubentry' Enter LDAP Password: password # repl keep alive 1, example.com dn: cn=repl keep alive 1,dc=example,dc=com keepalivetimestamp: 20250204204708Z objectClass: top objectClass: ldapsubentry objectClass: extensibleObject cn: repl keep alive 1各 keep-alive エントリーは特定のサプライヤーに固有であり、識別名 (DN) にサプライヤーのレプリカ ID が含まれます。この例では、レプリカ ID は
1です。
第18章 コマンドラインを使用したレプリケーショントポロジーの監視 リンクのコピーリンクがクリップボードにコピーされました!
サプライヤー、コンシューマー、およびハブの間のディレクトリーデータレプリケーションの状態を監視するには、レプリケーションの進行状況、レプリカ ID、変更の数、およびその他のパラメーターに関する情報を提供するレプリケーショントポロジーレポートを使用できます。レポートをより速く生成して読みやすくするために、独自の認証情報およびエイリアスを設定できます。
18.1. コマンドラインを使用したレプリケーショントポロジーレポートの表示 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジー内の各合意のレプリケーションステータスに関する全体的な情報を表示するには、レプリケーショントポロジーレポートを表示できます。これを行うには、dsconf replication monitor コマンドを使用します。
前提条件
- ホストがレプリケーショントポロジーのメンバーである。
- コンシューマーを初期化している。
手順
レプリケーショントポロジーレポートを表示するには、次のように入力します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication monitordsconfユーティリティーは、トポロジー内の各インスタンスの認証情報を要求します。Enter password for cn=Directory Manager on ldap://supplier.example.com: password Enter a bind DN for consumer.example.com:389: cn=Directory Manager Enter a password for cn=Directory Manager on consumer.example.com:389: password Supplier: server.example.com:389 -------------------------------- Replica Root: dc=example,dc=com Replica ID: 1 Replica Status: Online Max CSN: 5e3acb77001d00010000 Status For Agreement: "example-agreement" (consumer.example.com:1389) Replica Enabled: on Update In Progress: FALSE Last Update Start: 20211209122116Z Last Update End: 20211209122116Z Number Of Changes Sent: 1:21/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded Last Init Start: 20211209122111Z Last Init End: 20211209122114Z Last Init Status: Error (0) Total update succeeded Reap Active: 0 Replication Status: In Synchronization Replication Lag Time: 00:00:00 Supplier: consumer.example.com:1389 ----------------------------------- Replica Root: dc=example,dc=com Replica ID: 65535 Replica Status: Online Max CSN: 00000000000000000000
18.2. .dsrc ファイルでのレプリケーション監視の認証情報の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、dsconf replication monitor コマンドは、リモートインスタンスに対して認証する際に、バインド DN およびパスワードを要求します。将来、レポートをより速く簡単に生成するために、ユーザーの ~/.dsrc ファイルで、トポロジー内のサーバーごとにバインド DN と任意でパスワードを設定できます。
前提条件
- ホストがレプリケーショントポロジーのメンバーである。
- コンシューマーを初期化している。
手順
-
オプション:
~/.dsrcファイルを作成します。 ~/.dsrcファイルで、バインド DN およびパスワードを設定します。以下に例を示します。[repl-monitor-connections] connection1 = server1.example.com:389:cn=Directory Manager:* connection2 = server2.example.com:389:cn=Directory Manager:[~/pwd.txt] connection3 = hub1.example.com:389:cn=Directory Manager:S3cretこの例では、connection1 から connection3 を各エントリーのキーとして使用します。ただし、任意の一意のキーを使用できます。
dsconf replication monitorコマンドを実行すると、dsconfユーティリティーはインスタンスのレプリカ合意で設定されたすべてのサーバーに接続します。このユーティリティーが~/.dsrcでホスト名を見つけると、定義された認証情報を使用してリモートサーバーに対して認証されます。上記の例では、dsconfはサーバーへの接続時に以下の認証情報を使用します。Expand ホスト名 バインド DN パスワードの設定方法 server1.example.com
cn=Directory Manager
パスワードを要求する
server2.example.com
cn=Directory Manager
~/pwd.txtからパスワードを読み取るhub1.example.com
cn=Directory Manager
S3cret
検証
-
dsconf replication monitorコマンドを実行して、dsconfユーティリティーが~/.dsrcファイルで設定された認証情報を使用するかどうかを確認します。詳しくは、コマンドラインを使用したレプリケーショントポロジーレポートの表示 を参照してください。
18.3. レプリケーショントポロジーモニタリング出力でのエイリアスの使用 リンクのコピーリンクがクリップボードにコピーされました!
レポートを読みやすくするために、レポート出力に表示される独自のエイリアスを設定できます。デフォルトでは、レプリケーション監視レポートにはリモートサーバーのホスト名が含まれています。
前提条件
- ホストがレプリケーショントポロジーのメンバーである。
- コンシューマーを初期化している。
手順
レポートにエイリアスを表示する場合は、次のいずれかの方法を使用します。
~/.dsrcファイルでエイリアスを定義します。[repl-monitor-aliases] M1 = server1.example.com:389 M2 = server2.example.com:389-a alias=host_name:portパラメーターをdsconf replication monitorコマンドに渡して、エイリアスを定義します。# dsconf -D "cn=Directory Manager" ldap://server.example.com replication monitor -a M1=server1.example.com:389 M2=server2.example.com:389
どちらの場合も、dsconf replication monitor コマンドは出力にエイリアスを表示します。
...
Supplier: M1 (server1.example.com:389)
--------------------------------
Replica Root: dc=example,dc=com
...
Supplier: M2 (server2.example.com:389)
--------------------------------
Replica Root: dc=example,dc=com
第19章 Web コンソールを使用したレプリケーショントポロジーの監視 リンクのコピーリンクがクリップボードにコピーされました!
サプライヤー、コンシューマー、およびハブの間のディレクトリーデータレプリケーションの状態を監視するには、レプリケーションの進行状況、レプリカ ID、変更の数、およびその他のパラメーターに関する情報を提供するレプリケーショントポロジーレポートを使用できます。レポートをより速く生成して読みやすくするために、独自の認証情報およびエイリアスを設定できます。
19.1. Web コンソールを使用したレプリケーショントポロジーレポートの表示 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジー内の各合意のレプリケーションステータスに関する全体的な情報を表示するには、レプリケーショントポロジーレポートを表示できます。
前提条件
- ホストがレプリケーショントポロジーのメンバーである。
- コンシューマーを初期化している。
- Web コンソールにログインしている。
手順
- → に移動します。 ページが開きます。
- をクリックします。
リモートインスタンスにログインするためのパスワードを入力し、 をクリックします。Directory Server は、既存のレプリケーションアグリーメントのバインド DN 値を使用します。
レプリケーショントポロジーレポートは、 タブで生成されます。
注記別のレプリケーショントポロジーレポートを生成するには、 タブに移動します。
19.2. Web コンソールを使用したレプリケーション監視の認証情報の設定 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーショントポロジーレポートをより迅速かつ簡単に生成するために、認証用のトポロジー内のサーバーごとに、独自のバインド DN と任意でパスワードを設定できます。この場合、レプリケーショントポロジーレポートを生成するたびにレプリケーション認証情報を確認する必要はありません。デフォルトでは、Directory Server は既存のレプリケーションアグリーメントからこれらの認証情報を取得します。
前提条件
- ホストがレプリケーショントポロジーのメンバーである。
- コンシューマーを初期化している。
- Web コンソールにログインしている。
手順
- → に移動します。 ページが開きます。
- をクリックします。
リモートインスタンスへの認証に使用するレプリケーションのログイン認証情報を入力します。
-
Hostname。サーバーが認証するリモートインスタンスのホスト名。 -
Port。リモートインスタンスポート。 -
Bind DN。認証に使用される DN をリモートインスタンスにバインドします。 -
Password。認証に使用されるパスワード。 -
Interactive Input。オンにすると、レプリケーショントポロジーレポートを生成するたびに Directory Server がパスワードを要求します。
-
- をクリックします。
検証
レプリケーショントポロジーレポートを生成して、レポートが認証情報を要求するかどうかを確認します。詳しくは、Web コンソールを使用したレプリケーショントポロジーレポートの表示 を参照してください。
19.3. Web コンソールを使用したレプリケーション命名エイリアスの設定 リンクのコピーリンクがクリップボードにコピーされました!
レポートを読みやすくするために、レポート出力に表示される独自のエイリアスを設定できます。デフォルトでは、レプリケーション監視レポートにはサーバーのホスト名が含まれています。
前提条件
- ホストがレプリケーショントポロジーのメンバーである。
- コンシューマーを初期化している。
- Web コンソールにログインしている。
手順
- → に移動します。 ページが開きます。
- をクリックします。
エイリアスの詳細を入力します。
-
Alias。レプリケーショントポロジーレポートに表示されるエイリアス。 -
Hostname。インスタンスのホスト名。 -
Port。インスタンスポート。
-
- をクリックします。
検証
- レプリケーショントポロジーレポートを生成して、レポートが新しいエイリアスを使用しているかどうかを確認します。詳しくは、Web コンソールを使用したレプリケーショントポロジーレポートの表示 を参照してください。
第20章 2 つの Directory Server インスタンスの比較 リンクのコピーリンクがクリップボードにコピーされました!
ds-replcheck ユーティリティーを使用して、2 つの Directory Server インスタンスが同期されていることを確認できます。オンラインまたはオフラインモードで 2 つの LDIF 形式のファイルを使用して 2 つのサーバーを比較できます。
20.1. 2 つの Directory Server インスタンスのレプリケーションステータス表示 リンクのコピーリンクがクリップボードにコピーされました!
ds-replcheck ユーティリティーを使用して、2 つの Directory Server インスタンスのレプリケーションステータスを表示できます。
手順
次のコマンドを使用して、2 つの Directory Server インスタンスのレプリケーションステータスを表示します。
# ds-replcheck state -D "cn=Directory Manager" -W -m ldap://server1.example.com:389 -r ldap://server2.example.com:389 -b "dc=example,dc=com" Replication State: Replica is behind Supplier by: 264 seconds
20.2. 2 つのオンライン Directory Server インスタンスの比較 リンクのコピーリンクがクリップボードにコピーされました!
2 つのオンラインサーバーを比較すると、負荷が大きい場合、そのデータベースの内容が異なります。この問題を回避するために、ds-replcheck は -l time_in_seconds パラメーターを ds-replcheck に渡すことにより、ラグタイム値を使用します。デフォルトでは、この値は 300 秒 (5 分) に設定されます。ユーティリティーがラグタイム内の不整合を検出した場合、ユーティリティーはそれを報告しません。これにより、誤検出が軽減されます。
デフォルトでは、レプリカ合意の特定の属性を複製から除外した場合、ds-replcheck はこれらの属性を異なると報告します。これらの属性を無視するには、ユーティリティーに -i attribute_list パラメーターを渡します。
手順
オンラインで、
supplier.example.comとreplica.example.comのdc=example,dc=com接尾辞を比較するには、次のように入力します。# ds-replcheck online -D "cn=Directory Manager" -W -m ldap://supplier.example.com:389 -r ldap://replica.example.com:389 -b "dc=example,dc=com"-mパラメーターおよび-rパラメーターは、サプライヤーとレプリカへの URL を設定します。
20.3. オフラインの 2 つの Directory Server インスタンスの比較 リンクのコピーリンクがクリップボードにコピーされました!
2 つのオフライン Directory Server インスタンスを比較するには、両方のホスト上のデータベースをエクスポートし、ds-replcheck を使用してそれらを比較します。
デフォルトでは、レプリカ合意の特定の属性を複製から除外した場合、ds-replcheck はこれらの属性を異なると報告します。これらの属性を無視するには、ユーティリティーに -i attribute_list パラメーターを渡します。
手順
サプライヤーで、接尾辞とそれに対応するデータベースをリストします。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com backend suffix list dc=example,dc=com (userroot) o=test (test_database)比較するデータベースの名前または接尾辞をメモします。
インスタンスの実行中にデータベースをエクスポートします。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com backend export -r -l /var/lib/dirsrv/slapd-instance_name/ldif/export-supplier.ldif userRoot-rパラメーターは、エクスポートにレプリケーション状態情報が含まれるようにし、-lはエクスポートファイルへのパスを設定します。そのファイルを作成するには、dirsrvユーザーが宛先ディレクトリーへの書き込み権限を持っている必要があることに注意してください。- サプライヤーと比較するレプリカで前の手順を繰り返します。
エクスポートしたファイルを一方のホストからもう一方のホストにコピーします。たとえば、LDIF ファイルを
replica.example.comからsupplier.example.comにコピーするには、レプリカで次のコマンドを入力します。# scp /var/lib/dirsrv/slapd-instance_name/ldif/export-replica.ldif supplier.example.com:/var/lib/dirsrv/slapd-instance_name/ldif/このコマンドでは、SSH を使用してサプライヤーにアクセスできる必要があることに注意してください。
サプライヤーで、2 つの LDIF ファイルを比較します。
# ds-replcheck offline -m /var/lib/dirsrv/slapd-instance_name/ldif/export-supplier.ldif -r /var/lib/dirsrv/slapd-instance_name/ldif/export-replica.ldif -rid 1 -b "dc=example,dc=com"-mおよび-rパラメーターは、サプライヤーとレプリカへのパスを設定し、-ridは、サプライヤーのレプリカ ID を設定します。
20.4. ds-replcheck 出力の説明 リンクのコピーリンクがクリップボードにコピーされました!
ds-replcheck ユーティリティーの出力には、次のセクションが含まれています。
- データベース RUV
データベースの Replication Update Vectors (RUV) と、最小および最大の Change Sequence Numbers (CSN) をリスト表示します。以下に例を示します。
Supplier RUV: {replica 1 ldap://supplier.example.com:389} 58e53b92000200010000 58e6ab46000000010000 {replica 2 ldap://replica.example.com:389} 58e53baa000000020000 58e69d7e000000020000 {replicageneration} 58e53b7a000000010000 Replica RUV: {replica 1 ldap://supplier.example.com:389} 58e53ba1000000010000 58e6ab46000000010000 {replica 2 ldap://replica.example.com:389} 58e53baa000000020000 58e7e8a3000000020000 {replicageneration} 58e53b7a000000010000- エントリー数
tombstone エントリーを含む、両方のサーバー上のエントリーの合計数を表示します。以下に例を示します。
Supplier: 12 Replica: 10- Tombstones
各レプリカの tombstone エントリーの数を表示します。これらのエントリーは、合計エントリー数に追加されます。以下に例を示します。
Supplier: 4 Replica: 2- 競合エントリー
各競合エントリーの識別名 (DN)、競合タイプ、および作成された日付をリスト表示します。以下に例を示します。
Supplier Conflict Entries: 1 - nsuniqueid=48177227-2ab611e7-afcb801a-ecef6d49+uid=user1,dc=example,dc=com - Conflict: namingConflict (add) uid=user1,dc=example,dc=com - Glue entry: no - Created: Wed Apr 26 20:27:40 2021 Replica Conflict Entries: 1 - nsuniqueid=48177227-2ab611e7-afcb801a-ecef6d49+uid=user1,dc=example,dc=com - Conflict: namingConflict (add) uid=user1,dc=example,dc=com - Glue entry: no - Created: Wed Apr 26 20:27:40 2021- 欠落エントリー
足りない各エントリーの DN と、エントリーが存在する他のサーバーからの作成日をリスト表示します。以下に例を示します。
Entries missing on Supplier: - uid=user2,dc=example,dc=com (Created on Replica at: Wed Apr 12 14:43:24 2021) - uid=user3,dc=example,dc=com (Created on Replica at: Wed Apr 12 14:43:24 2021) Entries missing on Replica: - uid=user4,dc=example,dc=com (Created on Supplier at: Wed Apr 12 14:43:24 2021)- エントリーの不整合
相手のサーバーとは異なる属性を持つエントリーの DN をリスト表示します。状態情報が利用可能な場合は、これも表示されます。属性の状態情報が利用できない場合には、元の値としてリスト表示されます。レプリケーションが初めて初期化されてから、値が更新されていないことを意味します。以下に例を示します。
cn=group1,dc=example,dc=com --------------------------- Replica missing attribute "objectclass": - Supplier's State Info: objectClass;vucsn-58e53baa000000020000: top - Date: Wed Apr 5 14:47:06 2021 - Supplier's State Info: objectClass;vucsn-58e53baa000000020000: groupofuniquenames - Date: Wed Apr 5 14:47:06 2021
第21章 一般的なレプリケーションの問題解決 リンクのコピーリンクがクリップボードにコピーされました!
マルチサプライヤーレプリケーションは、結果整合性レプリケーションモデルを使用します。これは、同じエントリーが別のサーバーで変更される可能性があることを意味します。これらの 2 つのサーバー間でレプリケーションが発生すると、Directory Server は競合する変更を解決する必要があります。多くの場合は、各サーバーでの変更に関連するタイムスタンプに基づいて解決が自動的に行われます。最新の変更が優先されます。ただし、競合を解決するために手動での介入が必要になるケースもあります。
21.1. 命名の競合特定および解決 リンクのコピーリンクがクリップボードにコピーされました!
複数のサプライヤーサーバーが同じ識別名 (DN) を持つエントリーを作成する要求を受け取ると、各サーバーはこの DN と異なるエントリーの一意の識別子 (エントリー ID) を使用してエントリーを作成します。エントリー ID は、nsuniqueid 操作属性に保存されます。
たとえば、Server A および Server B は、uid=user_name,ou=people,dc=example,dc=com ユーザーエントリーを作成する要求を受け取ります。その結果、各サーバーに独自のエントリーがあります。
Server A では、エントリーには以下が含まれます。
-
uid=user_name,ou=people,dc=example,dc=com -
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b
-
Server B では、エントリーには以下が含まれます。
-
uid=user_name,ou=people,dc=example,dc=com -
nsuniqueid=643a461e-b61311e1-b23be826-4afeed5f
-
レプリケーション中に、Server A は新しく作成されたエントリー uid=user_name,ou=people,dc=example,dc=com を Server B にレプリケートし、Server B は新しく作成されたエントリーを Server A にレプリケートし、各サーバーで名前の競合が発生します。変更シーケンス番号 (CSN) を比較することにより、各サーバーはどのエントリーが以前に作成されたかを判断します。たとえば、Server B のエントリーが先に作成されました。
自動競合解決手順では、最後に作成されたエントリー (Server A 上のエントリー) が次のように変更されます。
-
一意でない DN に
nsuniqueid値を追加します。 -
nsds5replconflict属性と、競合の原因となった操作の説明を追加します。 -
ldapsubentryobjectclass を追加します。
現在、次のエントリーが両方のサーバーに存在します。
有効な エントリーには以下が含まれます。
-
uid=user_name,ou=people,dc=example,dc=com -
nsuniqueid=643a461e-b61311e1-b23be826-4afeed5f
-
競合 エントリー:
-
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com -
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b
-
名前の競合を手動で解決するには、各サーバーで次の手順を実行します。
手順
競合エントリーをリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict list dc=example,dc=com dn: nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com cn: user_name displayName: user gidNumber: 99998 homeDirectory: /var/empty legalName: user name loginShell: /bin/false nsds5replconflict: namingConflict (ADD) uid=user_name,ou=people,dc=example,dc=com objectClass: top objectClass: nsPerson objectClass: nsAccount objectClass: nsOrgPerson objectClass: posixAccount objectClass: ldapsubentry uid: user_name uidNumber: 99998競合エントリーが存在する場合は、続行方法を決定します。
有効なエントリー (
uid=user_name,ou=people,dc=example,dc=com) を維持し、競合エントリーを削除するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict delete nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com競合エントリー (
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com) のみを保持し、有効なエントリーを削除するには、次のように入力します。# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict swap nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com両方のエントリーを保持するには、新しい相対識別名 (RDN) を指定して、競合エントリーの名前を変更します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict convert --new-rdn=uid=user_name_NEW nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com上記のコマンドは、競合エントリーの名前を
uid=user_name_NEW,ou=people,dc=example,dc=comに変更します。
Directory Server は、競合エントリーに対して実行された LDAP 操作を複製します。通常、レプリケートされた操作は、操作 dn ではなく、元の操作エントリーの nsuniqueid を使用してエントリーを対象としています。ただし、競合エントリーを使用する場合は、動作が異なる場合があります。
21.2. 孤立エントリーの競合特定および解決 リンクのコピーリンクがクリップボードにコピーされました!
Directory Server が削除操作を複製して、コンシューマーサーバーが、削除されるエントリーに子エントリーがあることを検出すると、競合解決の手順により、ディレクトリーに孤立したエントリーが存在しないように glue エントリーが作成されます。
同様に、Directory Server が追加操作を複製し、コンシューマーサーバーが親エントリーを検出できない場合、競合解決の手順で、親の glue エントリーが作成されます。
glue エントリーは、オブジェクトクラス glue および extensibleObject を含む一時エントリーです。glue エントリーは、複数の方法で作成できます。
競合解決手順で、一意識別子が同じエントリーで削除されたものを検出した場合には、glue エントリーには削除されたエントリーと同じ属性がありますが、
glueオブジェクトクラスとnsds5ReplConflict属性が追加されています。このような場合は、glue エントリーを変更して
glueオブジェクトクラスとnsds5ReplConflict属性を削除して、エントリーを通常のエントリーとして維持するか、その子エントリーを削除します。-
サーバーは、
glueおよびextensibleObjectオブジェクトクラスを使用してエントリーを作成します。
手順
孤立したエントリーの競合をリスト表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict list-glue suffix dn: ou=parent,dc=example,dc=com objectClass: top objectClass: organizationalunit objectClass: glue objectClass: extensibleobject ou: parent孤立したエントリーの競合が存在する場合は、続行する方法を決定します。
glue エントリーおよびその子エントリーを削除するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict delete-glue "ou=parent,dc=example,dc=com" dn: ou=parent,dc=example,dc=com objectClass: top objectClass: organizationalunit objectClass: extensibleobject ou: parentglue エントリーを通常のエントリーに変換するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict convert-glue "ou=parent,dc=example,dc=com"
21.3. 廃止または欠落しているサプライヤーに関するエラーの特定および解決 リンクのコピーリンクがクリップボードにコピーされました!
Directory Server は、レプリカ更新ベクトル (RUV) と呼ばれるメタデータのセットとして、他のレプリカに更新を送信する全サプライヤーなどのレプリケーショントポロジーに関する情報を保存します。RUV には、ID と URL、ローカルサーバー上の最新の変更状態番号 (CSN)、最初の変更の CSN などのサプライヤーに関する情報が含まれています。サプライヤーとコンシューマーはいずれも RUV 情報を保存し、これを使用してレプリケーションの更新を制御します。
レプリケーショントポロジーからサプライヤーを削除すると、その情報は別のレプリカの RUV に残る場合があります。cleanallruv タスクを使用して、トポロジー内のすべてのサプライヤーから RUV エントリーを削除できます。
前提条件
- レプリケーションが有効である。
手順
/var/log/dirsrv/slapd-instance_name/errorsログファイルを監視し、以下のようなエントリーを検索します。[22/Jan/2021:17:16:01 -0500] NSMMReplicationPlugin - ruv_compare_ruv: RUV [changelog max RUV] does not contain element [{replica 8 ldap://server2.example.com:389} 4aac3e59000000080000 4c6f2a02000000080000] which is present in RUV [database RUV] ... [22/Jan/2021:17:16:01 -0500] NSMMReplicationPlugin - replica_check_for_data_reload: Warning: for replica dc=example,dc=com there were some differences between the changelog max RUV and the database RUV. If there are obsolete elements in the database RUV, you should remove them using the CLEANALLRUV task. If they are not obsolete, you should check their status to see why there are no changes from those servers in the changelog.この場合、レプリカ ID
8が原因でこのエラーが発生します。有効な ID と無効なすべての RUV レコードとレプリカ ID を表示します。
# dsconf -D "cn=Directory Manager" ldap://server1.example.com replication get-ruv --suffix "dc=example,dc=com" RUV: {replica 1 ldap://server1.example.com} 61a4d8f8000100010000 61a4f5b8000000010000 Replica ID: 1 LDAP URL: ldap://server1.example.com Min CSN: 2021-11-29 13:43:20 1 0 (61a4d8f8000100010000) Max CSN: 2021-11-29 15:46:00 (61a4f5b8000000010000) RUV: {replica 2 ldap://server2.example.com} 61a4d8fb000100020000 61a4f550000000020000 Replica ID: 2 LDAP URL: ldap://server2.example.com Min CSN: 2021-11-29 13:43:23 1 0 (61a4d8fb000100020000) Max CSN: 2021-11-29 15:44:16 (61a4f550000000020000) RUV: {replica 8 ldap://server3.example.com} 61a4d903000100080000 61a4d908000000080000 Replica ID: 8 LDAP URL: ldap://server3.example.com Min CSN: 2021-11-29 13:43:31 1 0 (61a4d903000100080000) Max CSN: 2021-11-29 13:43:36 (61a4d908000000080000)返されるレプリカ ID のリスト (
1、2、および8) を書き留めます。レプリカ ID
8のクリーンアップタスクを実行します。# dsconf -D "cn=Directory Manager" ldap://server1.example.com repl-tasks cleanallruv --suffix="dc=example,dc=com" --replica-id=8Directory Server は RUV クリーンアップタスクを複製することに注意してください。したがって、1 つのサプライヤーでのみ、タスクを開始する必要があります。
レプリカの 1 つがダウンしている場合などに参加できない場合は、
--force-cleaningオプションを使用して、RUV の即時クリーンアップを実行できます。
検証
RUV レコードおよびレプリカ ID を表示します。
# dsconf -D "cn=Directory Manager" ldap://server1.example.com replication get-ruv --suffix "dc=example,dc=com" RUV: {replica 1 ldap://server1.example.com} 61a4d8f8000100010000 61a4f5b8000000010000 Replica ID: 1 LDAP URL: ldap://server1.example.com Min CSN: 2021-11-29 14:02:10 1 0 (61a4d8f8000100010000) Max CSN: 2021-11-29 16:00:00 (61a4f5b8000000010000) RUV: {replica 2 ldap://server2.example.com} 61a4d8fb000100020000 61a4f550000000020000 Replica ID: 2 LDAP URL: ldap://server2.example.com Min CSN: 2021-11-29 14:02:10 1 0 (61a4d8fb000100020000) Max CSN: 2021-11-29 15:58:22 (61a4f550000000020000)このコマンドは、レプリカ ID
8の RUV エントリーを返さなくなりました。
21.4. サプライヤーの cleanallruv タスクを停止する リンクのコピーリンクがクリップボードにコピーされました!
パフォーマンスまたはメンテナンスの目的で、タスクが長時間実行される場合は cleanallruv タスクを停止できます。dsconf ユーティリティーを使用してタスクを停止できます。
前提条件
- レプリケーションが有効である。
手順
サプライヤーのすべての
cleanallruvタスクを表示します。# dsconf <instance_name> repl-tasks list-cleanruv-tasks dn: cn=cleanallruv_2025-04-15T09:15:18.535868,cn=cleanallruv,cn=tasks,cn=config cn: cleanallruv_2025-04-15T09:15:18.535868 nsTaskCreated: 20250415131518Z ... nsTaskStatus: Not all replicas online, retrying in 20 seconds... nsTaskTotalItems: 1 nsTaskWarning: 0 objectClass: top objectClass: extensibleObject replica-base-dn: dc=example,dc=com replica-id: 2この例では、レプリカが応答しなくなったため、
cleanallruvタスクを完了できないことが示されています。場合によっては、サーバーのパフォーマンスに悪影響を与える可能性があります。cleanallruvタスクを停止します。# dsconf <instance_name> repl-tasks abort-cleanallruv --suffix "dc=example,dc=com" --replica-id 12さらに、
--certifyオプションを使用して、Directory Server にすべてのレプリカ上のcleanallruvタスクを強制的に停止させることもできます。
検証
サプライヤーのすべての
cleanallruvタスクを表示します。# dsconf <instance_name> repl-tasks list-cleanruv-tasks dn: cn=cleanallruv_2025-04-15T09:15:18.535868,cn=cleanallruv,cn=tasks,cn=config cn: cleanallruv_2025-04-15T09:15:18.535868 nsTaskCreated: 20250415131518Z ... nsTaskStatus: Task aborted for rid(2). nsTaskTotalItems: 1 nsTaskWarning: 0 objectClass: top objectClass: extensibleObject replica-base-dn: dc=example,dc=com replica-id: 2
第22章 SyncRepl プロトコルを使用した Content Synchronization のセットアップ リンクのコピーリンクがクリップボードにコピーされました!
RFC 4533 に従って SyncRepl プロトコルをサポートするために、Directory Server は Content Synchronization プラグインを使用します。Content Synchronization プラグインを使用すると、LDAP サーバーとクライアントは Red Hat Directory Server をソースとして使用して、ローカルデータベースをディレクトリーの変更されたコンテンツと同期できます。
SyncRepl protocol を使用するには、次の設定を実行する必要があります。
Directory Server 側:
-
Content Synchronization プラグインと Retro Changelog プラグインを設定します。Retro Changelog プラグインは、
nsuniqueid操作属性をログに記録する必要があります。 - オプション: クライアントが Directory Server にバインドするために使用する新しいユーザーを作成します。新しいユーザーには、ディレクトリー内のコンテンツを読み取るパーミッションが必要です。詳細は、コマンドラインを使用した LDAP エントリーの追加 を参照してください。
-
Content Synchronization プラグインと Retro Changelog プラグインを設定します。Retro Changelog プラグインは、
- クライアントを設定します。たとえば、同期するサブツリーの検索ベースを設定します。詳細は、クライアントのドキュメントを参照してください。
次の手順では、コマンドラインを使用して Content Synchronization プラグインと Retro Changelog プラグインを設定します。
前提条件
-
root権限がある。
手順
Retro Changelog が有効になっているかどうかを確認します。
# dsconf <instance_name> plugin retro-changelog show ... nsslapd-pluginEnabled: offRetro Changelog プラグインが無効になっている場合は、有効にします。
# dsconf <instance_name> plugin retro-changelog enable Enabled plugin 'Retro Changelog Plugin'Retro Changelog プラグインの設定に、
targetUniqueIdエイリアスを持つnsuniqueid操作属性を追加します。# dsconf <instance_name> plugin retro-changelog add --attribute nsuniqueid:targetUniqueId Successfully changed the cn=Retro Changelog Plugin,cn=plugins,cn=configオプション: パフォーマンスを向上させるには、次の推奨事項を適用します。
Retro Changelog エントリーの最大有効期間を設定します。たとえば、有効期間を
2日間 (2d) に設定します。# dsconf <instance_name> plugin retro-changelog set --max-age 2d Successfully changed the cn=Retro Changelog Plugin,cn=plugins,cn=configクライアントがデータを同期するためにアクセスするバックエンドまたはサブツリーがわかっている場合は、Retro Changelog プラグインの範囲を制限します。たとえば、
cn=marketing,dc=example,dc=comサブツリーを除外するには、次のように入力します。# dsconf <instance_name> plugin retro-changelog set --exclude-suffix "cn=marketing,dc=example,dc=com" Successfully changed the cn=Retro Changelog Plugin,cn=plugins,cn=config
Content Synchronization プラグインを有効にします。
# dsconf <instance_name> plugin contentsync enable Enabled plugin 'Content Synchronization'オプション: ACI を調整して、
SyncReplコントロールを使用できるユーザーを制限します。デフォルトでは、Directory Server はoid=1.3.6.1.4.1.4203.1.9.1.1,cn=features,cn=configエントリーに次のアクセス制御命令 (ACI) を作成し、すべてのユーザーがSyncReplプロトコルを使用できるようにします。aci: (targetattr != "aci")(version 3.0; acl "Sync Request Control"; allow( read, search ) userdn = "ldap:///all";)ACI を調整する方法の詳細は、ACI バインドルールの定義 を参照してください。
サービスを再起動します。
# dsctl <instance_name> restart
これで、クライアントは SyncRepl プロトコルを使用して Directory Server とデータを同期できるようになりました。