Sun Java System Directory Server Enterprise Edition 6.3 管理ガイド

第 22 章 Directory Proxy Server によるデータ配布

Directory Proxy Server では、データビューの定義によってデータ配布を行うことができます。データビューは、そのデータビュー内のエントリのベース DN を決定するビューベースを使って定義されます。Directory Proxy Server に用意されている配布アルゴリズムに基づいて、エントリをさまざまなデータビュー間で分割する方法を指定できます。

Directory Proxy Server によるデータ配布の概要とユースケースの例の説明については、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』の第 17 章「Directory Proxy Server Distribution」を参照してください。

この章の内容は次のとおりです。

Directory Proxy Server の配布アルゴリズムの設定

Directory Proxy Server には、次の配布アルゴリズムが用意されています。

パターンマッチング配布アルゴリズムの設定

Directory Proxy Server では、要求のパラメータと 1 つ以上のパターンの間の一致に基づいて、要求をデータビューに配布します。次のパラメータを設定して、パターンマッチング配布アルゴリズムの設定を行います。

filter で終わる設定属性は LDAP フィルタであり、正規表現ではありません。これらの LDAP フィルタは、受信検索要求に含まれる LDAP フィルタに対して評価されます。

たとえば、偶数の uid を持つユーザーの要求を even データビューに、奇数の uid を持つユーザーの要求を odd データビューに送信するようにパターンマッチング配布アルゴリズムを設定するときは、次の設定を使用します。


$ dpconf set-ldap-data-view-prop even
pattern-matching-base-object-search-filter:'|(uid=\2a)(uid=*0)(uid=*2)\
(uid=*4)(uid=*6)(uid=*8))'\
pattern-matching-one-level-search-filter:'|(uid=\2a)(uid=*0)(uid=*2)\
(uid=*4)(uid=*6)(uid=*8))'\
pattern-matching-subtree-search-filter:'|(uid=\2a)(uid=*0)(uid=*2)\
(uid=*4)(uid=*6)(uid=*8))'\
pattern-matching-dn-regular-expression:'uid=[0-9]+[02468]'
distribution-algorithm: pattern-matching 

$ dpconf set-ldap-data-view-prop odd
pattern-matching-base-object-search-filter:'|(uid=\2a)(uid=*1)(uid=*3)\
(uid=*5)(uid=*7)(uid=*9))'\
pattern-matching-one-level-search-filter:'|(uid=\2a)(uid=*1)(uid=*3)\
(uid=*5)(uid=*7)(uid=*9))'\
pattern-matching-subtree-search-filter:'|(uid=\2a)(uid=*1)(uid=*3)\
(uid=*5)(uid=*7)(uid=*9))'\
pattern-matching-dn-regular-expression:'uid=[0-9]+[13579]'
distribution-algorithm: pattern-matching 

(uid=\2a) の式で、\2a* の ASCII 表現であり、2 および a は 2 つの 16 進数字です。(uid=\2a) の式により、データビューがすべての uid の要求を確実に受け入れるようになります。

パターンマッチングアルゴリズムでサポートされる構文は、Java パターンクラス (http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html で説明されています) によって指定されます。この構文は、通常の regex 構文と同じではありません。

数値配布アルゴリズムの設定

Directory Proxy Server では、要求内の RDN の数値に応じて、要求をデータビューに配布します。この数値は、データビューのベース DN の下にある最初の RDN の値から取られます。次のパラメータを設定して、数値の範囲を定義します。

たとえば、0 から 99 の間の uid の要求を特定のデータビューに送信する数値配布アルゴリズムを設定できます。残りのユーザーでも同じ構文を使用しますが、データビューは異なります。


$ dpconf set-ldap-data-view-prop dataview distribution-algorithm:numeric \
 numeric-attrs:uid numeric-lower-bound:0 numeric-upper-bound:99

辞書式配布アルゴリズムの設定

Directory Proxy Server では、要求内の RDN の辞書式の値に応じて、要求をデータビューに配布します。辞書式の範囲は、データビューのベース DN の下にある最初の RDN の値から取られます。次のパラメータを設定して、辞書式の範囲を定義します。

たとえば、名前が A から M の間で始まるユーザーの要求をあるデータビューに送信し、残りのユーザの要求を別のデータビューに送信する辞書式配布アルゴリズムを設定できます。


$ dpconf set-ldap-data-view-prop dataview distribution-algorithm:lexicographic \
 lexicographic-attrs:cn lexicographic-lower-bound:A lexicographic-upper-bound:M

レプリケーション配布アルゴリズムの設定

Directory Proxy Server では、レプリケーションにおけるデータビューのロールに応じて、要求をデータビューに配布します。このアルゴリズムでは、書き込み操作はデータソースプール内のすべてのデータソースに配布され、読み取り操作は 1 つのデータソースに配布されます。レプリケーションロールは、replication-role パラメータによって定義されます。データビューには、マスターロールまたはコンシューマロールを設定できます。


$ dpconf set-ldap-data-view-prop dataview distribution-algorithm:replication

カスタム配布アルゴリズムの設定

全種類のデータビュー (ldap-data-viewjdbc-data-viewldif-data-view、および join-data-view) でカスタム配布アルゴリズムを設定できます。次の手順では、このアルゴリズムを ldap-data-view だけで設定します。

Procedureカスタム配布アルゴリズムを設定する

  1. 配布アルゴリズムクラスが格納された Java Archive (JAR) ファイルのパスが含まれるように extension-jar-file-url プロパティーを設定します。


    $ dpconf set-server-prop -h host -p port extension-jar-file-url:jar file path
    

    jar file path を、file:/expt/dps/custom_plugin/myjar.jar のような有効な JAR ファイルパスに置き換えることができます。

  2. custom-distribution-algorithm を設定する前に、distribution-algorithmnone に設定します。


    $ dpconf set-ldap-data-view-prop view name distribution-algorithm:none
  3. custom-distribution-algorithm プロパティーをカスタム配布アルゴリズムクラスに設定します。


    $ dpconf set-ldap-data-view-prop view name custom-distribution-algorithm:PackageName.AlgoClassName
    

サフィックスデータを配布するための Directory Proxy Server の設定

単純なデータ配布の例として、A から M までの文字で始まる UID を持つエントリを 1 つのディレクトリセットに格納し、N から Z までの文字で始まる UID を持つエントリをもう 1 つのディレクトリセットに格納します。Directory Proxy Server は、すべてのクライアント操作を受け取ります。Directory Proxy Server は、A から M を処理するディレクトリセットと N から Z を処理するディレクトリセットを判別する必要があります。

    Directory Proxy Server でこのデータ配布を処理するための設定の主要な手順は次のとおりです。

  1. Directory Proxy Server 用のデータソースとしてディレクトリを追加します。

  2. それらのデータソースを、各データ配布を処理するデータソースプールに追加します。

  3. クライアント要求を適切なデータプールに配布するためのデータビューを作成します。

  4. 適切なデータソースに読み込まれるように LDIF を分割します。

  5. 分割した LDIF を適切なデータソースにインポートします。

  6. 適切なデータプールに接続されたデータソースごとに、操作ベースのウェイトを調整します。

次の例では、Directory Proxy Server はポート 9389 で待機しています。単純にするため、この例では、記述されているように 3 つの Directory Server インスタンスのみに配布するようにプロキシが設定されています。可用性と読み取りのスケーラビリティーを確保するため、レプリケートされたディレクトリトポロジを使用して LDAP データを格納します。一方の Directory Server インスタンス (dsA-M:1389) は、A から M までの文字で始まる UID を持つユーザーエントリを処理します。もう一方の Directory Server インスタンス (dsN-Z:2389) は、N から Z までの文字で始まる UID を持つユーザーエントリを処理します。最後のディレクトリインスタンス (dsBase:3389) は、サフィックスのベースエントリを処理します。

最初の手順では、データソースを作成して有効にします。ベースデータソースは、UID を持たない、サフィックスのルートに近いエントリを保持します。一般的な配備では、これらのエントリは、配布されるエントリよりもずっと少数です。


$ dpconf create-ldap-data-source -p 9389 dsA-M localhost:1389
$ dpconf set-ldap-data-source-prop -p 9389 dsA-M is-enabled:true

$ dpconf create-ldap-data-source -p 9389 dsN-Z localhost:2389
$ dpconf set-ldap-data-source-prop -p 9389 dsN-Z is-enabled:true

$ dpconf create-ldap-data-source -p 9389 dsBase localhost:3389
$ dpconf set-ldap-data-source-prop -p 9389 dsBase is-enabled:true

2 番目の手順では、データソースをデータソースプールに追加します。


$ dpconf create-ldap-data-source-pool -p 9389 "Base Pool"
$ dpconf attach-ldap-data-source -p 9389 "Base Pool" dsBase

$ dpconf create-ldap-data-source-pool -p 9389 "A-M Pool"
$ dpconf attach-ldap-data-source -p 9389 "A-M Pool" dsA-M

$ dpconf create-ldap-data-source-pool -p 9389 "N-Z Pool"
$ dpconf attach-ldap-data-source -p 9389 "N-Z Pool" dsN-Z

3 番目の手順では、クライアント要求を適切なデータプールに配布するためのデータビューを作成します。ベースプールでは dc=example,dc=com を処理するのに対して、UID 値に従って配布されたデータを保持するプールでは ou=people,dc=example,dc=com を処理します。この手順では、サーバーを再起動する必要があります。


$ dpconf create-ldap-data-view -p 9389 "Base View" "Base Pool" \
dc=example,dc=com

$ dpconf create-ldap-data-view -p 9389 "A-M View" "A-M Pool" \
ou=people,dc=example,dc=com
$ dpconf set-ldap-data-view-prop -p 9389 "A-M View" \
distribution-algorithm:lexicographic lexicographic-attrs:uid \
lexicographic-lower-bound:a lexicographic-upper-bound:m
The proxy server will need to be restarted in order for the changes to take effect

$ dpconf create-ldap-data-view -p 9389 "N-Z View" "N-Z Pool" \
ou=people,dc=example,dc=com
$ dpconf set-ldap-data-view-prop -p 9389 "N-Z View" \
distribution-algorithm:lexicographic lexicographic-attrs:uid \
lexicographic-lower-bound:n lexicographic-upper-bound:z
The proxy server will need to be restarted in order for the changes to take effect
$ dpadm restart /local/dps

4 番目の手順では、適切なデータソースに読み込まれるように LDIF を分割します。この例では、dsadm split-ldif コマンドを使用して最初の分割を実行し、さらに、ファイル編集を使用して、すべてのデータソースで最上位エントリを保持します。これにより、アクセス制御命令を指定する最上位エントリの保持と、各データソースに対する 1 つのインポートコマンドの使用が可能になります。


$ dpadm split-ldif /local/dps /local/ds6/ldif/Example.ldif /tmp/
[14/May/2007:21:14:13 +0200] - STARTUP    - INFO  - Java Version: 1.5.0_09
 (Java Home: /local/jre)
[14/May/2007:21:14:13 +0200] - STARTUP    - INFO  - Java Heap Space: Total Memory
 (-Xms) = 3MB,
 Max Memory (-Xmx) = 63MB
[14/May/2007:21:14:13 +0200] - STARTUP    - INFO  - Operating System: SunOS/sparc 5.10
[14/May/2007:21:14:15 +0200] - INTERNAL   - ERROR - Entry starting at line 0 does not
 start with a DN
[14/May/2007:21:14:15 +0200] - INTERNAL   - ERROR - Unable to parse line "# Kirsten is
 a Directory Administrator and therefore should not" of entry "uid=kvaughan, ou=People,
 dc=example,dc=com" starting at line 112 as an attribute/value pair -- no colon found.
[14/May/2007:21:14:15 +0200] - INTERNAL   - ERROR - Unable to parse line "# Robert is
 a Directory Administrator and therefore should not" of entry "uid=rdaugherty,
 ou=People, dc=example,dc=com" starting at line 298 as an attribute/value pair --
 no colon found.
[14/May/2007:21:14:16 +0200] - INTERNAL   - ERROR - Unable to parse line "# Harry is
 a Directory Administrator and therefore should not" of entry "uid=hmiller, ou=People,
 dc=example,dc=com" starting at line 556 as an attribute/value pair -- no colon found.
[14/May/2007:21:14:16 +0200] - INTERNAL   - INFO  - SplitLDIF processing complete.
  Processed 156 entries.
$ ls /tmp/*ldif
/tmp/a-m view.ldif    /tmp/base view.ldif   /tmp/n-z view.ldif

この手順では、インポートの前に LDIF に追加する最上位エントリも必要です。


$ cp /local/ds6/ldif/Example.ldif /tmp/top.ldif
$ vi /tmp/top.ldif 
$ cat /tmp/top.ldif  
dn: dc=example,dc=com
objectclass: top
objectclass: domain
dc: example
aci: (target ="ldap:///dc=example,dc=com")(targetattr !=
 "userPassword")(version 3.0;acl "Anonymous read-search access";
 allow (read, search, compare)(userdn = "ldap:///anyone");)
aci: (target="ldap:///dc=example,dc=com") (targetattr =
  "*")(version 3.0; acl "allow all Admin group"; allow(all) groupdn =
  "ldap:///cn=Directory Administrators,ou=Groups,dc=example,dc=com";)

$ cat /tmp/top.ldif /tmp/base\ view.ldif > /tmp/top\ and\ base\ view.ldif
$ cat /tmp/top.ldif /tmp/a-m\ view.ldif > /tmp/top\ and\ a-m\ view.ldif
$ cat /tmp/top.ldif /tmp/n-z\ view.ldif > /tmp/top\ and\ n-z\ view.ldif

5 番目の手順では、分割した LDIF を適切なデータソースにインポートします。ここでは、ベースエントリを処理するディレクトリはポート 3389 上にあります。A 〜 M を処理するディレクトリはポート 1389 で待機します。N 〜 Z を処理するディレクトリはポート 2389 で待機します。


$ dsconf import -p 1389 /tmp/top\ and\ a-m\ view.ldif dc=example,dc=com
...
Task completed (slapd exit code: 0).

$ dsconf import -p 2389 /tmp/top\ and\ n-z\ view.ldif dc=example,dc=com
...
Task completed (slapd exit code: 0).
$ dsconf import -p 3389 /tmp/top\ and\ base\ view.ldif dc=example,dc=com
...
Task completed (slapd exit code: 0).

6 番目の手順では、適切なデータプールに接続されたデータソースの操作ベースのウェイトを調整します。クライアントアプリケーションが検索以外の操作を実行する場合は、それらの操作のウェイトも設定してください。


$ dpconf set-attached-ldap-data-source-prop -p 9389 "Base Pool" dsBase search-weight:1
$ dpconf set-attached-ldap-data-source-prop -p 9389 "A-M Pool" dsA-M search-weight:1
$ dpconf set-attached-ldap-data-source-prop -p 9389 "N-Z Pool" dsN-Z search-weight:1

操作ベースのウェイトを設定すると、クライアントアプリケーションでは、データが物理的に配布されない場合と同じように Directory Proxy Server を検索できます。

次の検索では、UID が R で始まるユーザーを探します。


$ ldapsearch -p 9389 -b dc=example,dc=com uid=rfisher
version: 1
dn: uid=rfisher, ou=People, dc=example,dc=com
cn: Randy Fisher
sn: Fisher
givenName: Randy
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
ou: Human Resources
ou: People
l: Cupertino
uid: rfisher
mail: rfisher@example.com
telephoneNumber: +1 408 555 1506
facsimileTelephoneNumber: +1 408 555 1992
roomNumber: 1579

次の検索では、ベースエントリの 1 つを探します。


$ ldapsearch -p 9389 -b ou=groups,dc=example,dc=com cn=hr\ managers
version: 1
dn: cn=HR Managers,ou=groups,dc=example,dc=com
objectClass: top
objectClass: groupOfUniqueNames
cn: HR Managers
ou: groups
uniqueMember: uid=kvaughan, ou=People, dc=example,dc=com
uniqueMember: uid=cschmith, ou=People, dc=example,dc=com
description: People who can manage HR entries

データビューの作成と設定に関するユースケースの例

この節では、データビューの次の情報とその作成および設定方法について説明します。

ここでの例は、接続ハンドラが Directory Proxy Server によって処理されるすべてのクライアント接続を許可していることを前提としています。

サブツリーの異なる部分が異なるデータソースに保存されている場合に単一のアクセスポイントを提供するデータビュー

この節では、サブツリーのさまざまな部分への単一のアクセスポイントを提供するデータビューを設定する方法を説明します。この例では、同じベース DN の 2 つのデータビューが含まれています。数値配布アルゴリズムは、エントリを様々なデータビューに分割するために使用されます。データソースプールは、データ同等のデータソースのセットごとに設定されます。次の図は、配備の例を示しています。

このような配備については、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』「Data Views to Route Requests When Different Parts of a Subtree Are Stored in Different Data Sources」を参照してください。

図 22–1 サブツリーの異なる部分が異なるデータソースに保存されている場合に単一のアクセスポイントを提供する配備の例

図は、複数のデータソースに保存されたサブツリーのさまざまな部分に単一のアクセスポイントを提供する配備の例を示しています。

Procedureサブツリーの異なる部分が異なるデータソースに保存されている場合に単一のアクセスポイントを提供するデータビューを設定する

このタスクは DSCC を使用して実行することができます。詳細については、「Directory Service Control Center のインタフェース」および DSCC オンラインヘルプを参照してください。

  1. 「LDAP データソースの作成と設定」で説明しているように、各 LDAP サーバーにデータソースを作成します。

  2. 「LDAP データソースプールの作成と設定」で説明しているように、2 つのデータソースプールを作成します。

  3. 「LDAP データソースのデータソースプールへの接続」で説明しているように、サブツリーのある部分を含むデータソースを data-source-pool-1 に、サブツリーのもう 1 つの部分を含むデータソースを data-source-pool-2 に接続します。

  4. (省略可能) 負荷分散を設定します。

    詳細は、「負荷分散の設定」を参照してください。

  5. ou=people,dc=example,dc=comuid0 から 99 までのエントリが選択されるように、配布アルゴリズムを使ってデータビューを作成し、要求を data-source-pool-1 に送信するようデータビューを設定します。


    $ dpconf set-ldap-data-view-prop -h host1 -p 1389 dataview-1 \
     ldap-data-source-pool:data-source-pool-1 base-dn:ou=people,dc=example,dc=com \
     distribution-algorithm	:numeric numeric-attrs:uid numeric-lower-bound	:0 \
     numeric-upper-bound	:99
  6. ou=people,dc=example,dc=comuid100 から 199 までのエントリが選択されるように、配布アルゴリズムを使ってもう 1 つのデータビューを作成し、要求を data-source-pool-2 に送信するようデータビューを設定します。


    $ dpconf set-ldap-data-view-prop -h host1 -p 1389 dataview-2 \
     ldap-data-source-pool:data-source-pool-2 base-dn:ou=people,dc=example,dc=com \
     distribution-algorithm:numeric numeric-attrs:uid numeric-lower-bound:100
     numeric-upper-bound	:199

    データビューのもう 1 つのプロパティーは、「デフォルトデータビュー」のデフォルトデータビューと同じです。

  7. 必要に応じて、変更を有効にするために Directory Proxy Server のインスタンスを再起動します。

    Directory Proxy Server の再起動については、「Directory Proxy Server を再起動する」を参照してください。

階層と配布アルゴリズムを持つデータビュー

この節では、階層と配布アルゴリズムを組み合わせるデータビューを設定する方法を説明します。このような配備については、『Sun Java System Directory Server Enterprise Edition 6.3 Reference』「Data Views With Hierarchy and a Distribution Algorithm」を参照してください。

ここでの例には、4 つのデータビューが含まれます。データビュー 1 のベース DN は、その他のデータビューのベース DN より上位です。データビュー 3 とデータビュー 4 のベース DN は同じですが、数値配布アルゴリズムによって、エントリがデータビュー 3 か 4 に割り振られます。

下位エントリが別のデータビューのベース DN として設定されると、Directory Proxy Server は、サブツリーの下位エントリをデータビューから自動的に除外します。数値配布アルゴリズムは同じサブツリーのエントリが異なるデータビューに分割します。データソースプールは、データ同等のデータソースのセットごとに設定されます。

次の図は、配備の例を示しています。

図 22–2 階層と配布アルゴリズムを持つデータビューの例

図は、階層と配布アルゴリズムを組み合わせるデータビューの例を示しています。

Procedure階層と配布アルゴリズムを持つデータビューを設定する

DSCC を使用してこのタスクを実行することはできません。次の手順に示すように、コマンド行を使用します。

  1. 「LDAP データソースの作成と設定」で説明しているように、各 LDAP サーバーにデータソースを作成します。

  2. 「LDAP データソースプールの作成と設定」で説明しているように、4 つのデータソースプールを作成します。

  3. 「LDAP データソースのデータソースプールへの接続」の指示に従って、データソースをデータソースプールに接続します。

    • dc=example,dc=com を含むデータソースを data-source-pool-1 に接続します。

    • ou=computer,dc=example,dc=com を含むデータソースを data-source-pool-2 に接続します。

    • ou=people,dc=example,dc=comuid0 99 の間のエントリを持つデータソースを data-source-pool-3 に接続します。

    • ou=people,dc=example,dc=comuid100 199 の間のエントリを持つデータソースを data-source-pool-4 に接続します。

  4. (省略可能) 負荷分散を設定します。

    詳細は、「負荷分散の設定」を参照してください。

  5. ベース DN が dc=example,dc=comdata-source-pool-1 を参照するデータビューを作成します。


    $ dpconf create-ldap-data-view -h host1 -p 1389 dataview-1 \
     data-source-pool-1 dc=example,dc=com
  6. ベース DN が ou=computer,dc=example,dc=comdata-source-pool-2 を参照するデータビューを作成します。


    $ dpconf create-ldap-data-view -h host1 -p 1389 dataview-2 \
     data-source-pool-2 ou=computer,dc=example,dc=com
  7. ベース DN が ou=people,dc=example,dc=comdata-source-pool-3 を参照するデータビューを作成します。uid0 から 99 までのエントリを選択するようにデータビューで配布アルゴリズムを設定します。


    $ dpconf create-ldap-data-view -h host1 -p 1389 dataview-3 \
     data-source-pool-3 ou=people,dc=example,dc=com
    $ dpconf set-ldap-data-view-prop dataview-3 distribution-algorithm:numeric \
     numeric-attrs:uid numeric-lower-bound:0 numeric-upper-bound:99
  8. ベース DN が ou=people,dc=example,dc=comdata-source-pool-4 を参照するデータビューを作成し、uid100 から 199 までのエントリを選択するようデータビューで配布アルゴリズムを設定します。


    $ dpconf create-ldap-data-view -h host1 -p 1389 dataview-4 \
     data-source-pool-4 ou=people,dc=example,dc=com
    $ dpconf set-ldap-data-view-prop dataview-4 distribution-algorithm:numeric \
     numeric-attrs:uid numeric-lower-bound:100 numeric-upper-bound:199
  9. excluded-subtrees パラメータをチェックして、サブツリー ou=computer,dc=example, dc=comou=people,dc=example, dc=comdataview-1 から除外されていることを確認します。


    $ dpconf get-ldap-data-view-prop -h host1 -p 1389 dataview-1 excluded-subtrees

    除外されたサブツリーの一覧が返されます。

  10. 変更を有効にするために Directory Proxy Server のインスタンスを再起動します。

    Directory Proxy Server の再起動については、「Directory Proxy Server を再起動する」を参照してください。