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

配置範例

本節示範兩個目錄代理伺服器配置範例,其中一個針對負載平衡,另一個針對資料分佈。如需有關虛擬目錄的更多資訊,請參閱虛擬配置範例

配置目錄代理伺服器執行負載平衡

簡單舉例來說,負載平衡就是將搜尋和比較作業傳送至一組目錄,並將其他作業傳送至另一組目錄。目錄代理伺服器會接收所有用戶端作業。伺服器必須決定哪一組取得讀取,而哪一組取得其他作業。

    以下是配置目錄代理伺服器處理此負載平衡方案中的重要階段。

  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