1.2. 目录服务器如何在复制环境中管理模式更新

当您更新 cn=schema 树中的目录模式时,Directory 服务器会将更改存储在 /etc/dirsrv/slapd-instance_name/schema/99user.ldif 文件中,包括更改状态号(CSN)。

目录服务器不会直接将模式更改复制到其他副本。当复制树中更新目录内容时,架构复制将开始。例如,如果您在修改 schema 后更新用户,则供应商会将存储在 nsSchemaCSN 属性中的 CSN 与消费者上的 CSN 进行比较。如果消费者上的 nsSchemaCSN 属性的值低于供应商上的 nsSchemaCSN 属性的值,则目录服务器会将模式复制到消费者。对于成功复制,供应商上的所有对象类和属性类型都必须是消费者定义的超集。

例 1.1. 模式子集和超集

  • server1 上,示例 对象类允许 a1、 a2a3 属性。
  • server2 上,示例 对象类允许 a1a3 属性。

在上例中,server1示例 对象类的 schema 定义是 server2 上对象类的超集。在验证阶段,当目录服务器复制或接受 schema 时,服务器会检索 superset 定义。例如,如果消费者检测到本地 schema 中的对象类允许的属性小于供应商模式中的对象类,Directory 服务器会更新本地 schema。

如果架构定义被成功复制,则 nsSchemaCSN 属性在服务器和架构定义(如对象类和属性类型)上相同,也不会在复制会话开始时进行比较。

在以下场景中,目录服务器不会复制模式:

  • 一个主机上的 schema 是另一主机的模式的子集。

    例如,server2示例 对象类的架构定义是 server1 上对象类的子集。子集也可以为属性(单值属性是多值属性的子集)和属性语法发生。

  • 当供应商模式和消费者模式中的定义需要合并时。
  • 目录服务器不支持合并模式。例如,如果一个服务器上的对象类允许 a1、a 2a3 属性以及 a1、 a3a4 在另一个服务器上,则架构不是子集且不能合并。
  • 您可以使用 /etc/dirsrv/slapd-instance_name/schema/99user.ldif 以外的模式文件。

    目录服务器允许您在 /etc/dirsrv/slapd-instance_name/schema/ 目录中添加额外的模式文件。但是,只更新 /etc/dirsrv/slapd-instance_name/schema/99user.ldif 文件中的 CSN。因此,其他架构文件仅在本地使用,不会自动传送到复制合作伙伴。

    重要

    要使目录服务器自动复制模式并避免重复的模式定义,请将自定义模式存储在 /etc/dirsrv/slapd-instance_name/schema/99user.ldif 文件中。