第 21 章 解决常见的复制问题
multi-supplier 复制使用最终不一致的复制模型。这意味着在不同服务器上可以更改相同的条目。当复制在两个服务器之间发生时,目录服务器需要解决冲突的更改。默认情况下,根据与每台服务器上的更改相关的时间戳,自动进行解析。最近的更改具有优先级。然而,在某些情况下,冲突需要人工干预才能达到解决方案。
21.1. 识别并解决命名冲突 复制链接链接已复制到粘贴板!
当多个供应商服务器收到创建具有相同可分名称(DN)的条目的请求时,每个服务器会使用此 DN 和不同的条目唯一标识符(条目 ID)创建条目。条目 ID 存储在 nsuniqueid
操作属性中。
例如,Server A
和 Server B
接收创建 uid=user_name,ou=people,dc=example,dc=com
用户条目的请求。因此,每个服务器都有自己的条目:
在 Server A 中,该条目有:
-
uid=user_name,ou=people,dc=example,dc=com
-
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b
-
在 Server B 中,该条目有:
-
uid=user_name,ou=people,dc=example,dc=com
-
nsuniqueid=643a461e-b61311e1-b23be826-4afeed5f
-
在复制期间,服务器 A
将新创建的条目 uid=user_name,ou=people,dc=example,dc=com
复制到 Server B
,而 Server B
将新创建的条目复制到 Server A
,并在每台服务器上出现命名冲突。通过比较更改序列号(CSN),每台服务器决定之前创建的条目。例如:之前创建 Server B
中的条目。
自动冲突解析过程会按照以下方式更改创建的最后一个条目( 服务器 A
上的条目):
-
将
nsuniqueid
值添加到非唯一的 DN 中。 -
将
nsds5replconflict
属性添加到操作导致冲突的描述。 -
添加
ldapsubentry
对象类。
现在两个服务器上都存在以下条目:
有效 条目带有:
-
uid=user_name,ou=people,dc=example,dc=com
-
nsuniqueid=643a461e-b61311e1-b23be826-4afeed5f
-
冲突 条目如下:
-
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com
-
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b
-
要手动解决命名冲突,请在每台服务器上执行以下步骤。
流程
列出冲突条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果存在冲突条目,则决定如何处理:
要只保留有效的条目(
uid=user_name,ou=people,dc=example,dc=com
)并删除冲突条目,请输入:dsconf <instance_name> repl-conflict delete nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
# dsconf <instance_name> repl-conflict delete nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要只保留冲突条目(
nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
)并删除有效条目,请输入:dsconf <instance_name> repl-conflict swap nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
# dsconf <instance_name> repl-conflict swap nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=People,dc=example,dc=com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要保留这两个条目,请指定一个新的相对可分辨名称(RDN)来重命名冲突条目:
dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict convert --new-rdn=uid=user_name_NEW nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com
# dsconf -D "cn=Directory Manager" ldap://server.example.com repl-conflict convert --new-rdn=uid=user_name_NEW nsuniqueid=a7f1758b-512211ec-b115e2e9-7dc2d46b+uid=user_name,ou=people,dc=example,dc=com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令将冲突条目重命名为
uid=user_name_NEW,ou=people,dc=example,dc=com
。
目录服务器复制对冲突条目执行的 LDAP 操作。通常,使用原始操作条目的 nsuniqueid
而不是使用操作 dn
来复制操作以条目为目标。但是,当出现冲突条目时,行为可能会有所不同。