目录代理服务器提供了以下分配算法:
模式匹配
数字
字典顺序
复制
自定义
目录代理服务器会根据请求的参数与一个或多个模式的匹配情况,将请求分配给数据视图。设置以下参数可配置模式匹配分配算法:
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 为偶数的用户的请求发送给偶数数据视图,将 uid 为奇数的用户的请求发送给奇数数据视图。
$ 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 模式类(请参见 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)
例如,配置数字分配算法,将介于 0 和 99 之间的 uid 的请求发送给特定数据视图。对于其余用户,使用相同的语法,但用不同的数据视图。
$ 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 归档 (Java Archive, 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 |