本章說明如何配置目錄代理伺服器實例。本章中的程序使用 dpadm 與 dpconf 指令。如需有關這些指令的資訊,請參閱 dpadm(1M) 與 dpconf(1M) 線上手冊。
本章包含下列主題:
本節示範兩個範例目錄代理伺服器配置,其中一個針對負載平衡,另外一個針對資料分佈。如需虛擬目錄的更多資訊,請參閱虛擬配置範例。
一個簡單的負載平衡案例包含將搜尋與比較作業傳送至一組目錄,並將其他作業傳送至另一組目錄。目錄代理伺服器會接收所有用戶端作業。此伺服器必須判斷哪組目錄取得讀取作業,而哪組目錄取得其他作業。
配置目錄代理伺服器處理此負載平衡案例的重要階段如下。
將目錄增加為目錄代理伺服器的資料來源。
將資料來源增加至資料來源池。
配置部分資料來源接受搜尋與比較作業,而其他資料來源則接受增加、連結、刪除、修改及修改 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 |
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
尋找目錄代理伺服器目前的配置。
$ 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 |
$ 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. |
請視需要重新啟動目錄代理伺服器實例以使變更生效。
如需有關重新啟動目錄代理伺服器的資訊,請參閱重新啟動目錄代理伺服器。
若要顯示目錄代理伺服器實例的配置,請鍵入 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. |
dpconf info 僅會顯示 Secure listen address 和 Non-secure listen address (如果這些特性設為非預設值)。以上輸出不會顯示 Non-secure listen address,因為此特性未設為非預設值。
如果需要重新啟動實例,dpconf info 也會提醒使用者重新啟動。
您也可以使用 dpadm info 顯示目錄代理伺服器實例的配置資訊,但此指令僅能在實例已停止時使用。
當您使用 dpadm 備份目錄代理伺服器時,會備份配置檔案與伺服器憑證。如果已執行目錄代理伺服器虛擬 ACI,也會備份 ACI。
目錄代理伺服器在每次伺服器成功啟動時,自動備份 conf.ldif 檔案。
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
停止目錄代理伺服器實例。
$ dpadm stop instance-path |
備份目錄代理伺服器實例。
$ dpadm backup instance-path archive-dir |
archive-dir 目錄由 backup 指令建立,並且不可以在執行指令前存在。此目錄包含每個配置檔案與憑證的備份。
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
您必須建立一個目錄代理伺服器實例,才能啟動復原作業。
停止目錄代理伺服器實例。
$ dpadm stop instance-path |
復原目錄代理伺服器實例。
$ dpadm restore instance-path archive-dir |
如果存在實例路徑,則以無訊息方式執行復原作業。archive-dir 目錄中的配置檔案與憑證會取代 instance-path 目錄中的配置檔案與憑證。
如果不存在實例路徑,復原作業會失敗。
代理伺服器管理員是授權管理員,類似 UNIX® 系統上的超級使用者。在建立目錄代理伺服器實例時定義代理伺服器管理員項目。代理伺服器管理員的預設 DN 為 cn=Proxy Manager。
您可以檢視並變更代理伺服器管理員 DN 與密碼,如下列程序所示。
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
尋找代理伺服器管理員的配置。
$ 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。傳回配置管理員密碼的雜湊值。
變更代理伺服器管理員的 DN。
$ dpconf set-server-prop -h host -p port configuration-manager-bind-dn:bindDN |
建立包含代理伺服器管理員密碼的檔案,並設定指向該檔案的特性。
$ 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
特性的 rws 和 rwd 關鍵字表示該特性的變更是否需要重新啟動伺服器。
如果特性具有 rws (讀取、寫入、靜態) 關鍵字,則變更特性後必須重新啟動伺服器。
如果特性具有 rwd (讀取、寫入、動態) 關鍵字,則動態執行對特性的修改作業 (不重新啟動伺服器)。
若要確定對特性的變更是否需要重新啟動伺服器,請執行下列指令:
$ 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 章, 目錄伺服器配置。
如果重新配置目錄代理伺服器存取目錄伺服器的配置項目,則很可能破壞目錄代理伺服器的管理架構。
如果真的需要透過目錄代理伺服器存取目錄伺服器的配置項目,請採取特殊步驟以確保不破壞目錄代理伺服器的管理架構。本節說明如何透過使用目錄代理伺服器存取目錄伺服器的配置項目。
如建立與配置 LDAP 資料來源中所述建立一或多個資料來源。
如建立與配置 LDAP 資料來源池中所述,建立 LDAP 資料來源池。
如將 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 ... |
執行此步驟之後,用戶端可以存取連線至目錄代理伺服器的某一資料來源的配置項目。但是,用戶端無法得知該配置項目所屬的資料來源。
建立 LDAP 資料檢視以顯示 cn=config。
$ dpconf create-ldap-data-view -h host -p port view-name pool-name cn=config |