21.3. 识别并解决有关过时或缺失供应商的错误
目录服务器将复制拓扑的信息(如向其他副本发送更新的所有供应商)存储在一组名为副本更新向量(RUV)的元数据中。RUV 包含有关供应商的信息,如其 ID 和 URL、本地服务器上的上次更改状态号(CSN)以及第一次更改的 CSN。供应商和消费者都存储 RUV 信息,它们使用它来控制复制更新。
当您从复制拓扑中删除供应商时,有关它的信息可以保留在另一个副本的 RUV 中。您可以使用 cleanallruv 任务删除 RUV 条目组成拓扑中的所有供应商。
先决条件
- 启用复制。
流程
监控
/var/log/dirsrv/slapd-<instance_name> /errors日志文件并搜索类似如下的条目:[22/Jan/2021:17:16:01 -0500] NSMMReplicationPlugin - ruv_compare_ruv: RUV [changelog max RUV] does not contain element [{replica 8 ldap://server2.example.com:389} 4aac3e59000000080000 4c6f2a02000000080000] which is present in RUV [database RUV] ... [22/Jan/2021:17:16:01 -0500] NSMMReplicationPlugin - replica_check_for_data_reload: Warning: for replica dc=example,dc=com there were some differences between the changelog max RUV and the database RUV. If there are obsolete elements in the database RUV, you should remove them using the CLEANALLRUV task. If they are not obsolete, you should check their status to see why there are no changes from those servers in the changelog.在这种情况下,副本 ID
8会导致这个错误。显示所有 RUV 记录和副本 ID,包括有效和无效:
# dsconf <server1_instance_name> replication get-ruv --suffix "dc=example,dc=com"* RUV: {replica 1 ldap://server1.example.com} 61a4d8f8000100010000 61a4f5b8000000010000 Replica ID: 1 LDAP URL: ldap://server1.example.com Min CSN: 2021-11-29 13:43:20 1 0 (61a4d8f8000100010000) Max CSN: 2021-11-29 15:46:00 (61a4f5b8000000010000) RUV: {replica 2 ldap://server2.example.com} 61a4d8fb000100020000 61a4f550000000020000 Replica ID: 2 LDAP URL: ldap://server2.example.com Min CSN: 2021-11-29 13:43:23 1 0 (61a4d8fb000100020000) Max CSN: 2021-11-29 15:44:16 (61a4f550000000020000) RUV: {replica 8 ldap://server3.example.com} 61a4d903000100080000 61a4d908000000080000 Replica ID: 8 LDAP URL: ldap://server3.example.com Min CSN: 2021-11-29 13:43:31 1 0 (61a4d903000100080000) Max CSN: 2021-11-29 13:43:36 (61a4d908000000080000)请注意返回的副本 ID 列表:
1、2和8。为副本 ID
8运行清理任务。# dsconf <server1_instance_name> repl-tasks cleanallruv --suffix="dc=example,dc=com" --replica-id=8请注意,目录服务器复制 RUV 清理任务。因此,您只需要在一个供应商上启动任务。
如果其中一个副本无法加入,例如,如果关闭,您可以使用
--force-cleaning选项来实现 RUV 的立即清理。
验证
显示 RUV 记录和副本 ID:
# dsconf <server1_instance_name> replication get-ruv --suffix "dc=example,dc=com" RUV: {replica 1 ldap://server1.example.com} 61a4d8f8000100010000 61a4f5b8000000010000 Replica ID: 1 LDAP URL: ldap://server1.example.com Min CSN: 2021-11-29 14:02:10 1 0 (61a4d8f8000100010000) Max CSN: 2021-11-29 16:00:00 (61a4f5b8000000010000) RUV: {replica 2 ldap://server2.example.com} 61a4d8fb000100020000 61a4f550000000020000 Replica ID: 2 LDAP URL: ldap://server2.example.com Min CSN: 2021-11-29 14:02:10 1 0 (61a4d8fb000100020000) Max CSN: 2021-11-29 15:58:22 (61a4f550000000020000)命令不再返回副本 ID
8的 RUV 条目。