第6章 レプリケーションプロセスの設計
ディレクトリー情報をレプリケートすると、ディレクトリーの可用性とパフォーマンスが向上します。必要なときに必要な場所でデータが利用できるようにレプリケーションプロセスを設計します。
6.1. レプリケーションの概要 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションは、ディレクトリーデータを Directory Server から別の Directory Server に自動的にコピーするメカニズムです。レプリケーションを使用すると、独自のデータベース (レプリカ) に保存されている任意のディレクトリーツリーまたはサブツリーをサーバー間でコピーできます。情報のメインコピーを保持しているサーバーは、更新内容をすべてのレプリカに自動的にコピーします。
レプリケーションは高可用性ディレクトリーサービスを提供し、データを地理的に分散できます。以下は、レプリケーションの利点のリストです。
フォールトトレランスとフェイルオーバー
ディレクトリーツリーを複数のサーバーにレプリケートすると、ハードウェア、ソフトウェア、またはネットワークの問題により、クライアントアプリケーションが特定の Directory Server にアクセスできない場合でも、ディレクトリーを利用できます。クライアントは、読み取りと書き込み操作のために、別の Directory Server を参照します。
注記追加、変更、削除 操作のフェイルオーバーは、マルチサプライヤーレプリケーション でのみ可能です。
負荷分散
ディレクトリーツリーをサーバー全体でレプリケートすると、特定のサーバーへのアクセス負荷が軽減され、サーバーの応答時間が改善されます。
より高いパフォーマンス
ディレクトリーエントリーをユーザーに近いロケーションにレプリケートすると、Directory Server のパフォーマンスが向上します。
ローカルデータ管理
レプリケーションを使用すると、企業全体の他の Directory Server と情報を共有しながら、情報をローカルで所有および管理できます。
6.1.1. レプリケーションの概念 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションの実装を検討するときは、次の基本的な質問に答えてください。
- レプリケートする必要がある情報は何ですか?
- その情報のメインコピー、またはサプライヤーレプリカはどのサーバーに保存されていますか?
- その情報の読み取り専用コピー、つまりコンシューマーレプリカはどのサーバーに保存されていますか?
- コンシューマーレプリカがクライアントアプリケーションから 変更 要求を受信すると何が起こりますか?どのサーバーに要求をリダイレクトする必要がありますか?
Directory Server がレプリケーションを実装する方法を理解するための概念を説明します。
6.1.1.1. レプリカ リンクのコピーリンクがクリップボードにコピーされました!
レプリカ はレプリケーションに参加するデータベースです。Directory Server は、以下のタイプのレプリカをサポートしています。
- サプライヤーレプリカ (読み取り/書き込み)
- ディレクトリーデータのメインコピーを含む読み取り/書き込みデータベース。ディレクトリークライアントからの 変更 要求を処理するのは、サプライヤーレプリカのみです。
- コンシューマーレプリカ (読み取り専用)
- サプライヤーレプリカに保持されている情報の別のコピーを含む読み取り専用データベース。コンシューマーレプリカはディレクトリークライアントからの 検索 要求を処理できますが、変更 要求はサプライヤーレプリカを参照します。
Directory Server は、レプリケーションにおいて異なるロールを持つ複数のデータベースを管理できます。たとえば、サプライヤーレプリカに dc=accounting,dc=example,dc=com
接尾辞を保存し、コンシューマーレプリカに dc=sales,dc=example,dc=com
接尾辞を保存することができます。
6.1.1.2. レプリケーションユニット リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションの最小単位は接尾辞 (namespace) です。レプリケーションメカニズムでは、1 つの接尾辞が 1 つのデータベースに対応している必要があります。Directory Server は、カスタム分散ロジックを使用して 2 つ以上のデータベースに分散された接尾辞をレプリケートできません。
6.1.1.3. サプライヤーとコンシューマー リンクのコピーリンクがクリップボードにコピーされました!
- サプライヤーサーバー
- サプライヤーサーバーは、更新を他のサーバーにレプリケートするサーバーです。サプライヤーサーバーは、各更新操作の記録を含む changelog を保持します。
- コンシューマーサーバー
- コンシューマーサーバーは、他のサーバーから更新を受信するサーバーです。
次の状況では、サーバーはサプライヤーとコンシューマーのロールを同時に果たすことができます。
- カスケードレプリケーションで、一部のサーバーが ハブサーバー のロールを果たす場合。詳細は、カスケードレプリケーション を参照してください。
- マルチサプライヤーレプリケーションで、複数のサーバーがサプライヤーの読み取り/書き込みレプリカを管理する場合。各サーバーは他のサーバーから更新を送受信します。詳細は、マルチサプライヤーレプリケーション を参照してください。
Red Hat Directory Server では、コンシューマーではなく、サプライヤーサーバーが常にレプリケーションを開始します。
サプライヤーサーバーは次のアクションを実行する必要があります。
- ディレクトリークライアントからの 読み取り 要求や 更新 要求に対応します。
- レプリカの状態情報と changelog を維持します。サプライヤーサーバーは、管理する読み取り/書き込みレプリカに加えられた変更を常に記録する必要があります。これにより、すべての変更がコンシューマーサーバーにレプリケートされるようになります。
- コンシューマーサーバーへのレプリケーションを開始します。
コンシューマーサーバーは次のアクションを実行する必要があります。
- 読み取り 要求に対応します。
- レプリカのサプライヤーサーバーへの 更新 要求を参照します。コンシューマーサーバーがエントリーの追加、削除、または変更の要求を受信すると、その要求はサプライヤーサーバーに転送されます。サプライヤーサーバーは要求を実行し、これらの変更をレプリケートします。
カスケードレプリケーションの特殊なケースでは、ハブサーバーは次のアクションを実行します。
- 読み取り 要求に対応します。
- 更新 要求をサプライヤーサーバーに参照します。
- コンシューマーサーバーへのレプリケーションを開始します。
6.1.1.4. Changelog リンクのコピーリンクがクリップボードにコピーされました!
すべてのサプライヤーサーバーは changelog を維持します。changelog は、サプライヤーレプリカで発生した変更の記録です。サプライヤーサーバーは、これらの変更を他のサーバーに保存されているレプリカにプッシュします。
エントリーが追加、変更、または削除されると、Directory Server は実行された LDAP 操作を changelog ファイルに記録します。
changelog はサーバーの内部使用のみを目的としています。changelog を読み取る必要があるアプリケーションがある場合は、下位互換性のために Retro Changelog プラグインを使用する必要があります。
changelog 属性の詳細は、cn=changelog,cn=database_name,cn=ldbm database,cn=plugins,cn=config の下のデータベース属性 を参照してください。
6.1.1.5. レプリカ合意 リンクのコピーリンクがクリップボードにコピーされました!
サーバーはレプリカ合意を使用して、2 つのサーバー間でレプリケーションを実行する方法を定義します。レプリカ合意は、1 つ のサプライヤーと 1 つ のコンシューマーとの間のレプリケーションを説明します。合意はサプライヤーサーバー上で設定され、次の情報を識別します。
- レプリケートするデータベース。
- データがプッシュされるコンシューマーサーバー。
- レプリケーションを実行できる時間。
- サプライヤーサーバーが、コンシューマーでバインドを実行するために使用する必要がある DN と認証情報 (レプリケーションマネージャー エントリーまたは サプライヤーバインド DN と呼ばれる)。
- 接続の保護方法 (TLS、StartTLS、クライアント認証、SASL、簡易認証など)。
- レプリケートする属性。部分レプリケーションの詳細は、部分レプリケーション を参照してください。
6.1.2. データの整合性 リンクのコピーリンクがクリップボードにコピーされました!
データの一貫性とは、レプリケートされたデータベースの内容が特定の時点で互いにどれだけ一致しているかを指します。サプライヤーは、コンシューマーをいつ更新する必要があるかを決定し、レプリケーションを開始します。レプリケーションは、コンシューマーが初期化された後にのみ開始できます。
Directory Server は、レプリカを常に同期させたり、特定の時間や曜日に更新をスケジュールしたりできます。
常に同期されたレプリカ
常に同期されたレプリカはデータの一貫性を向上させますが、頻繁な更新によりネットワークトラフィックが増加します。
次の場合には、常に同期されたレプリカを使用します。
- サーバー間に、信頼できる高速接続がある場合。
- クライアントアプリケーションは主に 検索、読み取り、比較 を Directory Server に送信し、更新 操作はごくわずかしか送信しません。
コンシューマーの更新をスケジュールする場合。
ディレクトリーのデータ一貫性のレベルを低くすることができ、ネットワークトラフィックへの影響を軽減したい場合は、更新をスケジュールすることを選択します。
次の場合にスケジュールされた更新を使用します。
- ネットワーク接続が信頼できないか、定期的にしか利用できない場合。
- クライアントアプリケーションが主に、追加 操作と 変更 操作を Directory Server に送信する場合。
- 接続コストを削減する必要がある場合。
マルチサプライヤーレプリケーションにおけるデータの一貫性
マルチサプライヤーレプリケーションがある場合、レプリカが常に同期されている場合でも、サプライヤーの保存データには常に違いがある可能性があるため、各サプライヤーのレプリカの一貫性は低くなります。
一貫性が低くなる主な理由は次のとおりです。
- サプライヤー間の 変更 操作の伝播に遅延が発生する。
- 変更 操作を処理したサプライヤーは、2 番目のサプライヤーがそれを検証するまで待たずに、クライアントに "operation successful" というメッセージを返します。