15.11. 一部レプリケーションによる属性の管理
「一部レプリケーションを使用した属性のサブセットの複製」で説明するように、一部レプリケーションでは、管理者がレプリケーションの更新から 除外 する属性を設定することができます。管理者は、さまざまなパフォーマンスの理由により、ネットワーク上で送信される大きな属性の数を制限したり、修正タスク (
memberOf
計算など) が実行される回数を減らすために実行できます。
レプリケーションから除外する属性のリストは、
nsDS5ReplicatedAttributeList
属性で定義されます。この属性はレプリカ合意の一部で、Web コンソールのレプリカ合意ウィザードで設定するか、レプリカ合意の作成時にコマンドラインから設定できます。
nsDS5ReplicatedAttributeList: (objectclass=*) $ EXCLUDE memberof authorityRevocationList accountUnlockTime
重要
Directory Server には、
nsDS5ReplicatedAttributeList
属性の値に (objectclass=*) $ EXCLUDE の部分が必要です。ldapmodify
ユーティリティーなどを使用して属性を直接編集する場合は、上記の例で示されている属性の一覧とともにこの部分を指定する必要があります。ただし、dsconf
および Web コンソールはどちらも (objectclass=*) $ EXCLUDE の部分を自動的に追加し、指定する必要があるのは属性のみです。
15.11.1. 合計更新および増分更新での異なる一部レプリケーション属性の設定
一部レプリケーションが最初に設定されている場合、除外された属性のリストは更新操作ごとに適用されます。つまり、属性のリストは、完全更新と通常の増分更新に対して除外されます。しかし、パフォーマンスを向上させるために増分更新から属性を除外しても、ディレクトリーデータセットを完全にするために全体更新に含めるべき場合があります。この場合は、全体更新 (
nsDS5ReplicatedAttributeListTotal
) から除外する属性の別のリストを定義する 2 番目の属性を追加できます。
注記
nsDS5ReplicatedAttributeList
プライマリーの一部レプリケーション属性です。nsDS5ReplicatedAttributeList
のみが設定されている場合、増分更新と合計更新の両方に適用されます。nsDS5ReplicatedAttributeList
と nsDS5ReplicatedAttributeListTotal
の両方が設定されている場合、nsDS5ReplicatedAttributeList
は増分更新にのみ適用されます。
たとえば、
memberOf
属性がエントリーに追加されるたびに、memberOf 修正タスクが実行してグループメンバーシップを解決します。これにより、レプリケーションが発生するたびにそのタスクが実行する場合に、サーバーでオーバーヘッドが発生する可能性があります。合計の更新は、レプリケーションに新たに追加されたり、長期間オフラインになったデータベースでのみ実行されるため、合計更新後の memberOf 修正タスクを実行すると、合計値が許容オプションになります。この場合、nsDS5ReplicatedAttributeList
属性には memberOf
というリストが記載されるため、増分更新から除外されるようにしますが、nsDS5ReplicatedAttributeListTotal
は memberOf
を一覧表示しないため、すべての更新に含まれるようにします。
増分更新の除外リストは、レプリカ合意の
nsDS5ReplicatedAttributeList
属性に設定されます。以下に例を示します。
nsds5replicatedattributelist: (objectclass=*) $ EXCLUDE authorityRevocationList accountUnlockTime memberof
nsDS5ReplicatedAttributeList
属性を設定するには、dsconf repl-agmt set コマンドを使用します。以下に例を示します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \ --suffix="suffix" --frac-list="authorityRevocationList accountUnlockTime memberof" \ agreement_name
nsDS5ReplicatedAttributeList
が唯一の属性セットである場合、そのリストは増分更新と合計更新の両方に適用されます。更新の合計に別のリストを設定するには、レプリカ合意に nsDS5ReplicatedAttributeListTotal
属性を追加します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \ --suffix="suffix" --frac-list-total="accountUnlockTime" \ agreement_name
注記
nsDS5ReplicatedAttributeList
属性は、すべての更新に対して nsDS5ReplicatedAttributeListTotal
を設定する前に増分更新のために設定される必要があります。
15.11.2. レプリケーションのキープアライブエントリー
サプライヤーの属性を更新すると、サプライヤーに対する changelog 変更シーケンス番号 (CSN) が増加されます。レプリケーショントポロジーでは、このサーバーは最初のコンシューマーに接続し、ローカル CSN をコンシューマーの CSN と比較できるようになりました。ローカル CSN の方が低い場合は、ローカルの changelog から更新内容を取得し、コンシューマーに複製します。一部レプリケーションを有効にしたレプリケーショントポロジーでは、これが問題になることがあります。たとえば、レプリケーションから除外された属性のみがサプライヤー上で更新された場合、複製するための更新が見つからないため、コンシューマー上で CSN が更新されません。特定のシナリオでは、レプリケーションから除外されたサプライヤーで属性のみが更新されると、サプライヤーの更新に不要な検索を行うと、他のサーバーが、必要に応じて後にデータを受け取る可能性があります。この問題を回避するために、Directory Server ではキープアライブエントリーを使用します。
サプライヤー上の更新された属性がすべてレプリケーションから除外され、スキップされた更新の数が 100 を超えると、サプライヤーで
keepalivetimestamp
属性が更新され、コンシューマーに複製されます。keepalivetimestamp
属性はレプリケーションから除外されないため、キープアライブエントリーの更新は複製され、コンシューマー上の CSN が更新され、サプライヤー上のものと等しくなります。次回サプライヤーをコンシューマーに接続する際には、コンシューマーの CSN より新しい更新のみが検索されます。これにより、サプライヤーが送信する新規更新の検索に費やされた時間が短縮されます。
Directory Server は、サプライヤー上でオンデマンドで、レプリケーションのキープアライブエントリーを自動的に作成します。識別名 (DN) にサプライヤーのレプリカ ID が含まれます。キープアライブエントリーはそれぞれ特定のサプライヤーに固有のものです。たとえば、非表示のキープアライブエントリーを表示するには、次のコマンドを実行します。
# ldapsearch -D "cn=Directory Manager" -b "dc=example,dc=com" -W -p 389 -h server.example.com -x 'objectClass=ldapsubentry' dn: cn=repl keep alive 1,dc=example,dc=com objectclass: top objectclass: ldapsubentry objectclass: extensibleObject cn: repl keep alive 1 keepalivetimestamp: 20181112150654Z
キープアライブエントリーは、以下の状況で更新されます (更新前に存在しない場合には最初に作成されます)。
- 一部レプリカ合意が 100 を超える更新を省略し、レプリケーションセッションの終了前に更新を送信しません。
- サプライヤーがコンシューマーを初期化すると、最初に独自のキープアライブエントリーを作成します。サプライヤーでもあるコンシューマーは、別のコンシューマーも初期化しない限り、独自のキープアライブエントリーを作成しません。
15.11.3. 一部レプリケーションによる空の更新の防止
一部レプリケーションでは、レプリケーション更新 (
nsDS5ReplicatedAttributeList
) から削除される属性の一覧が許可されます。しかし、除外された属性への変更があっても、修正イベントが発生し、空のレプリケーション更新が生成されます。
nsds5ReplicaStripAttrs
属性は、空のレプリケーションイベントでは送信できず、更新シーケンスから削除される属性の一覧を追加します。これには、modifiersName
のような運用上の利便性が含まれます。
たとえば、
accountUnlockTime
属性が除外されたとします。John Smith のユーザーアカウントがロックされ、期間が期限切れになり、自動的にロック解除されます。accountUnlockTime
属性のみが変更し、その属性はレプリケーションから除外されます。ただし、操作属性 internalmodifytimestamp
も 変更されています。John Smith のユーザーアカウントが変更しているため、レプリケーションイベントがトリガーされます。ただし、送信する唯一のデータは新しい変更タイムスタンプであり、更新は空になります。(たとえば) ログイン時間やパスワードの有効期限などに関連する多くの属性がある場合は、空のレプリケーション更新が作成され、サーバーのパフォーマンスに悪影響を与えるか、関連するアプリケーションを妨げる可能性があります。
これを防ぐには、一部レプリケーションの動作を調整するのに役立つように、
nsds5ReplicaStripAttrs
属性をレプリカ合意に追加します。
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \ --suffix="suffix" \ --strip-list="modifiersname modifytimestamp internalmodifiersname" \ agreement_name
レプリケーションイベントが 空でない 場合は、削除済みの属性 は 他の変更で複製されます。これらの属性は、イベントが空である場合にのみ更新から削除されます。