本節示範兩個範例目錄代理伺服器配置,其中一個針對負載平衡,另外一個針對資料分佈。如需虛擬目錄的更多資訊,請參閱虛擬配置範例。
一個簡單的負載平衡案例包含將搜尋與比較作業傳送至一組目錄,並將其他作業傳送至另一組目錄。目錄代理伺服器會接收所有用戶端作業。此伺服器必須判斷哪組目錄取得讀取作業,而哪組目錄取得其他作業。
配置目錄代理伺服器處理此負載平衡案例的重要階段如下。
將目錄增加為目錄代理伺服器的資料來源。
將資料來源增加至資料來源池。
配置部分資料來源接受搜尋與比較作業,而其他資料來源則接受增加、連結、刪除、修改及修改 DN 作業。
將資料來源池增加至資料檢視。
下列範例使用在連接埠 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。
配置目錄代理伺服器處理此資料分佈案例的重要階段如下。
將目錄增加為目錄代理伺服器的資料來源。
將資料來源增加至資料來源池,以處理不同的資料分佈。
建立專為將用戶端請求分佈至適當資料池而設計的資料檢視。
分割 LDIF 以載入至適當的資料來源。
將分割的 LDIF 匯入至適當的資料來源。
針對附加至適當資料池的資料來源,調整基於作業的加權。
下列範例使用在連接埠 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 |