Sun Java System Directory Server Enterprise Edition 6.1 管理指南

配置示例

本部分介绍了两个示例目录代理服务器配置,一个用于负载平衡,另一个用于数据分配。有关虚拟目录的详细信息,请参见样例虚拟配置

配置目录代理服务器以执行负载平衡

一种简单的负载平衡方案包括将搜索和比较操作发送到一组目录,而将其他操作发送到另一组目录。目录代理服务器接收所有客户端操作。此服务器必须确定获取读取操作的目录集以及获取其他操作的目录集。

    配置目录代理服务器以处理这种负载平衡方案的关键阶段如下所示。

  1. 将目录添加为目录代理服务器数据源。

  2. 将数据源添加到数据源池中。

  3. 将某些数据源配置为接受搜索和比较操作,将其他数据源配置为接受添加、绑定、删除、修改和修改 DN 操作。

  4. 将数据源池添加到数据视图中。

以下示例涉及侦听端口 9389 的目录代理服务器。此处将该代理配置为按所述方式在两个目录服务器实例之间平衡负载:一个目录服务器实例是 ds1:1389(用于处理搜索和比较操作),另一个是 ds2:2389(用于处理其他操作)。

第一步创建并启用数据源。此步骤需要重新启动代理服务器。


$ dpconf create-ldap-data-source -p 9389 ds1 localhost:1389
$ dpconf create-ldap-data-source -p 9389 ds2 localhost:2389
$ dpconf set-ldap-data-source-prop -p 9389 ds1 is-enabled:true
$ dpconf set-ldap-data-source-prop -p 9389 ds2 is-enabled:true
$ dpadm restart /local/dps

第二步将数据源添加到数据源池中。


$ dpconf create-ldap-data-source-pool -p 9389 "Directory Pool"
$ dpconf attach-ldap-data-source -p 9389 "Directory Pool" ds1 ds2

第三步将 ds1 配置为接受搜索和比较操作,而将 ds2 配置为接受其他操作。


$ dpconf set-attached-ldap-data-source-prop -p 9389 "Directory Pool" ds1 \
add-weight:disabled bind-weight:disabled compare-weight:1 delete-weight:disabled \
modify-dn-weight:disabled modify-weight:disabled search-weight:1
$ dpconf set-attached-ldap-data-source-prop -p 9389 "Directory Pool" ds2 \
add-weight:1 bind-weight:1 compare-weight:disabled delete-weight:1 \
modify-dn-weight:1 modify-weight:1 search-weight:disabled

第四步将数据源池添加到数据视图中,以便将客户端应用程序请求路由到该池。


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

配置目录代理服务器以分配后缀数据

一种简单的数据分配方案包括将 UID 以 A 至 M 开头的条目存储在一组目录中,而将 UID 以 N 至 Z 开头的条目存储在另一组目录中。目录代理服务器接收所有客户端操作。此服务器必须确定处理 A 至 M 以及 N 至 Z 的目录集。

    配置目录代理服务器以处理这种数据分配方案的关键阶段如下所示。

  1. 将目录添加为目录代理服务器数据源。

  2. 将数据源添加到数据源池中以处理不同的数据分配。

  3. 创建用于将客户端请求分配到相应数据池的数据视图。

  4. 拆分 LDIF 以加载到相应数据源。

  5. 将拆分的 LDIF 导入到相应数据源。

  6. 为连接到相应数据池的数据源调整基于操作的权重。

以下示例涉及侦听端口 9389 的目录代理服务器。为简化此示例,此处将该代理配置为仅在三个目录服务器实例之间按所述方式进行分配。为了保证可用性和读取可伸缩性,请使用复制的目录拓扑来存储 LDAP 数据。一个目录服务器实例 (dsA-M:1389) 用于处理 UID 以 A 至 M 开头的用户条目。另一个目录服务器实例 ( dsN-Z:2389) 用于处理 UID 以 N 至 Z 开头的用户条目。最后一个目录实例 (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

第二步将数据源添加到数据池中。


$ 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

第三步创建用于将客户端请求分配到相应数据池的数据视图。请注意基本池是如何处理 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

第四步拆分 LDIF 以加载到相应数据源。此示例使用 dsadm split-ldif 命令执行初始拆分,并且还执行一些文件编辑操作以在所有数据源中保留顶级条目。这样,既可保留用于指定访问控制指令的顶级条目,还可以将单个导入命令用于每个数据源。


$ 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

第五步将折分的 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).

第六步为连接到相应数据池的数据源调整基于操作的权重。如果客户端应用程序执行除搜索以外的操作,则也必须为这些操作设置权重。


$ 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

设置基于操作的权重后,客户端应用程序可以对目录代理服务器进行搜索,就好像数据没有实际进行分配一样。

以下搜索查找 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

下一个搜索查找某个基本条目。


$ 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