5.3. 一意の数値属性値の割り当ておよび管理
一部のエントリー属性値には、uidNumber や gidNumber などの一意の番号が必要です。Distributed Numeric Assignment (DNA) プラグインを使用すると、設定された番号の範囲から一意の番号を自動的に生成し、指定した属性に割り当てるように Directory Server を設定できます。
DNA プラグインは 属性の一意性 を保証するわけではありません。プラグインが管理する範囲から値を手動で割り当てた場合、プラグインでその値が一意であるかどうかはチェックされません。
DNA プラグインを使用すると、サプライヤー上の異なるローカル DNA プラグインインスタンスに、別の範囲を設定して、レプリケーションの競合を効果的に回避できます。たとえば、サプライヤー A は 1 から 1000 までの番号を、サプライヤー B は 1001 から 2000 までの番号を割り当て可能です。これにより、各サプライヤーが真に一意の番号セットを使用するようになります。
5.3.1. 動的番号の割り当ての概要 リンクのコピーリンクがクリップボードにコピーされました!
DNA プラグインは、インスタンスが発行できる使用可能な番号の範囲を割り当てます。範囲の定義は 2 つの属性で定義されます。サーバーで次に使用可能な番号 (範囲の下限値) と最大値 (範囲の上限値) です。プラグインを設定するときに、初期の下限値を設定します。追って、プラグインはこの下限値を更新します。
利用可能な数を各レプリカの複数の範囲に分割することで、サーバーは互いに重複することなく、継続的に番号を割り当てることができます。
5.3.1.1. フィルター、検索、およびターゲットエントリー リンクのコピーリンクがクリップボードにコピーされました!
サーバーは、内部的にソートされた検索を実行し、次に指定された範囲がすでに別のサーバーによって取得されているかどうかを確認します。管理属性には、適切な順序のマッチングルールで等価インデックスを割り当てる必要があります。
DNA プラグインは、常にディレクトリーツリーの特定領域 (スコープ) と、そのサブツリー内の特定のエントリータイプ (フィルター) に適用されます。
DNA プラグインは 単一 のデータベースでのみ動作し、複数のデータベースの番号割り当てを管理することはできません。DNA プラグインはソートコントロールを使用して、DNA プラグイン以外で手動で値が割り当てられているかどうかを確認します。ただし、ソートコントロールを使用したこの検証は、単一のデータベースでのみ機能します。
5.3.1.2. dnaMagicRegen を使用して一意の番号を割り当てる リンクのコピーリンクがクリップボードにコピーされました!
DNA プラグインが管理する属性のテンプレート値としてマジック値 (dnaMagicRegen) を使用します。このマジック値は、サーバー範囲外の数値または単語です。エントリーがマジック値とともに追加され、そのエントリーが DNA プラグインの設定されたスコープとフィルター内にある場合、マジック値によってプラグインが自動的にトリガーされ、新しい一意の値が生成されます。
たとえば、ldapmodify ユーティリティーを使用して、マジック値としてゼロ (0) を追加できます。
# ldapmodify -D "cn=Directory Manager" -W -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: posixAccount
uid: jsmith
cn: John Smith
uidNumber: 0
gidNumber: 0
設定された dnaMagicRegen により、DNA プラグインはエントリーが追加されたときに、マジック値と等しい値を持つ属性に対してのみ一意の値を生成します。DNA プラグインにマジック値を設定しない場合、プラグインによって管理対象属性のすべての値が上書きされます。
- 注記
- DNA プラグインが 1 つの属性のみを管理し、追加されたエントリーに管理対象属性が含まれていない場合、追加操作がトリガーとなって DNA プラグインがこの属性を追加し、その一意の値を生成します。
5.3.1.3. 同じ範囲の複数の属性 リンクのコピーリンクがクリップボードにコピーされました!
DNA プラグインは、一意の番号の単一範囲から、1 つまたは複数の属性タイプに一意の番号を割り当てることができます。
これにより、属性に一意の番号を割り当てる方法が複数提供されます。
- 単一の属性タイプに、一意の範囲から単一の番号を割り当てる。
- 1 つのエントリー内の 2 つの属性に、同じ一意の番号を割り当てる。
- 2 つの異なる属性は、同じ範囲の一意の数字から 2 つの異なる数字を割り当てていました。
多くの場合は、属性タイプごとに一意の番号を割り当てるだけで十分です。たとえば、新しい従業員エントリーに employeeID を割り当てる場合、各従業員エントリーが一意の employeeID を確実に割り当てるようにすることが重要です。
ただし、同じ範囲の番号から一意の番号を複数の属性に割り当てることができます。たとえば、uidNumber と gidNumber を posixAccount エントリーに割り当てる場合、DNA プラグインは両方の属性に同じ番号を割り当てることができます。これを行うには、両方の管理属性を変更操作に渡し、ldapmodify ユーティリティーを使用してマジック値 (0) を指定します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
uidNumber: 0
-
add:gidNumber
gidNumber: 0
オブジェクトクラスで 1 つの属性しか許可されない場合、DNA プラグインは、複数の属性を処理する際に、一意の値を 1 つの属性にのみ割り当てることができます。たとえば、posixGroup オブジェクトクラスでは gidNumber は許可されますが、uidNumber は許可されません。DNA プラグインが uidNumber と gidNumber の両方を管理する場合、posixGroup エントリーを作成するときに、uidNumber と gidNumber の属性範囲から gidNumber に一意の番号を割り当てます。すべての管理属性のプールを共有すると、一意の番号の一貫した割り当てが確保され、異なるエントリーの uidNumber と gidNumber が別々の範囲の同じ番号になるという競合を防止します。
DNA プラグインが複数の属性を管理する場合、1 回の変更操作ですべての属性に同じ値が割り当てられます。ただし、エントリーが範囲に対して定義されている各タイプの属性を許可していない場合、またはエントリーが定義されているすべての属性タイプを許可しているが、属性のサブセットのみが一意の値を必要とする場合は、個別の変更操作を実行して、同じ範囲から 異なる 番号を割り当てる必要があります。以下に例を示します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
idNumber: 0
^D
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: employeeId
employeeId: magic
例5.2 例: DNA および一意の銀行口座番号
銀行の例では、顧客の primaryAccount 属性と customerID 属性に同じ一意の番号を使用します。銀行の例の管理者は、DNA プラグインが同じ範囲から両方の属性に一意の値を割り当てるよう設定していました。
銀行では、顧客 ID とプライマリーの口座番号と同じ範囲のセカンダリー口座に番号を割り当てますが、これらの数字をプライマリーの口座番号と同じにすることはできません。銀行の例の管理者は、DNA プラグインを設定して secondaryAccount 属性も管理するようにしますが、エントリーが作成され、primaryAccount 属性と customerID 属性が割り当てられた後にのみ、エントリーに secondaryAccount 属性を追加します。これにより、primaryAccount と customerID が同じ一意の番号を共有し、secondaryAccount 番号は完全に一意でありながら同じ番号範囲からのものになります。
5.3.2. DNA プラグインの構文 リンクのコピーリンクがクリップボードにコピーされました!
Distributed Numeric Assignment (DNA) プラグイン自体は、識別名 (DN) cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config が指定されたコンテナーエントリーです。DNA プラグインエントリーの各 DNA エントリーは、DNA プラグインの新しい管理範囲を定義します。したがって、DNA プラグインの新しい管理範囲を設定するには、コンテナーエントリーの下にエントリーを作成します。たとえば、プラグインでエントリー内の uidNumber 属性を管理する場合は、範囲やその他のプラグイン設定を定義する cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config 設定エントリーを作成します。
プラグインの構文は、プラグインを単一のサーバーで使用するように設定するか、レプリケーショントポロジー内の複数のサーバーで使用するように設定するかによって異なります。
単一サーバー用の DNA プラグイン構文
プラグインを単一のサーバーで使用する場合、基本的な DNA 設定エントリーによって次の属性が定義されます。
- dnaType
- プラグインが管理する値を定義します。
- dnaScope
- プラグインがエントリーを検索するためのベースとして使用するエントリー (DN) を定義します。
- dnaFilter
- プラグインが管理するエントリーを識別するために使用する検索フィルターを定義します。
- dnaNextValue
- エントリーが作成された後、プラグインが次に使用可能な値を割り当てるように定義します。
以下は、単一の属性タイプに対する単一のサーバー上の DNA 設定エントリーの例です。
dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
objectClass: top
objectClass: dnaPluginConfig
cn: Account UIDs
dnatype: uidNumber
dnafilter: (objectclass=posixAccount)
dnascope: ou=people,dc=example,dc=com
dnaNextValue: 1
レプリケーショントポロジーのサーバーの DNA プラグイン構文
複数のサプライヤーに分散された数値割り当てを設定するには、範囲を共有および転送するための次の情報も設定エントリーに含める必要があります。
- dnaMaxValue: 1000
- サーバーが割り当てることができる最大数を定義します。
- dnaThreshold
-
範囲転送ができる程度に範囲が狭いしきい値を定義します。
dnaThresholdが設定されていない場合、デフォルト値は1です。 - dnaRangeRequestTimeout
-
範囲転送を要求するときに、サーバーが別のサーバーからの応答を待機するタイムアウトの期間を定義します。サーバーがこの期間内に範囲を受信しない場合、範囲転送要求は別のサーバーに送信されます。デフォルトでは、値は
10秒に設定されています。 - dnaSharedCfgDN
- すべてのサプライヤーサーバー間で共有され、各サプライヤーの範囲情報を格納する設定エントリー DN を定義します。
- dnaNextRange
-
サーバーが manages 属性に割り当てる特定の数値範囲を定義します。
dnaNextRange値は、転送に使用可能な次の範囲を示し、範囲がサーバーによって割り当てられるか使用されると、プラグインにより自動的に管理されます。この範囲はまだ別のサーバーに割り当てられておらず、ローカル Directory Server で引き続き使用できます。
以下は、レプリケーショントポロジーのサプライヤー上の DNA 設定エントリーの例です。
dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
objectClass: top
objectClass: dnaPluginConfig
cn: Account UIDs
dnatype: uidNumber
dnafilter: (objectclass=posixAccount)
dnascope: ou=people,dc=example,dc=com
dnanextvalue: 1
dnaMaxValue: 1300
dnasharedcfgdn: cn=Account UIDs,ou=ranges,dc=example,dc=com
dnathreshold: 100
dnaRangeRequestTimeout: 60
dnaNextRange: 1301-2301
DNA 設定エントリーで使用できる属性の完全なリストは、Distributed Numeric Assignment プラグイン属性 を参照してください。
dnaNextRange 属性値が設定されていない場合、Directory Server は dnaMaxValue 値を次の範囲の上限として使用し、範囲を自動的に割り当てます。Directory Server が他のサーバーに個別の特定の範囲を割り当てるようにする場合は、dnaNextRange 属性を明示的に設定する必要があります。
各サプライヤーは、範囲と接続設定に関する情報を含む個別の設定エントリーで現在の範囲を追跡します。このエントリーは、dnaSharedCfgDN 内の場所の子です。Directory Server は設定エントリーを他のすべてのサプライヤーに複製するため、各サプライヤーはその設定をチェックして、新しい範囲に接続するサーバーを見つけることができます。以下に例を示します。
dn: dnaHostname=ldap1.example.com+dnaPortNum=389,cn=Account UIDs,ou=Ranges,dc=example,dc=com
objectClass: dnaSharedConfig
objectClass: top
dnahostname: ldap1.example.com
dnaPortNum: 389
dnaSecurePortNum: 636
dnaRemainingValues: 1000
5.3.3. コマンドラインを使用したサプライヤーに DNA プラグイン設定エントリーの作成 リンクのコピーリンクがクリップボードにコピーされました!
サプライヤーが管理対象属性に一意の番号を割り当てるようにする場合は、適用する設定ごとに DNA プラグイン設定エントリーを作成します。DNA プラグイン設定エントリーは、cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config プラグインコンテナーエントリーの配下にあるサブエントリーです。
複数のサプライヤーが存在する環境では、各サプライヤーが独自の値の範囲を管理します。範囲はサプライヤー間で複製され、各サプライヤーはどのサプライヤーがどの範囲を管理しているかを認識しています。その後、サプライヤーは、最初のサプライヤーの範囲値が不足している場合に、この情報を使用して別のサプライヤーに範囲転送を要求します。
次の例では、dsconf ユーティリティーを使用して、サプライヤーに新しい DNA プラグイン設定エントリーを作成します。
前提条件
-
root権限がある。
手順
サプライヤーに DNA 設定エントリーを作成します。
# dsconf <instance_name> plugin dna config "Account UIDs" add --type uidNumber --filter "(objectclass=posixAccount)" --scope ou=People,dc=example,dc=com --next-value 1 --max-value 1300 --shared-config-entry "cn=Account UIDs,ou=Ranges,dc=example,dc=com" --threshold 100 --range-request-timeout 60 --magic-regen 99999 Successfully created the cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=configこのコマンドは、
ou=People,dc=example,dc=com下の新しく作成されたすべてのposixAccountエントリーで、99999のマジック値ではなく、uidNumber属性に一意の値を設定する DNA プラグイン設定を作成します。サプライヤーは1300までの値を設定し、値が1200に達すると 2 番目のサプライヤーに範囲転送を要求します。2 番目のサプライヤーが 60 秒間応答しない場合、最初のサプライヤーは 3 番目のサプライヤーに範囲転送を要求します。- 注記
レプリケーションのないサーバーまたは 1 つのサプライヤー環境のサプライヤーに対して設定エントリーを作成する場合は、
--type、--filter、--scope、--next-valueオプションのみを設定します。DNA プラグインの設定属性の詳細は、Distributed Numeric Assignment プラグインの属性 および DNA プラグインの構文 を参照してください。
オプション: すべてのサプライヤーサーバー間で共有される設定エントリーを作成します。
# ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x dn: ou=Ranges,dc=example,dc=com changetype: add objectclass: top objectclass: extensibleObject objectclass: organizationalUnit ou: Ranges - dn: cn=Account UIDs,ou=Ranges,dc=example,dc=com changetype: add objectclass: top objectclass: extensibleObject cn: Account UIDsDNA プラグインを有効にします。
# dsconf <instance_name> plugin dna enable Enabled plugin 'Distributed Numeric Assignment Plugin'
検証
設定エントリーの詳細を表示します。
# dsconf <instance_name> plugin dna config "Account UIDs" show dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config cn: Account UIDs dnaFilter: "(objectclass=posixAccount)" dnaInterval: 1 dnaMagicRegen: 99999 dnaMaxValue: 1300 dnaNextValue: 1 dnaRangeRequestTimeout: 60 dnaScope: ou=People,dc=example,dc=com dnaSharedCfgDN: cn=Account UIDs,ou=Ranges,dc=example,dc=com dnaThreshold: 100 dnaType: uidNumber objectClass: top objectClass: dnaPluginConfig
5.3.4. Web コンソールを使用したサプライヤーでの DNA プラグイン設定エントリーの作成 リンクのコピーリンクがクリップボードにコピーされました!
Directory Server が管理対象属性に一意の番号を割り当てるようにする場合は、適用する設定ごとに DNA プラグイン設定エントリーを作成します。Directory Server は、このようなプラグイン設定エントリーを cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config プラグインコンテナーエントリーに保存します。
複数のサプライヤーが存在する環境では、各サプライヤーが独自の値の範囲を管理します。範囲はサプライヤー間で複製され、各サプライヤーはどのサプライヤーがどの範囲を管理しているかを認識しています。その後、サプライヤーは、最初のサプライヤーの範囲値が不足している場合に、この情報を使用して別のサプライヤーに範囲転送を要求します。
前提条件
- Web コンソールにログインしている。詳細は、Web コンソールを使用した Directory Server へのログイン を参照してください。
手順
- Directory Server インスタンスを選択します。
- Plugins メニューを開き、リストから DNA プラグインを選択します。
- 新しいプラグイン設定エントリーの設定を開始するには、 ボタンをクリックします。
DNA Configuration タブでフィールドを設定します。
たとえば、プラグインによって、
ou=People,dc=example,dc=comの下に新しく作成されたすべてのposixAccountエントリーのuidNumber属性に、マジック値99999ではなく一意の値を設定するとします。さらに、サプライヤーに1300までの値を設定させ、一意の値が1200に達したときに 2 番目のサプライヤーに範囲転送を要求するようにします。この場合、次のフィールドを設定します。-
Config Name は
Account UIDs -
DNA Managed Attributes は
uidNumber -
Filter は
"(objectclass=posixAccount)" -
Subtree Scope は
ou=People,dc=example,dc=com -
Next Value は
1 -
Max Value は
1300 -
Magic Regeneration Value は
99999 -
Threshold は
100 Range Request Timeout は
60- 注記
- レプリケーションのないサーバーまたは単一サプライヤー環境のサプライヤーに対して設定エントリーを作成する場合は、DNA Managed Attributes、Filter、Subtree Scope および Next Value フィールドのみを設定します。
-
Config Name は
-
Shared Config Settings タブに移動し、Shared Config Entry DN フィールドを
cn=Account UIDs,ou=Ranges,dc=example,dc=comに設定します。この共有設定エントリーには、現在のサーバーに一意の値がない場合に範囲転送のために接続するサーバーに関する情報が含まれています。 - Save Config ボタンをクリックしてプラグイン設定を保存します。
- プラグインを有効にするには、スイッチを Plugin is enabled の位置に切り替えます。