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