15.3. マルチサプライヤーのレプリケーション
マルチサプライヤーレプリケーションシナリオでは、ディレクトリーデータのサプライヤーコピーが複数の読み取り/書き込みレプリカに保存されます。これらのサーバーはそれぞれ、読み取り/書き込みレプリカの changelog を維持します。Directory Server は、レプリケーショントポロジーでサプライヤーを最大 20 台サポートします。
注記
マルチサプライヤーレプリケーション環境のそれぞれのサプライヤーは、自動的にコンシューマーです。
以下の図は、2 つのサプライヤーを持つマルチサプライヤーレプリケーション環境を示しています。
図15.2 2 つのサプライヤーを持つマルチサプライヤーレプリケーション
複雑な環境では、レプリケーショントポロジーには複数の読み取り/書き込みサプライヤーと読み取り専用コンシューマーが含まれることがよくあります。以下の図は、各サプライヤーが 2 つの他のサプライヤーと 8 つのコンシューマーにデータを複製するために 10 個のレプリカ合意で設定されたトポロジーを示しています。
図15.3 4 つのサプライヤーと 8 つのコンシューマーを持つ複雑なレプリケーションシナリオ
注記
レプリケーション速度は、以下に依存します。
- ネットワークの速度。
- 送信および受信のレプリカ合意の数。
コマンドラインまたは Web コンソールを使用して、マルチサプライヤーレプリケーショントポロジーを設定します。参照:
15.3.1. コマンドラインを使用したマルチサプライヤーレプリケーションの設定
以下の例では、既存の Directory Server インスタンスが
supplier1.example.com
という名前のホストで実行されていることを前提としています。以下の手順では、supplier2.example.com
という名前の別の読み取り/書き込みレプリカをトポロジーに追加する方法と、dc=example,dc=com
接尾辞のマルチサプライヤーレプリケーションを設定する方法を説明します。
参加する新しいサーバーの準備
supplier2.example.com
ホスト:
- Directory Server をインストールして、インスタンスを作成します。詳細は、『Red Hat Directory Server インストールガイド』 を参照してください。
- データベースなしでインスタンスを作成した場合には、接尾辞のデータベースを作成します。たとえば、dc=example,dc=com 接尾辞に
userRoot
という名前のデータベースを作成するには、以下のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com backend \ create --suffix="dc=example,dc=com" --be-name="userRoot"
接尾辞のデータベース作成に関する詳細は、「接尾辞の作成」を参照してください。 - 接尾辞のレプリケーションを有効にし、レプリケーションマネージャーアカウントを作成します。
# 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 の間の一意の整数である必要があります。
既存のサーバーをサプライヤーに設定
supplier1.example.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"
レプリカ ID は、「参加する新しいサーバーの準備」で作成されるものとは異なるものでなければなりませんが、レプリケーションマネージャーアカウントは同じ DN を使用できます。 - レプリカ合意を追加し、新しいサーバーを初期化します。以下に例を示します。
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt \ create --suffix="dc=example,dc=com" --host="supplier2.example.com" --port=636 \ --conn-protocol=LDAPS --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 はコンシューマーを初期化します。後ほどコンシューマーを初期化する場合は、--init
オプションを省略します。コンシューマーを初期化する前にレプリケーションが起動しないことに注意してください。コンシューマーの初期化の詳細は、「コンシューマーの初期化」を参照してください。コマンドで使用するオプションの詳細は、以下を入力します。# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt --help
- 初期化が成功したかどうかを確認します。
# 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.
複製するデータ量によっては、初期化に時間がかかる場合があります。
新しいサーバーをサプライヤーに設定
supplier2.example.com
ホスト:
警告
「既存のサーバーをサプライヤーに設定」 で説明されているように、既存のサーバーで接尾辞 dc=example,dc=com を初期化していない場合は、続行しないでください。それ以外の場合は、新規サーバーの空のデータベースは、既存のサプライヤーのデータベースを上書きします。
supplier 2
からsupplier 1
に情報を複製する複製合意を追加します。以下に例を示します。# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com repl-agmt \ create --suffix="dc=example,dc=com" --host="supplier1.example.com" --port=636 \ --conn-protocol=LDAPS --bind-dn="cn=replication manager,cn=config" \ --bind-passwd="password" --bind-method=SIMPLE \ example-agreement-supplier2-to-supplier1
このコマンドは、example-agreement-supplier2-to-supplier1
という名前のレプリカ合意を作成します。レプリカ合意は、コンシューマーへのデータの接続や複製時にサプライヤーが使用するコンシューマーのホスト名、プロトコル、認証情報などの設定を定義します。
15.3.2. Web コンソールを使用したマルチサプライヤーレプリケーションの設定
以下の例では、既存の Directory Server インスタンスが
supplier1.example.com
という名前のホストで実行されていることを前提としています。以下の手順では、supplier2.example.com
という名前の別の読み取り/書き込みレプリカをトポロジーに追加する方法と、dc=example,dc=com
接尾辞のマルチサプライヤーレプリケーションを設定する方法を説明します。
参加する新しいサーバーの準備
supplier2.example.com
ホスト:
- Directory Server をインストールして、インスタンスを作成します。詳細は、『Red Hat Directory Server インストールガイド』 を参照してください。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- データベースなしでインスタンスを作成した場合は、接尾辞からデータベースを作成します。接尾辞のデータベース作成に関する詳細は、「接尾辞の作成」を参照してください。
- 接尾辞のレプリケーションを有効にします。
- dc=example,dc=com 接尾辞を選択し、 をクリックします。
- Replication Role フィールドで Supplier を選択し、レプリカ ID を入力し、作成するレプリケーションマネージャーアカウントの DN およびパスワードを入力します。以下に例を示します。この設定により、
supplier2.example.com
ホストを dc=example,dc=com 接尾辞のサプライヤーとして設定し、このエントリーのレプリカ ID を 1 に設定します。さらに、サーバーは指定のパスワードでcn=replication manager,cn=config
ユーザーを作成し、このアカウントがこのホストに接尾辞の変更を複製することができます。重要トポロジー内のすべてのサプライヤーの接尾辞については、レプリカ ID は 1 から 65534 の間の一意の整数である必要があります。
既存のサーバーをサプライヤーに設定
supplier1.example.com
ホスト:
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- 参加する新規サーバーの設定と同様に、dc=example,dc=com 接尾辞のレプリケーションを有効にし、レプリケーションコントローラーアカウントを作成します。
- dc=example,dc=com 接尾辞を選択し、 をクリックします。
- Replication Role フィールドで Supplier を選択し、レプリカ ID を入力し、作成するレプリケーションマネージャーアカウントの DN およびパスワードを入力します。以下に例を示します。レプリカ ID は、「参加する新しいサーバーの準備」で作成されるものとは異なるものでなければなりませんが、レプリケーションマネージャーアカウントは同じ DN を使用できます。
- レプリカ合意を追加し、コンシューマーを初期化します。
- この設定により、
example-agreement-supplier1-to-supplier2
という名前のレプリカ合意が作成されます。レプリカ合意は、コンシューマーへのデータの接続や複製時にサプライヤーが使用するコンシューマーのホスト名、プロトコル、認証情報などの設定を定義します。 - Consumer Initialization フィールドで Do Online Initialization を選択し、合意の保存後にコンシューマーを自動的に初期化します。後でコンシューマーを初期化する場合は、Do Not Initialize を選択します。コンシューマーを初期化する前にレプリケーションが起動しないことに注意してください。コンシューマーの初期化の詳細は、「コンシューマーの初期化」を参照してください。
- 初期化が成功したかどうかを確認します。
- 初期化が正常に完了したら、Web コンソールの Last Update Status 列に Error (0) Replica acquired successfully: Incremental update succeeded メッセージが表示されます。複製するデータ量によっては、初期化に時間がかかる場合があります。
新しいサーバーをサプライヤーに設定
supplier2.example.com
ホスト:
警告
「既存のサーバーをサプライヤーに設定」 で説明されているように、既存のサーバーでレプリカ合意を初期化していない場合は、続行しないでください。それ以外の場合は、新規サーバーの空のデータベースは、既存のサプライヤーのデータベースを上書きします。
- レプリカ合意を追加し、コンシューマーを初期化します。
- この設定により、
example-agreement-supplier2-to-supplier1
という名前のレプリカ合意が作成されます。 - Consumer Initialization フィールドで Do Online Initialization を選択し、合意の保存後にコンシューマーを自動的に初期化します。後でコンシューマーを初期化する場合は、Do Not Initialize を選択します。コンシューマーを初期化する前にレプリケーションが起動しないことに注意してください。コンシューマーの初期化の詳細は、「コンシューマーの初期化」を参照してください。
- 初期化が成功したかどうかを確認します。
- 初期化が正常に完了すると、Web コンソールは Last Update Status 列に Error (0) Replica acquired successfully: Incremental update succeeded メッセージを表示します。複製するデータ量によっては、初期化に時間がかかる場合があります。
15.3.3. マルチサプライヤーレプリケーションにおけるコンシューマーの独占を防ぐ
マルチサプライヤーレプリケーションの機能の 1 つは、サプライヤーが複製されたエリアのコンシューマーへの排他的アクセスを取得することです。この間、他のサプライヤーは、コンシューマーによる直接通信がロックされます。ロックアウトされた状態でサプライヤーがアクセス権を取得しようとすると、コンシューマーはビジー応答を返し、サプライヤーは数秒間スリープしてから再度アクセスを試みます。更新負荷が低い間に、最初のコンシューマーがロックされたときにサプライヤーが別のコンシューマーに更新を送信し、最初のコンシューマーが再び解放されると更新を送信します。
ロックサプライヤーの更新負荷が高かったり、changelog に多くの保留中の更新があったりすると、問題が発生することがあります。ロックサプライヤーが更新の送信を終了し、送信する保留中の変更が複数ある場合は、直ちにコンシューマーの再取得を試みます。他のサプライヤーは通常スリープ状態であるため、ほとんどの場合、このような試みは成功します。これにより、単一のサプライヤーが数時間またはそれ以上にわたってコンシューマーを独占することになります。
以下の属性は、この問題に対応します。
nsds5ReplicaBusyWaitTime
- 別のアクセスの取得を試みる前に、コンシューマーがビジー応答を返した後、サプライヤーが待機する時間を秒単位で設定します。たとえば、別の取得を試みる前に、サプライヤーが 5 秒待機するように設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt \ set --suffix="suffix" --busy-wait-time=5 agreement_name
nsds5ReplicaSessionPauseTime
- 2 つの更新セッションの間にサプライヤーが待機する時間を秒単位で設定します。
nsds5ReplicaBusyWaitTime
で指定した値またはそれよりも小さい値を設定すると、Directory Server は、nsds5ReplicaBusyWaitTime
で設定した値よりも大きな値であるnsds5ReplicaSessionPauseTime
パラメーターの値を自動的に使用します。たとえば、サプライヤーは 2 つの更新セッション間で 10 秒待機するように設定するには、以下を実行します。# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt \ set --suffix="suffix" --session-pause-time=10 agreement_name
nsds5ReplicaReleaseTimeout
- 更新の送信を終了したかどうか、サプライヤーがレプリカのリリース後のタイムアウトを設定します。これにより、単一サプライヤーがレプリカを独占しなくなります。たとえば、サプライヤーが大きいレプリケーション環境で 90 秒後にレプリカを解放するように設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication \ set --suffix="suffix" --repl-release-timeout=90
詳細は、『Red Hat Directory Server 設定、コマンド、およびファイルリファレンス』 のパラメーターの説明を参照してください。