7.4. 分配和管理唯一数字属性值


有些条目属性需要具有唯一数字,如 uidNumbergidNumber。目录服务器可以使用分布式数字分配(DNA)插件自动生成并提供指定属性的唯一数字。
注意
在 DNA 插件中,属性一致性不一定会保留。该插件只分配非重叠范围,但它允许为受管属性手动分配数字,而且不会验证或要求手动分配的数字是唯一的。
分配唯一数字的问题不是生成数字,而是有效避免复制冲突。DNA 插件 在单个 后端间分配唯一数字。对于多层次复制,当每个供应商都运行本地 DNA 插件实例时,必须有一种方法来确保每个实例使用真正唯一的数字集。这可以通过为各个服务器分配不同的 数字范围 来完成。

7.4.1. 关于动态编号分配

服务器的 DNA 插件分配实例可以发出的一系列可用数字。范围定义非常简单,由两个属性设置:服务器的下一个可用数字(范围的低端)及其最大值(范围的顶部)。当配置了插件实例时,会设置初始底部范围。之后,底部值由插件更新。通过将可用数字拆分为每个副本上的独立范围,服务器可以持续分配数字,而不会相互重叠。

7.4.1.2. 范围和分配号

Directory 服务器有多种方法来处理生成属性值:
  • 在最简单的情形中,用户条目会添加到具有对象类的目录中,它需要 unique-number 属性,但没有属性 present。添加没有 managed 属性的条目会触发 DNA 插件分配值。只有在 DNA 插件配置为为单个属性分配唯一值时,此选项才起作用。
  • 相似且更易于管理的选项是使用 魔法号。这个音量号是 managed 属性的模板值、服务器范围之外的内容、数字甚至一个单词,插件可识别它需要替换为新分配的值。当使用 magic 值添加条目且该条目位于配置的 DNA 插件的范围和过滤器中时,使用 magic 号会自动触发插件生成新值。以下示例基于使用 ldapmodify,将 0 添加为一个魔法号:
    dn: uid=jsmith,ou=people,dc=example,dc=com
     changetype: add
     objectClass: top
     objectClass: person
     objectClass: posixAccount
     uid: jsmith
     cn: John Smith
     uidNumber: 0
     gidNumber: 0
     ....
    Copy to Clipboard Toggle word wrap
    DNA 插件仅生成新的、唯一的值。如果向条目添加或修改为 DNA 插件控制的属性使用特定值,则会使用指定的数字; DNA 插件不会覆盖它。

7.4.1.3. 相同范围中的多个属性

DNA 插件可以分配唯一数字到单个属性类型,或者从单个范围唯一数字的多个属性类型分配。
这提供了多个选项,可将唯一数字分配给属性:
  • 从单一唯一数字范围内分配给单个属性类型的单个数字。
  • 对于一个条目,分配给两个属性的唯一数字相同。
  • 分配了两个不同的属性,与相同范围的唯一数字不同。
在很多情况下,为每个属性类型分配唯一数字就足够了。当将 employeeID 分配给新员工条目时,务必要为每个员工条目分配唯一的 employeeID
然而,在有些情况下,从相同数量分配唯一数字到多个属性可能很有用。例如,当将 uidNumbergidNumber 分配给 posixAccount 条目时,DNA 插件将为这两个属性分配相同的数字。为此,请将两个受管属性传递给修改操作,并指定 magic 值。使用 ldapmodify
#  ldapmodify -D "cn=Directory Manager" -W -x

dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
uidNumber: 0
-
add:gidNumber
gidNumber: 0
Copy to Clipboard Toggle word wrap
当多个属性由 DNA 插件处理时,如果对象类只允许其中一个属性,插件才能为这些属性分配唯一值。例如,posixGroup 对象类不允许 uidNumber 属性,但它确实允许 gidNumber。如果 DNA 插件管理 uidNumbergidNumber,则在创建 posixGroup 条目时,会从与 uidNumbergidNumber 属性相同的范围内分配 gidNumber 的唯一数字。对由插件执行的所有属性使用相同的池,可以保持唯一数字的分配一致,并防止在不同条目上分配 uidNumbergidNumber 的情况,并产生相同的 唯一数字
如果多个属性由 DNA 插件处理,则单个修改操作中的条目中的所有给定受管属性将相同的值分配给所有给定管理的属性。要分配与同一范围 不同的 数字,您必须执行单独的修改操作。以下示例使用 ldapmodify 来完成此操作:
# ldapmodify -D "cn=Directory Manager" -W -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: uidNumber
uidNumber: 0
^D

# ldapmodify -D "cn=Directory Manager" -W -x
dn: uid=jsmith,ou=people,dc=example,dc=com
changetype: modify
add: employeeId
employeeId: magic
Copy to Clipboard Toggle word wrap
重要
当 DNA 插件配置为为多个属性分配唯一数字时,必须为需要唯一数字的每个属性指定 magic 值。虽然将 DNA 插件配置为为单个属性提供唯一数字时不需要这样做,但有多个属性是必需的。有些情况下,条目不允许为范围定义的每种属性类型,或者更重要,一个条目允许定义所有属性类型,但只有属性的子集需要唯一值。

例 7.6. DNA 和唯一银行帐户号

示例银行希望将相同的唯一数字用于客户的 primaryAccountcustomerID 属性。Example bank 管理员配置了 DNA 插件,为同一范围内的两个属性分配唯一的值。
银行还希望为来自与客户 ID 和主要帐户编号相同的二级账户分配号,但这些数字不能与主要帐户号相同。Example Bank 管理员配置 DNA 插件也会管理 secondaryAccount 属性,但仅在条目被创建、primaryAccountcustomerID 被分配,才会将 secondaryAccount 属性添加到条目中。这可确保 primaryAccountcustomerID 共享相同的唯一数字,并且任何 secondAccount 号码都完全唯一,但仍来自同一范围的数字。

7.4.2. 查看 DNA 插件语法

DNA 插件本身是一个容器条目,类似于 Password Storage Schemes 插件。DNA 插件条目下的每个 DNA 条目都为 DNA 插件定义一个新的受管范围。
要为 DNA 插件设置新的受管范围,请在容器条目下创建条目。
最基本的配置是在单一服务器上设置分布式数字分配,这意味着不会在服务器间共享或传输范围。基本 DNA 配置条目定义了四个内容:
  • 该值正在管理的属性,在 dnaType 属性中设置
  • 用作搜索条目的基础的条目 DN,在 dnaScope 属性中设置
  • 用于识别要管理的条目的搜索过滤器,在 dnaFilter 属性中设置
  • 要分配的下一个可用值,在 dnaNextValue 属性中设置(在条目创建后,这由插件处理)
有关 cn=DNA_config_entry,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config 条目中支持的属性列表,请参阅红帽目录服务器配置、命令和文件参考
要在单一服务器上为单个属性类型配置分布式数字分配:
dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
objectClass: top
objectClass: dnaPluginConfig
cn: Account UIDs
dnatype: uidNumber
dnafilter: (objectclass=posixAccount)
dnascope: ou=people,dc=example,dc=com
dnaNextValue: 1
Copy to Clipboard Toggle word wrap
如果为分布式数字分配配置了多个供应商,则该条目必须包含传输范围所需的信息:
  • 服务器可以分配的最大数;这将设定该范围的 upward 绑定,当多个服务器分配数字时,这是逻辑上所需的。这是在 dnaMaxValue 属性中设置的。
  • 范围不足以触发范围传输的阈值,在 dnaThreshold 属性中设置。如果没有设置,则默认值为 1
  • 一个超时时间,以便服务器不会挂起等待传输,在 dnaRangeRequestTimeout 属性中设置。如果没有设置,则默认值为 10,即 10 秒。
  • 所有供应商服务器之间共享的配置条目 DN,它存储每个供应商的范围信息,设置为 dnaSharedCfgDN 属性。
服务器可以分配的特定数字范围在 dnaNextRange 属性中定义。这显示了传输的下一个可用范围,并由插件自动管理,因为范围由服务器分配或使用。这个范围只是 "on deck"。它尚未分配给其他服务器,并且仍然可用于其本地目录服务器。
dn: cn=Account UIDs,cn=Distributed Numeric Assignment Plugin,cn=plugins,cn=config
objectClass: top
objectClass: dnaPluginConfig
cn: Account UIDs
dnatype: uidNumber
dnafilter: (objectclass=posixAccount)
dnascope: ou=People,dc=example,dc=com
dnanextvalue: 1
dnaMaxValue: 1300
dnasharedcfgdn: cn=Account UIDs,ou=Ranges,dc=example,dc=com
dnathreshold: 100
dnaRangeRequestTimeout: 60
dnaNextRange: 1301-2301
Copy to Clipboard Toggle word wrap
只有当需要为其他服务器分配特定范围时,才应明确设置 dnaNextRange 属性。dnaNextRange 属性中设置的任何范围都必须从其他服务器可用的范围内唯一,以避免重复。如果没有来自其他服务器的请求,并且明确设置了 dnaNextRange 的服务器达到其 set dnaMaxValue,则会从这个 deck 中分配下一个值集合( dnaNextRange的一部分)。
dnaNextRange 分配也受 DNA 配置中设置的 dnaThreshold 属性的限制。为 dnaNextRange 分配给另一个服务器的任何范围都无法违反服务器的阈值,即使该范围在 dnaNextRange 上可用。
注意
如果没有明确设置,如果在内部处理 dnaNextRange 属性。当它被自动处理时,dnaMaxValue 属性充当下一个范围的上限。
每个供应商都在单独的配置条目中保持其当前范围的跟踪,其中包含有关其范围及其连接设置的信息。此条目是 dnasharedcfgdn 中位置的子条目。配置条目将复制到所有其他供应商,因此每个供应商都可以检查配置以查找要联系新范围的服务器。例如:
dn: dnaHostname=ldap1.example.com+dnaPortNum=389,cn=Account UIDs,ou=Ranges,dc=example,dc=com
objectClass: dnaSharedConfig
objectClass: top
dnahostname: ldap1.example.com
dnaPortNum: 389
dnaSecurePortNum: 636
dnaRemainingValues: 1000
Copy to Clipboard Toggle word wrap

7.4.3. 配置唯一编号分配

唯一的数字分布是通过创建 DNA 插件的不同实例来配置的。

7.4.3.1. 创建 DNA 插件的新实例

要将 DNA 与多个配置搭配使用,请为每个配置创建一个插件的新实例。
注意
您只能使用命令行创建插件的新实例。但是,您可以使用命令行和 Web 控制台编辑设置。
创建并启用插件的新实例:
  1. 例如,要创建一个插件的新实例:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin dna config "Account UIDs" add --type uidNumber --filter "(objectclass=posixAccount)" --scope ou=People,dc=example,dc=com --next-value 1 --max-value 1300 --shared-config-entry "cn=Account UIDs,ou=Ranges,dc=example,dc=com" --threshold 100 --range-request-timeout 60 --magic-regen magic
    Copy to Clipboard Toggle word wrap
    有关您可以在 --magic-regen 参数中设置的值的详情,请查看 Configuration, Command and File Reference 中的 dnaMagicRegen 属性描述。
  2. 启用 DNA 插件。详情请查看 第 1.10.2 节 “启用和禁用插件”

7.4.3.2. 使用命令行配置唯一数字分配

注意
任何为其分配有唯一数字的属性都必须为其设置相等索引。服务器必须在内部执行排序搜索,以查看 dnaNext 值是否已被 使用,这需要整数属性上相等索引,并具有正确的排序匹配规则。
第 13.2 节 “创建标准索引” 中描述了创建索引。
注意
在每个供应商服务器上设置 DNA 插件,并小心不要与数字范围值重叠。
  1. 创建插件的新实例。请参阅 第 7.4.3.1 节 “创建 DNA 插件的新实例”
  2. 在复制子树中创建共享容器条目:
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    dn: ou=Ranges,dc=example,dc=com
    changetype: add
    objectclass: top
    objectclass: extensibleObject
    objectclass: organizationalUnit
    ou: Ranges
    -
    dn: cn=Account UIDs,ou=Ranges,dc=example,dc=com
    changetype: add
    objectclass: top
    objectclass: extensibleObject
    cn: Account UIDs
    Copy to Clipboard Toggle word wrap
  3. 重启实例:
    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap

7.4.3.3. 使用 Web 控制台配置唯一编号分配

使用 Web 控制台启用并配置 DNA 插件:
  1. 创建插件的新实例。请参阅 第 7.4.3.1 节 “创建 DNA 插件的新实例”
  2. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  3. 选择实例。
  4. 打开 Plugins 菜单。
  5. 选择 DNA 插件。
  6. 将状态更改为 ON 以启用插件。
  7. 单击 Add Config
  8. 填写字段并启用配置。

7.4.4. 分布式数字分配插件性能备注

可以动态更改 DNA 配置的问题,以便访问 DNA 配置的新操作(如 DNA 任务或 DNA 配置的其他更改)将访问旧的配置,因为新配置的线程尚未发布。这可能导致操作使用旧配置,或者只是导致操作挂起。
要避免这种情况,请在 35 秒的动态 DNA 配置更改之间保留间隔。这意味着 DNA 配置更改和任何目录条目更改之间具有睡眠或延迟,这些更改将触发 DNA 插件操作。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat