9.2. 从复制拓扑中删除供应商
从复制拓扑中删除供应商比删除 hub 或消费者更复杂。这是因为拓扑中的每个供应商都存储了其他供应商的信息,即使供应商突然不可用,它们也会保留这些信息。
目录服务器在一组称为副本更新向量(RUV)的元数据中维护关于复制拓扑的信息。RUV 包含有关供应商的信息,如 ID、URL、最新的更改状态号(CSN),以及第一次更改的 CSN。供应商和消费者均存储 RUV 信息,它们使用它来控制复制更新。
要完全删除供应商,您必须删除其元数据以及配置条目。
前提条件
- 要删除的实例是供应商。
- 如果要删除的主机也充当拓扑中其他服务器的供应商,您配置了其他供应商或中心将数据复制到这些服务器,以防止它们被隔离。
流程
在要删除的供应商中:
列出后缀及其对应的数据库:
#
dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix list
dc=example,dc=com (userroot)请注意数据库的名称。
将数据库设置为只读模式以防止进一步更新:
#
dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --enable-readonly "userroot"
等待拓扑中的所有其他服务器收到此供应商的所有数据。要验证,请确保其他服务器上的 CSN 等于或大于供应商上要删除的 CSN:
#
ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://host-to-remove.example.com:389 -r ldap://server.example.com:389 -b dc=example,dc=com
================================================================================ Replication Synchronization Report (Tue Mar 5 09:46:20 2021) ================================================================================ Database RUV's ===================================================== Supplier RUV: {replica 1 ldap://host-to-remove.example.com:389} 5c7e8927000100010000 5c7e89a0000100010000 {replicageneration} 5c7e8927000000010000 Replica RUV: {replica 1 ldap://host-to-remove.example.com:389} 5c7e8927000100010000 5c7e8927000400010000 {replica 2 ldap://server.example.com:389} {replicageneration} 5c7e8927000000010000显示副本 ID:
#
dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication get --suffix "dc=example,dc=com" | grep -i "nsds5replicaid"
nsDS5ReplicaId: 1在本例中,副本 ID 是
1
。记住此步骤的最后一步的副本 ID。
在所有具有与您要删除的主机的复制协议的供应商中:
列出复制的后缀的复制协议:
#
dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt list --suffix "dc=example,dc=com"
dn: cn=example-agreement,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config cn: example-agreement ...cn
属性包含下一步中所需的复制协议名称。删除复制协议:
#
dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt delete --suffix "dc=example,dc=com" example-agreement
在要删除的供应商上,禁用所有后缀的复制:
#
dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication disable --suffix "dc=example,dc=com"
禁用复制也会删除这个服务器上此后缀的所有复制协议。
-
在继续操作前,请确保
ds-replcheck
输出的Replica RUV
部分中列出的所有目录服务器实例都是在线的。 在拓扑中剩余的其中一个供应商上,清理副本 ID 的 RUV:
#
dsconf -D "cn=Directory Manager" ldap://server.example.com repl-tasks cleanallruv --suffix "dc=example,dc=com" --replica-id 1
此命令要求您指定此流程前面步骤中显示的副本 ID。
验证
在
ds-replcheck
命令的输出中验证您删除的主机没有副本 ID 和 URL 的条目是否已保留:#
ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://host-to-remove.example.com:389 -r ldap://server.example.com:389 -b dc=example,dc=com
后续步骤
如果要使用删除的实例用于测试目的,请禁用只读模式:
#
dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com backend suffix set --disable-readonly userroot
重要如果要使用从拓扑中删除的实例用于测试目的,请确保没有客户端继续使用它。
删除实例:
#
dsctl instance_name remove --do-it