7.2. 目录服务器在复制环境中管理模式更新
当您更新 cn=schema
树中的目录模式时,目录服务器会将更改存储在 /etc/dirsrv/slapd- <instance_name> /schema/99user.ldif
文件中,包括更改状态号(CSN)。
目录服务器不会直接将 schema 更改复制到其他副本。当复制树中更新目录内容时,模式复制将开始。例如,如果您在修改模式后更新用户,供应商会将存储在 nsSchemaCSN
属性中的 CSN 与消费者上的属性进行比较。如果消费者上的 nsSchemaCSN
属性的值低于供应商上的 nsSchemaCSN 属性的值,则目录服务器会将 schema 复制到消费者。要成功复制,供应商上的所有对象类和属性类型必须是消费者定义的超集。
例 7.1. 模式子集和超集
-
在
server1
上,示例
对象类允许a1、
a2
和a3
属性。 -
在
server2
上,示例
对象类允许a1
和a3
属性。
在上例中,server1
上 示例
对象类的 schema 定义是 server2
上对象类的超集。在验证阶段,当目录服务器复制或接受 schema 时,服务器会检索 superset 定义。例如,如果消费者检测到本地模式中的对象类允许比供应商模式中的对象类更少的属性,Directory 服务器会更新本地模式。
如果架构定义成功复制,则服务器和架构定义(如对象类和属性类型)上的 nsSchemaCSN
属性不再与复制会话的开头进行比较。
在以下情况下,Directory 服务器不会复制模式:
一个主机上的 schema 是另一个主机的 schema 的子集。
例如,
server2
上example
对象类的 schema 定义是server1
上对象类的子集。属性子集(单值属性是多值属性)和属性语法的子集。- 当供应商模式和消费者模式中的定义需要合并时。
-
目录服务器不支持合并模式。例如,如果一个服务器上的对象类允许
a1、
和a
2a3
属性以及a1、
a3
和a4
在其他服务器上,则架构不是子集且无法合并。 您可以使用
/etc/dirsrv/slapd- <instance_name> /schema/99user.ldif
以外的模式文件。目录服务器允许您在
/etc/dirsrv/slapd-instance_name/schema/
目录中添加额外的 schema 文件。但是,只有/etc/dirsrv/slapd-instance_name/schema/99user.ldif
文件中的 CSN 会被更新。因此,其他架构文件仅在本地使用,不会自动传送到复制合作伙伴。重要要启用 Directory 服务器来自动复制模式并避免重复的模式定义,请在
/etc/dirsrv/slapd- <instance_name>/schema/99user.ldif
文件中存储自定义模式。