15.10. 从复制拓扑中删除目录服务器实例

在某些情况下,如硬件中断或结构更改,管理员希望从复制拓扑中删除目录服务器实例。本节介绍有关删除实例的详细信息。

15.10.1. 从 Replication Topology 中删除 Consumer 或 Hub

从复制拓扑中删除消费者或 hub:
  1. 如果要删除的主机是 hub,以及拓扑中其他服务器的供应商,请配置其他供应商或 hubs 以将数据复制到这些服务器。如果这些服务器没有配置其他供应商,并且删除了 hub,则这些服务器会与复制拓扑隔离。有关配置复制的详情,请参考:
  2. 在要删除的主机上,将数据库设置为只读模式以防止任何更新:
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h host-to-remove.example.com -x
    
    dn: cn=userRoot,cn=ldbm database,cn=plugins,cn=config
    changetype: modify
    replace: nsslapd-readonly
    nsslapd-readonly: on
  3. 在所有与主机有复制协议的供应商上,删除复制协议。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt \
         delete --suffix="dc=example,dc=com" agreement_name
  4. 在消费者或 hub 上,删除所有后缀的复制。例如:
    # dsconf -D "cn=Directory Manager" ldap://host-to-remove.example.com replication \
         disable --suffix="dc=example,dc=com"
    禁用复制可自动删除此服务器上此后缀的所有复制协议。

15.10.2. 从复制拓扑中删除叶

从复制拓扑中删除供应商比删除消费者或 hub 更为复杂。这是因为拓扑中的每个供应商都会存储有关其他供应商的信息,即使供应商变得不可用,它们也会保留这些信息。
目录服务器在一组称为副本更新向量(RUV)的元数据中维护复制拓扑的信息。RUV 包含有关供应商的信息,如其 ID、URL、本地更改状态号(CSN),以及第一个更改的 CSN。供应商和消费者存储 RUV 信息,它们使用它来控制复制更新。
要完全删除供应商,您必须删除其元数据以及配置条目。
  1. 如果要删除的副本也是拓扑中其他服务器的供应商,请配置其他供应商或 hubs 以将数据复制到这些服务器。如果这些服务器没有配置其他供应商,并且删除了供应商,则这些服务器会与复制拓扑隔离。有关配置复制的详情,请参考:
  2. 在要删除的供应商中:
    1. 将数据库设置为只读模式,以防止任何更新。详情请查看 第 2.2.2.1 节 “在只读模式下设置数据库”
    2. 等待拓扑中的所有其他服务器收到此供应商中的所有数据。要验证,请确保其他服务器上的 CSN 等于或大于要删除供应商的 CSN。例如:
      # ds-replcheck online -D "cn=Directory Manager" -w password -m ldap://replica-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 2019)
      ================================================================================
       
       
      Database RUV's
      =====================================================
       
      Supplier RUV:
        {replica 1 ldap://replica-to-remove.example.com:389} 5c7e8927000100010000 5c7e89a0000100010000
        {replicageneration} 5c7e8927000000010000
       
      Replica RUV:
        {replica 1 ldap://replica-to-remove.example.com:389} 5c7e8927000100010000 5c7e8927000400010000
        {replica 2 ldap://server.example.com:389}
        {replicageneration} 5c7e8927000000010000
    3. 显示副本 ID:
      # dsconf -D "cn=Directory Manager" ldap://replica-to-remove.example.com replication get --suffix="dc=example,dc=com" | grep -i "nsds5replicaid"
      nsDS5ReplicaId: 1
      在本例中,副本 ID 是 1。请记住此步骤的最后一步的副本 ID。
  3. 在所有具有与副本的复制协议的供应商上,删除复制协议。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-agmt \
         delete --suffix="dc=example,dc=com" agreement_name
  4. 在要删除的副本上,禁用所有后缀的复制。例如:
    # dsconf -D "cn=Directory Manager" ldap://replica-to-remove.example.com replication \
         disable --suffix="dc=example,dc=com"
    禁用复制可自动删除此服务器上此后缀的所有复制协议。
  5. 在拓扑中剩余的供应商中,清理副本 ID 的 RUV。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com repl-tasks \
         cleanallruv --suffix="dc=example,dc=com" --replica-id=1
    该命令需要指定此流程前面步骤中显示的副本 ID。