利用目錄代理伺服器可透過資料檢視的定義進行分佈。資料檢視使用檢視基底定義,檢視基底則會決定該資料檢視中的項目之基底 DN。根據目錄代理伺服器中提供的分佈演算法,可以指定項目如何分佈至不同的資料檢視。
如需目錄代理伺服器分佈的簡介與使用案例範例的描述,請參閱「Sun Java System Directory Server Enterprise Edition 6.3 Reference」中的第 17 章「Directory Proxy Server Distribution」。
本章包含下列主題:
目錄代理伺服器提供下列分佈演算法:
模式對應
數值
字母
複寫
自訂
目錄代理伺服器會根據請求的參數與一或多個模式之間的對應,將請求分佈至資料檢視。設定下列參數可配置模式對應分佈演算法:
pattern-matching-base-object-search-filter pattern-matching-base-object-search-filter(5dpconf)
pattern-matching-dn-regular-expression pattern-matching-dn-regular-expression(5dpconf)
pattern-matching-one-level-search-filter pattern-matching-one-level-search-filter(5dpconf)
pattern-matching-subtree-search-filter pattern-matching-subtree-search-filter(5dpconf)
結尾是 filter 的配置屬性為 LDAP 篩選,而非常規表示式。這些 LDAP 篩選會對內送搜尋請求中所包含的 LDAP 篩選進行評估。
例如,使用下列設定可配置模式對應分佈演算法,將使用者 uid 為偶數的請求傳送至 even 資料檢視,並將使用者 uid 為奇數的請求傳送至 odd 資料檢視。
$ dpconf set-ldap-data-view-prop even pattern-matching-base-object-search-filter:'|(uid=\2a)(uid=*0)(uid=*2)\ (uid=*4)(uid=*6)(uid=*8))'\ pattern-matching-one-level-search-filter:'|(uid=\2a)(uid=*0)(uid=*2)\ (uid=*4)(uid=*6)(uid=*8))'\ pattern-matching-subtree-search-filter:'|(uid=\2a)(uid=*0)(uid=*2)\ (uid=*4)(uid=*6)(uid=*8))'\ pattern-matching-dn-regular-expression:'uid=[0-9]+[02468]' distribution-algorithm: pattern-matching |
$ dpconf set-ldap-data-view-prop odd pattern-matching-base-object-search-filter:'|(uid=\2a)(uid=*1)(uid=*3)\ (uid=*5)(uid=*7)(uid=*9))'\ pattern-matching-one-level-search-filter:'|(uid=\2a)(uid=*1)(uid=*3)\ (uid=*5)(uid=*7)(uid=*9))'\ pattern-matching-subtree-search-filter:'|(uid=\2a)(uid=*1)(uid=*3)\ (uid=*5)(uid=*7)(uid=*9))'\ pattern-matching-dn-regular-expression:'uid=[0-9]+[13579]' distribution-algorithm: pattern-matching |
在 (uid=\2a) 表示式中,\2a 是 * 的 ASCII 表示法,其中 2 與 a 是兩個十六進制數字。(uid=\2a) 表示式會確定資料檢視接受所有 uid 的請求。
模式對應演算法支援的語法由 Java Pattern 類別所指定 (請參閱 http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html)。此語法與常用之 regex 語法不同。
目錄代理伺服器會根據請求中 RDN 的數值,將請求分佈至資料檢視。此數值擷取自資料檢視的基底 DN 下之第一個 RDN 的值。設定下列參數可定義數值界限:
numeric-attrs numeric-attrs(5dpconf)
numeric-default-data-view numeric-default-data-view(5dpconf)
numeric-lower-bound numeric-lower-bound(5dpconf)
numeric-upper-bound numeric-upper-bound(5dpconf)
例如,配置數值分佈演算法,將 uid 介於 0 與 99 之間的請求傳送至特定的資料檢視。為其餘的使用者使用相同語法,但利用不同的資料檢視。
$ dpconf set-ldap-data-view-prop dataview distribution-algorithm:numeric \ numeric-attrs:uid numeric-lower-bound:0 numeric-upper-bound:99 |
目錄代理伺服器會根據請求中 RDN 的字母值,將請求分佈至資料檢視。字母界限擷取自資料檢視的基底 DN 下之第一個 RDN 的值。設定下列參數可定義字母界限:
lexicographic-attrs lexicographic-attrs(5dpconf)
lexicographic-lower-bound lexicographic-lower-bound(5dpconf)
lexicographic-upper-bound lexicographic-upper-bound(5dpconf)
例如,配置字母分佈演算法,將名稱開頭介於 A 至 M 之間的使用者請求,傳送至一個資料檢視,並將其餘使用者的請求傳送至另一個資料檢視。
$ dpconf set-ldap-data-view-prop dataview distribution-algorithm:lexicographic \ lexicographic-attrs:cn lexicographic-lower-bound:A lexicographic-upper-bound:M |
目錄代理伺服器會根據複寫中資料檢視的角色,將請求分佈至資料檢視。演算法會將寫入作業分佈至資料來源池中的所有資料來源,並將讀取作業分佈至單一資料來源。複寫角色由 replication-role 參數所定義。資料檢視可有主機角色或用戶角色。
$ dpconf set-ldap-data-view-prop dataview distribution-algorithm:replication |
您可以為所有的資料檢視類型配置自訂分佈演算法,包含 ldap-data-view、jdbc-data-view、ldif-data-view 與 join-data-view 等資料檢視類型。在下列程序中,僅會設定 ldap-data-view 的演算法。
將 extension-jar-file-url 特性設定為包含內有分佈演算法類別之 Java 歸檔 (JAR) 檔案的路徑。
$ dpconf set-server-prop -h host -p port extension-jar-file-url:jar file path |
jar file path 會被有效的 JAR 檔案路徑取代,例如 file:/expt/dps/custom_plugin/myjar.jar。
在配置 custom-distribution-algorithm 之前,請將 distribution-algorithm 設定為 none。
$ dpconf set-ldap-data-view-prop view name distribution-algorithm:none |
將 custom-distribution-algorithm 特性設定為您的自訂分佈演算法類別。
$ dpconf set-ldap-data-view-prop view name custom-distribution-algorithm:PackageName.AlgoClassName |
簡單舉例來說,資料分佈就是將 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 |
本節包含下列有關資料檢視以及如何建立與配置這些檢視的資訊:
本節中的範例假設連線處理程式允許目錄代理伺服器處理所有用戶端連線。
本節說明如何配置資料檢視,以提供子樹狀結構之不同部分的單一存取點。此範例包含具有相同基底 DN 的兩個資料檢視。數值分佈演算法用於將項目分隔至不同的資料檢視。資料來源池會配置給每組資料相同的資料來源。下圖顯示部署範例。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
如建立與配置 LDAP 資料來源中所述,建立各個 LDAP 伺服器的資料來源。
如建立與配置 LDAP 資料來源池中所述,建立兩個資料來源池。
如將 LDAP 資料來源附加至資料來源池中所述,將包含子樹狀結構一部分的資料來源附加至 data-source-pool-1,並將包含子樹狀結構另一部分的資料來源附加至 data-source-pool-2。
(可選擇) 配置負載平衡。
如需有關資訊,請參閱配置負載平衡。
建立具分佈演算法的資料檢視,以選取 ou=people,dc=example,dc=com 中 uid 介於 0 與 99 之間的項目,並為 data-source-pool-1 的直接請求配置資料檢視。
$ dpconf set-ldap-data-view-prop -h host1 -p 1389 dataview-1 \ ldap-data-source-pool:data-source-pool-1 base-dn:ou=people,dc=example,dc=com \ distribution-algorithm :numeric numeric-attrs:uid numeric-lower-bound :0 \ numeric-upper-bound :99 |
建立另一個具分佈演算法的資料檢視,以選取 ou=people,dc=example,dc=com 中 uid 介於 100 與 199 之間的項目,並為 data-source-pool-2 的直接請求配置資料檢視。
$ dpconf set-ldap-data-view-prop -h host1 -p 1389 dataview-2 \ ldap-data-source-pool:data-source-pool-2 base-dn:ou=people,dc=example,dc=com \ distribution-algorithm:numeric numeric-attrs:uid numeric-lower-bound:100 numeric-upper-bound :199 |
資料檢視的其他特性和預設資料檢視中的預設資料檢視相同。
請視需要重新啟動目錄代理伺服器實例以使變更生效。
如需有關重新啟動目錄代理伺服器的資訊,請參閱重新啟動目錄代理伺服器。
本節說明如何配置資料檢視,以合併階層與分佈演算法。如需有關此部署類型的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.3 Reference」中的「Data Views With Hierarchy and a Distribution Algorithm」。
本節中的範例包含四個資料檢視。資料檢視 1 的基底 DN 是其他資料檢視的上層基底 DN。資料檢視 3 與 4 有相同的基底 DN,但是數值分佈演算法將項目分隔至不同的資料檢視。
目錄代理伺服器在子樹狀結構的從屬分支配置為其他資料檢視的基底 DN 時,自動從資料檢視排除從屬分支。數值分佈演算法將相同子樹狀結構的項目分隔至不同的資料檢視。資料來源池會配置給每組資料相同的資料來源。
下圖顯示部署範例。
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
如建立與配置 LDAP 資料來源中所述,建立各個 LDAP 伺服器的資料來源。
如建立與配置 LDAP 資料來源池中所述,建立四個資料來源池。
根據將 LDAP 資料來源附加至資料來源池中的指示,將資料來源附加至資料來源池。
將包含 dc=example,dc=com 的資料來源附加至 data-source-pool-1。
將包含 ou=computer,dc=example,dc=com 的資料來源附加至 data-source-pool-2。
將包含 ou=people,dc=example,dc=com 中 uid 介於 0 與 99 之項目的資料來源附加至 data-source-pool-3。
將包含 ou=people,dc=example,dc=com 中 uid 介於 100 與 199 之項目的資料來源附加至 data-source-pool-4。
(可選擇) 配置負載平衡。
如需有關資訊,請參閱配置負載平衡。
建立基底 DN 為 dc=example,dc=com、參考 data-source-pool-1 的資料檢視。
$ dpconf create-ldap-data-view -h host1 -p 1389 dataview-1 \ data-source-pool-1 dc=example,dc=com |
建立基底 DN 為 ou=computer,dc=example,dc=com 、參考 data-source-pool-2 的資料檢視。
$ dpconf create-ldap-data-view -h host1 -p 1389 dataview-2 \ data-source-pool-2 ou=computer,dc=example,dc=com |
建立基底 DN 為 ou=people,dc=example,dc=com 、參考 data-source-pool-3 的資料檢視。在資料檢視上配置分佈演算法以選取 uid 介於 0 與 99 的項目。
$ dpconf create-ldap-data-view -h host1 -p 1389 dataview-3 \ data-source-pool-3 ou=people,dc=example,dc=com $ dpconf set-ldap-data-view-prop dataview-3 distribution-algorithm:numeric \ numeric-attrs:uid numeric-lower-bound:0 numeric-upper-bound:99 |
建立基底 DN 為 ou=people,dc=example,dc=com、參考 data-source-pool-4 的資料檢視,並在該資料檢視上配置分佈演算法以選取 uid 介於 100 與 199 的項目。
$ dpconf create-ldap-data-view -h host1 -p 1389 dataview-4 \ data-source-pool-4 ou=people,dc=example,dc=com $ dpconf set-ldap-data-view-prop dataview-4 distribution-algorithm:numeric \ numeric-attrs:uid numeric-lower-bound:100 numeric-upper-bound:199 |
檢視 excluded-subtrees 參數,以驗證子樹狀結構 ou=computer,dc=example, dc=com 與 ou=people,dc=example, dc=com 已從 dataview-1 排除。
$ dpconf get-ldap-data-view-prop -h host1 -p 1389 dataview-1 excluded-subtrees |
傳回排除的子樹狀結構清單。
重新啟動目錄代理伺服器實例,變更方可生效。
如需有關重新啟動目錄代理伺服器的資訊,請參閱重新啟動目錄代理伺服器。