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

第 18 章 目录代理服务器配置

本章介绍如何配置目录代理服务器实例。本章中的过程使用 dpadmdpconf 命令。有关这些命令的信息,请参见 dpadm(1M)dpconf(1M) 手册页。

本章包含以下主题:

配置示例

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

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

一个简单的负载平衡案例就是将搜索和比较操作发送到一组目录,而将其他操作发送到另一组目录。目录代理服务器接收所有客户端操作。服务器必须确定哪组目录获取读取操作,哪组目录获取其他操作。

    配置目录代理服务器以处理此负载平衡方案的重要阶段如下所示。

  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

修改目录代理服务器的配置

本部分介绍如何修改目录代理服务器的配置。

Procedure修改目录代理服务器的配置

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 查找目录代理服务器的当前配置。


    $ dpconf get-server-prop -h host -p port
    

    或者,查看一个或多个配置属性的当前设置。


    $ dpconf get-server-prop -h host -p port property-name ...

    例如,通过运行以下命令确定是否允许未经验证的操作:


    $ dpconf get-server-prop -h host -p port allow-unauthenticated-operations
    allow-unauthenticated-operations  :  true
  2. 更改一个或多个配置参数。


    $ dpconf set-server-prop -h host -p port property:value ...

    例如,通过运行以下命令禁止未经验证的操作:


    $ dpconf set-server-prop -h host -p port allow-unauthenticated-operations:false

    如果您尝试执行非法更改,则此更改将不会生效。例如,如果将 allow-unauthenticated-operations 参数设置为 f 而不是 false,则会产生以下错误:


    $ dpconf set-server-prop -h host -p port allow-unauthenticated-operations:f
    The value "f" is not a valid value for the property "allow-unauthenticated-operations".
    Allowed property values: BOOLEAN
    The "set-server-prop" operation failed.
  3. 重新启动目录代理服务器实例以使更改生效(如有必要)。

    有关重新启动目录代理服务器的信息,请参见重新启动目录代理服务器

显示目录代理服务器实例配置信息

要显示目录代理服务器实例配置,请键入 dpconf info


$ dpconf info
Instance Path           :  instance path
Host Name               :  host
Secure listen address   :  IP address
Port                    :  port
Secure port             :  secure port
SSL server certificate  :  defaultServerCert

Directory Proxy Server needs to be restarted.

只有将 Secure listen addressNon-secure listen address 设置为非默认值时,dpconf info 才会显示这些属性。上面的输出不显示 Non-secure listen address,因为未将此属性设置为非默认值。

如果需要重新启动实例,dpconf info 还会提醒用户重新启动。

也可以使用 dpadm info 来显示目录代理服务器实例配置信息。

备份和恢复目录代理服务器实例

使用 dpadm 备份目录代理服务器时,将备份配置文件和服务器证书。如果已实现目录代理服务器虚拟 ACI,也会备份 ACI。

只要服务器成功启动,目录代理服务器即会自动备份 conf.ldif 文件。

Procedure备份目录代理服务器实例

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 停止目录代理服务器实例。


    $ dpadm stop instance-path
    
  2. 备份目录代理服务器实例。


    $ dpadm backup instance-path archive-dir
    

    archive-dir 目录由 backup 命令创建,并且在运行此命令之前不得存在。此目录包含每个配置文件和证书的备份。

Procedure恢复目录代理服务器实例

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

在启动恢复操作之前,必须先创建一个目录代理服务器实例。

  1. 停止目录代理服务器实例。


    $ dpadm stop instance-path
    
  2. 恢复目录代理服务器实例。


    $ dpadm restore instance-path archive-dir
    
    • 如果实例路径存在,将以无提示方式执行恢复操作。archive-dir 目录中的配置文件和证书将替换 instance-path 目录中的配置文件和证书。

    • 如果实例路径不存在,恢复操作将会失败。

配置代理管理员

代理管理员是具有特权的管理员,与 UNIX® 系统上的超级用户类似。代理管理员条目是在创建目录代理服务器实例时定义的。代理管理员的默认 DN 为 cn=Proxy Manager

可以查看和更改代理管理员的 DN 和密码,如以下过程所示。

Procedure配置代理管理员

可使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。

  1. 查找代理管理员的配置。


    $ dpconf get-server-prop -h host -p port configuration-manager-bind-dn configuration-manager-bind-pwd
    configuration-manager-bind-dn   :  cn=proxy manager
    configuration-manager-bind-pwd  :  {3DES}U77v39WX8MDpcWVrueetB0lfJlBc6/5n

    代理管理员的默认值为 cn=proxy manager。将为配置管理员密码返回一个散列值。

  2. 更改代理管理员的 DN。


    $ dpconf set-server-prop -h host -p port configuration-manager-bind-dn:bindDN
    
  3. 创建包含代理管理员密码的文件,并设置指向该文件的属性。


    $ dpconf set-server-prop -h host -p port configuration-manager-bind-pwd-file:filename
    

需要重新启动服务器的配置更改

对目录代理服务器及其实体的大多数配置更改都可以联机进行。某些更改需要重新启动服务器后才能生效。如果对下表中的任何属性进行配置更改,都必须重新启动服务器:

aci-data-view
bind-dn
client-cred-mode
custom-distribution-algorithm
db-name
db-pwd
db-url
db-user
distribution-algorithm
ldap-address
ldap-port
ldaps-port
listen-address
listen-port
load-balancing-algorithm
num-bind-init
num-read-init
num-write-init
number-of-search-threads
number-of-threads
number-of-worker-threads
ssl-policy
use-external-schema

属性的 rwsrwd 关键字指示属性更改是否要求重新启动服务器。

要确定对某个属性的更改是否需要重新启动服务器,请运行以下命令:

$ dpconf help-properties | grep property-name

例如,要确定更改 LDAP 数据源的绑定 DN 是否需要重新启动服务器,请运行以下命令:

$ dpconf help-properties | grep bind-dn
connection-handler   	bind-dn-filters        rwd  STRING | any
This property specifies a set of regular expressions. The bind DN 
of a client must match at least one regular expression in order for 
the connection to be accepted by the connection handler. (Default: any)
ldap-data-source      bind-dn               rws  DN | ""
This property specifies the DN to use when binding to the LDAP data 
source. (Default: undefined)

要确定进行配置更改后是否必须重新启动服务器,请运行以下命令:

$ dpconf get-server-prop -h host -p port is-restart-required

使用目录代理服务器访问目录服务器的配置条目

目录代理服务器的配置条目位于 cn=config 中。在默认情况下,使用目录代理服务器访问配置条目时,将访问目录代理服务器的配置条目。

要访问目录服务器的配置条目,最好直接连接到目录服务器,而不是连接到目录代理服务器。有关如何配置目录服务器的信息,请参见第 3 章,目录服务器配置


注意 – 注意 –

如果重新配置目录代理服务器以访问目录服务器的配置条目,很可能会破坏目录代理服务器的管理框架。


如果确实需要通过目录代理服务器访问目录服务器的配置条目,请采取特殊措施以确保不会破坏目录代理服务器的管理框架。本部分介绍如何使用目录代理服务器访问目录服务器的配置条目。

Procedure使用目录代理服务器访问目录服务器的配置条目

  1. 创建一个或多个数据源,如创建和配置 LDAP 数据源中所述。

  2. 创建 LDAP 数据源池,如创建和配置 LDAP 数据源池中所述。

  3. 将一个或多个数据源连接到此数据源池,如将 LDAP 数据源连接到数据源池中所述。

    • 要公开某个特定数据源的配置条目,请只将一个 LDAP 数据源连接到 LDAP 数据源池。


      $ dpconf attach-ldap-data-source -h host -p port pool-name data-source-name
      

      执行此步骤后,客户端即可访问连接到目录代理服务器的数据源的配置条目。

    • 要公开任意数据源的配置条目,请将多个 LDAP 数据源连接到 LDAP 数据源池。


      $ dpconf attach-ldap-data-source -h host -p port pool-name data-source-name \
       data-source-name ...

      执行此步骤后,客户端即可访问连接到目录代理服务器的任一数据源的配置条目。但是,客户端无法知道这些配置条目属于哪个数据源。

  4. 创建 LDAP 数据视图以公开 cn=config


    $ dpconf create-ldap-data-view -h host -p port view-name pool-name cn=config