15.11. 使用 Fractional Replication 管理属性
作为 第 15.1.7 节 “使用 DNATactional Replication 复制子属性集” 描述,部分复制允许管理员设置从复制更新 中排除 的属性。管理员可以出于各种性能原因进行此操作 - 限制通过网络发送的大量属性数量,或者减少修复任务(如
memberOf
计算)运行的次数。
要从复制中排除的属性列表在
nsDS5ReplicatedAttributeList
属性中定义。此属性是复制协议的一部分,可以在 web 控制台中的复制协议向导中配置,或者在创建复制协议时通过命令行进行配置。
nsDS5ReplicatedAttributeList: (objectclass=*) $ EXCLUDE memberof authorityRevocationList accountUnlockTime
nsDS5ReplicatedAttributeList: (objectclass=*) $ EXCLUDE memberof authorityRevocationList accountUnlockTime
重要
目录服务器在
nsDS5ReplicatedAttributeList
属性的值中需要 (objectclass swig)$ EXCLUDE 部分。如果您直接编辑属性,例如使用 ldapmodify
工具,您必须将此部分与上例中显示的属性列表一起使用。但是,dsconf
和 Web 控制台会自动添加 (objectclass swig)$ EXCLUDE 部分,且您必须只指定属性。
15.11.1. 为总和增加更新设置不同的前端复制属性 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
首次配置部分复制时,排除的属性列表适用于所有更新操作。这意味着,对总更新和常规增量更新不包括此属性列表。但是,在有些情况下,属性应该不包括在性能增量更新中,但应包含在整个更新中,以确保目录数据集完成。在这种情况下,可以添加一个第二个属性,它定义了单独的属性列表来从总体更新中排除,
nsDS5ReplicatedAttributeListTotal
。
注意
nsDS5ReplicatedAttributeList
是主部分复制属性。如果只设置了 nsDS5ReplicatedAttributeList
,则它适用于增量更新和整个更新。如果设置了 nsDS5ReplicatedAttributeList
和 nsDS5ReplicatedAttributeListTotal
,则 nsDS5ReplicatedAttributeList
仅适用于增量更新。
例如,每次将
memberOf
属性添加到条目时,都会运行 memberOf 修复任务来解析组成员资格。如果每次发生复制时运行该任务,这可能会导致服务器上的开销。因为只针对一个数据库进行总更新(新添加到复制,或者长时间离线),因此在完全更新是一个可接受的选项后运行 memberOf 修复任务。在这种情况下,nsDS5ReplicatedAttributeList
属性列出了 memberOf
,因此它不包括在增量更新中,但 nsDS5ReplicatedAttributeListTotal
不会列出 memberOf
,使其包含在整个更新中。
增量更新的排除列表在复制协议的
nsDS5ReplicatedAttributeList
属性中设置。例如:
nsds5replicatedattributelist: (objectclass=*) $ EXCLUDE authorityRevocationList accountUnlockTime memberof
nsds5replicatedattributelist: (objectclass=*) $ EXCLUDE authorityRevocationList accountUnlockTime memberof
要设置
nsDS5ReplicatedAttributeList
属性,请使用 dsconf repl-agmt set 命令。例如:
dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \ --suffix="suffix" --frac-list="authorityRevocationList accountUnlockTime memberof" \ agreement_name
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \
--suffix="suffix" --frac-list="authorityRevocationList accountUnlockTime memberof" \
agreement_name
如果
nsDS5ReplicatedAttributeList
是唯一设置的属性,则该列表适用于增量和总更新。要为总数更新设置单独的列表,请将 nsDS5ReplicatedAttributeListTotal
属性添加到复制协议中:
dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \ --suffix="suffix" --frac-list-total="accountUnlockTime" \ agreement_name
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \
--suffix="suffix" --frac-list-total="accountUnlockTime" \
agreement_name
注意
在为总更新设置
nsDS5ReplicatedAttributeList
Total
前,必须为增量更新设置 nsDS5ReplicatedAttributeList 属性。
15.11.2. Replication Keep-alive Entry 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当您更新供应商的属性时,供应商会增加 changelog 更改序列号(CSN)。在复制拓扑中,这个服务器现在连接到第一个消费者,并将本地 CSN 与消费者上的 CSN 进行对比。如果它较低,则从本地更改日志检索更新,并复制到消费者。在启用了部分复制功能的复制拓扑中,这可能会导致问题:例如,如果只对复制中排除的供应商更新属性,则不会找到更新,因此消费者上不会更新 CSN。在某些情况下,比如仅在复制中排除的供应商上只更新属性,则供应商上的不必要的搜索更新可能会导致其他服务器在所需的 之后接收数据。要临时解决这个问题,Directory 服务器使用 keep-alive 条目。
如果供应商中的所有更新属性都不包括在复制中,并且跳过的更新数量超过 100,则供应商中会更新
keepalivetimestamp
属性,并复制到消费者。因为 keepalivetimestamp
属性没有从复制中排除,所以 keep-alive 条目的更新会被复制,所以消费者上的 CSN 会被更新,然后等于供应商中的属性。下次连接消费者时,只会搜索消费者上的 CSN 更新。这可减少供应商搜索要发送的新更新所花费的时间。
目录服务器会根据供应商根据需要自动创建复制 keep-alive 条目。它包含供应商在可分辨名称(DN)中的副本 ID。每个 keep-alive 条目都特定于一个给定的提供者。例如,显示隐藏的 keep-alive 条目:
在以下情况下更新 keep-alive 条目(如果在更新前不存在,则首先创建它):
- 当部分复制协议跳过超过 100 个更新时,在结束复制会话前不会发送任何更新。
- 当供应商初始化消费者时,最初它会创建自己的 keep-alive 条目。也是供应商的消费者不会创建自己的 keep-alive 条目,除非它也初始化另一个消费者。
15.11.3. 防止 "Empty" 更新进行复制 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
部分复制允许从复制更新中删除的属性列表(
nsDS5ReplicatedAttributeList
)。但是,对 exclude 属性的更改仍然会触发修改事件并生成空的复制更新。
nsds5ReplicaStripAttrs
属性添加一个无法在空复制事件中发送的属性列表,并从更新序列中分离。这个逻辑上包括操作特定点,如 修饰符名称
。
例如,假设
accountUnlockTime
属性被排除。John Smith 的用户帐户被锁定,然后过期时间,并自动解锁。只有 accountUnlockTime
属性已更改,且该属性不包括在复制中。但是,操作属性 internalmodifytimestamp
也 改变。触发复制事件,因为 John Smith 的用户帐户被修改 - 但是唯一要发送的数据是新的修改时间戳,否则更新是 emtpy。如果有大量与登录时间或密码过期时间相关的属性(例如,这可能会造成大量空复制更新,这会影响服务器性能或对关联的应用程序有影响。
要防止这种情况,请在复制协议中添加
nsds5ReplicaStripAttrs
属性,以帮助调整部分复制行为:
dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \ --suffix="suffix" \ --strip-list="modifiersname modifytimestamp internalmodifiersname" \ agreement_name
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt set \
--suffix="suffix" \
--strip-list="modifiersname modifytimestamp internalmodifiersname" \
agreement_name
如果复制事件 不为空,则 剥离的属性仍然与其他更改一起复制。只有在事件是 emtpy 时,这些属性才会从更新中删除。