复制是一种机制,通过此机制可将某个目录服务器中的目录内容自动复制到一个或多个其他目录服务器。所有写入操作都将自动映射到其他目录服务器。有关复制概念、复制方案以及如何在目录部署中规划复制的完整描述,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Deployment Planning Guide》。
在复制拓扑中,通常会将服务器上的某个后缀复制到服务器上的其他后缀,或者从其他后缀复制某个后缀。因此,可以交替使用副本、复制的后缀和复制的服务器等术语。
本章介绍通过命令行设置各种复制方案时所执行的任务,其中包含以下主题:
可以使用任意数量的主服务器配置复制部署。部署中不要求包含集线器或使用方。本章包含为集线器和使用方配置复制的过程,但这些过程是可选的。
开始配置复制之前,您需要清楚地了解在组织中部署复制的方式。您必须了解《Sun Java System Directory Server Enterprise Edition 6.1 Reference》中所述的复制概念。此外,您还必须使用《Sun Java System Directory Server Enterprise Edition 6.1 Deployment Planning Guide》中提供的设计准则仔细规划未来的复制配置。
配置和管理复制的最简便方法是使用目录服务控制中心 (Directory Service Control Center, DSCC)。使用 DSCC 可以自动配置复制。您可以选择设置复制拓扑所需的自动化级别,例如,是否要在复制配置期间初始化后缀。DSCC 还提供了错误检查功能。此外,DSCC 还提供复制拓扑的图形视图。
DSCC 联机帮助提供了使用 DSCC 设置复制的过程。
只有在无法使用 DSCC 配置复制时,才需使用本章提供的命令行过程。
配置复制的步骤摘要假定您要复制单个后缀。如果要复制多个后缀,则可以在每个服务器上并行配置这些后缀。换句话说,您可以重复每个步骤以便在多个后缀上配置复制。
本章的其余部分包含有关如何配置复制的详细说明。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
要配置任何复制拓扑,请执行以下过程中所述的常规步骤。
在包含专用使用方副本的所有服务器上执行以下操作:
为使用方复制后缀创建空后缀。
请参见为使用方副本创建后缀。
启用使用方复制后缀。
请参见启用使用方副本。
(可选的)配置高级使用方设置。
请参见执行高级使用方配置。
在包含集线器复制后缀的所有服务器上执行以下操作(如果适用):
为集线器复制后缀创建空后缀。
请参见为集线器副本创建后缀。
启用集线器复制后缀。
请参见启用集线器副本。
(可选的)配置高级集线器设置。
请参见在集线器副本上修改更改日志设置。
在包含主服务器复制后缀的所有服务器上执行以下操作:
为主服务器复制后缀创建后缀。
请参见为主副本创建后缀。
启用主服务器复制后缀。
请参见启用主副本。
(可选的)配置高级主服务器设置。
请参见修改主副本上的更改日志设置。
请确保在创建复制协议之前启用所有副本,以便您可以在创建复制协议之后立即初始化使用方副本。使用方初始化始终是设置复制的最后一步操作。
确保复制管理员配置已完成。
如果您计划使用默认管理员,请在所有服务器上设置默认复制管理员密码。请参见更改默认的复制管理员密码。
如果您计划使用非默认的复制管理员,请在所有服务器上定义其他的复制管理员条目。请参见使用非默认复制管理员。
在所有主副本上创建复制协议,如下所示:
请参见创建和更改复制协议。
(可选的)如果要使用部分复制,请立即进行配置。
请参见部分复制。
(可选的)如果要使用复制优先级,请立即进行配置。
请参见复制优先级。
配置集线器副本与其使用方之间的复制协议。
请参见创建和更改复制协议。
对于多主复制,请从包含数据原始副本的同一主副本初始化所有主服务器。
请参见初始化副本。
初始化集线器和使用方副本。
请参见初始化副本。
专用使用方是复制后缀的只读副本。专用使用方从绑定为复制管理员的服务器接收更新以进行更改。配置使用方服务器的过程包括准备空后缀以保存复制后缀,以及在该后缀上启用复制。可选的高级配置可包括设置引用、更改清除延迟和修改属性。
以下部分说明如何在服务器上配置一个专用使用方复制后缀。请在将要包含专用使用方复制后缀的每个服务器上重复所有过程。
如果不存在空后缀,请使用与预期主副本相同的 DN 在使用方上创建此后缀。
有关说明,请参见创建后缀。
如果该后缀存在且不为空,其内容会在从主服务器初始化复制后缀时丢失。
创建空后缀之后,您需要启用使用方复制后缀。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
启用使用方复制后缀。
$ dsconf enable-repl -h host -p port consumer suffix-DN |
例如:
$ dsconf enable-repl -h host1 -p 1389 consumer dc=example,dc=com |
如果要为使用方复制后缀配置高级功能,请立即执行此操作。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
如果要使用 SSL 进行引用,请设置安全引用。
$ dsconf set-suffix-prop -h host -p port suffix-DN referral-url:ldaps://servername:port |
例如:
$ dsconf set-suffix-prop -h host1 -p 1389 dc=example,dc=com \ referral-url:ldaps://server2:2389 |
复制机制会自动将使用方配置为返回复制拓扑中所有已知主服务器的引用。这些默认引用假定客户端将通过常规连接使用简单验证。如果允许客户端选择使用 SSL 安全连接绑定到主服务器,请添加 ldaps:// servername :port 格式的引用,该引用使用安全的端口号。请注意,如果将主服务器配置为只能使用安全连接,则默认情况下 URL 将指向安全端口。
如果已添加一个或多个 LDAP URL 作为引用,则可以强制使用方专门发送这些 LDAP URL 的引用,而不发送主副本的引用。例如,假定您希望客户端始终被引用到主服务器上的安全端口,而不是默认端口。可以创建这些安全端口的 LDAP URL 列表,并设置属性以使用这些引用。如果您要指定特定的主服务器或目录服务器代理来处理所有更新,还可以使用专用引用。
如果您要更改使用方的复制清除延迟,请使用以下命令:
$ dsconf set-suffix-prop -h host -p port suffix-DN repl-purge-delay:time |
例如,要将清除延迟设置为 2 天,请键入:
$ dsconf set-suffix-prop -h host1 -p 1389 edc=example,dc=com repl-purge-delay:2d |
使用方服务器会存储有关复制后缀内容更新的内部信息,而清除延迟参数可指定该服务器必须保留此信息的时间。清除延迟可部分确定使用方与主服务器之间的复制在中断多长时间后仍可正常恢复。它与提供方服务器更改日志的 MaxAge 参数相关。两个参数中时间较短的参数将确定两个服务器间的复制可以禁用或关闭的最长时间(在此时间过后复制仍可正常恢复)。在大多数情况下,默认值 7 天已经足够。
集线器副本既作为使用方又作为主服务器,可进一步将复制数据分配给更多的使用方。集线器副本接收来自提供方的复制更新,并将复制更新发送到使用方。这些副本不接受修改,但会返回对主服务器的引用。
配置集线器服务器的过程包括准备空后缀以保存复制后缀,以及在该后缀上启用复制。可选的高级配置可包括选择不同复制管理员、设置引用、设置清除延迟,以及修改更改日志参数。
以下部分说明如何配置一个集线器服务器。请在将要包含集线器复制后缀的每个服务器上重复所有过程。
如果不存在空后缀,请使用与预期主副本相同的 DN 在集线器服务器上创建此后缀。
有关说明,请参见创建后缀。
如果该后缀存在且不为空,其内容会在从主服务器初始化复制后缀时丢失。
如果您有集线器副本,请立即启用。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
启用集线器复制后缀。
$ dsconf enable-repl -h host -p port hub suffix-DN |
例如:
$ dsconf enable-repl -h host1 -p 1389 hub dc=example,dc=com |
对于高级集线器配置,您可能需要修改的参数与更改日志相关。作为提供方,集线器服务器需要更改日志。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
要修改集线器上的更改日志设置,请使用以下任一命令:
$ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-age:value |
$ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-entry-count:value |
主副本包含数据的主拷贝,并在将更新传播到所有其他副本之前集中所有修改。主服务器会记录所有更改、检查使用方的状态,并在必要时向使用方发送更新。在多主复制中,主副本还会从其他主服务器接收更新。
配置主服务器的过程包括定义包含主副本的后缀、启用主副本,以及在必要时为其配置高级复制。
以下部分说明如何配置一个主服务器。请在将要包含主服务器复制后缀的每个服务器上重复所有过程。
请在将要包含复制条目的主服务器上选择或创建后缀。
有关说明,请参见创建后缀。
为了确保多主配置和初始化正确,请只将数据装入一个主服务器。其他复制后缀上的所有数据都将被覆盖。
在主服务器上启用复制时,您必须指定复制 ID。复制 ID 用于区分更新语句的所有者,以及解决多主复制中可能发生的冲突。因此,复制 ID 对于此后缀的所有主副本必须是唯一的。复制 ID 一旦设置便不得更改。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
启用主服务器复制后缀。
$ dsconf enable-repl -h host -p port -d ReplicaID master suffix-DN |
其中 ReplicaID 是 1 到 65534 之间的整数。
例如,要创建副本 ID 为 1 的主服务器复制后缀,请使用以下命令:
$ dsconf enable-repl -h host1 -p 1389 -d 1 master dc=example,dc=com |
如果是高级主服务器配置,您可能需要修改更改日志设置。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
如果要修改主服务器上的更改日志设置,请使用以下任一命令:
$ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-age:value |
$ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-entry-count:value |
本部分介绍如何配置非默认的复制管理员,以及如何设置默认的复制管理员密码。
复制管理员是一个用户,提供方在发送复制更新时将使用此用户绑定到使用方服务器。包含接收更新的后缀的所有服务器都必须至少有一个复制管理员条目。
目录服务器有一个默认的复制管理员条目,您可以在每个服务器上使用此条目(特别是在简单复制方案中):cn=replication manager,cn=replication,cn=config。复制机制将自动使用此用户配置使用方副本,从而简化了副本部署。
如果您的复制方案比较复杂,则可能需要多个复制管理员,并且针对每个复制后缀需要使用不同的密码。可以使用一个或多个新的复制管理员替换现有的默认复制管理员。
请勿在服务器上使用复制管理员的 DN 和密码进行绑定或执行操作。复制管理员仅用于复制机制。任何其他用途可能都需要重新初始化副本。
请勿将目录管理员用作复制管理员。由于 cn=admin,cn=Administrators,cn=config 条目用于执行其他管理任务,因此也不得将此用户或管理员组中的任何其他用户用作复制管理员。
为每个使用方选择了复制管理员之后,请务必记住所选择或所创建的复制管理员 DN。稍后在提供方上创建与此使用方之间的复制协议时,需要使用此 DN 及其密码。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
在所有使用方(目标)复制后缀上,创建新的复制管理员和密码。
$ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn:"cn=new-replication-manager,cn=replication,cn=config" objectclass: top objectclass: person userpassword:password sn:new-replication-manager |
例如:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn:"cn=ReplicationManager3,cn=replication,cn=config" objectclass: top objectclass: person userpassword:secret sn:ReplicationManager3 |
在所有使用方(目标)复制后缀上,设置复制管理员绑定 DN。
$ dsconf set-suffix-prop -h host -p port suffix-DN \ repl-manager-bind-dn:"cn=new-replication-manager,cn=replication,cn=config" |
例如:
$ dsconf set-suffix-prop -h host1 -p 1389 dc=example,dc=com \ repl-manager-bind-dn:"cn=ReplicationManager3,cn=replication,cn=config" |
针对已在所有提供方(源)复制后缀上创建的所有复制协议,设置复制管理员绑定 DN。
创建用于设置新复制管理员密码的临时文件。
此文件只读取一次,并存储密码以供将来使用。
$ echo password > password-file |
设置执行更新时复制机制要使用的复制管理员绑定 DN 和密码。
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN host:port \ auth-bind-dn:"cn=new-replication-manager,cn=replication,cn=config" \ auth-pwd-file:password-file |
例如:
$ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \ auth-bind-dn:"cn=ReplicationManager3,cn=replication,cn=config" \ auth-pwd-file:pwd.txt |
删除临时密码文件。
$ rm password-file |
创建用于设置复制管理员密码的临时文件。
此文件只读取一次,并存储密码以供将来使用。
$ echo password > password-file |
在复制拓扑中的所有使用方(目标)服务器上,设置复制管理员绑定密码。
$ dsconf set-server-prop -h host -p port def-repl-manager-pwd-file:password-file |
例如:
$ dsconf set-server-prop -h host1 -p 1389 def-repl-manager-pwd-file:pwd.txt |
删除临时密码文件。
$ rm password-file |
复制协议是提供方上的一组参数,用于配置和控制将更新发送到给定使用方的方式。必须在向使用方发送更新的提供方复制后缀上创建复制协议。您必须在提供方上为每个要更新的使用方创建复制协议。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
如果使用 DSCC 创建新的复制协议,则可以选择复制现有复制协议中的部分或全部复制协议配置设置。
在主服务器上,为要复制到的每个使用方创建复制协议。
$ dsconf create-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port [consumer-host:consumer-port] |
例如:
$ dsconf create-repl-agmt -h host1 -p 1389 dc=example,dc=com host2:1389 |
要使用命令行列出现有的复制协议,请使用 dsconf list-repl-agmts 命令。
如果在复制运行时更改主服务器上的端口号,则不必重新初始化服务器。但是,指向旧地址 (host:old-port) 的旧复制协议将不再有用。如果希望复制继续像更改端口号之前一样运行,则必须使用新地址 (host:new-port) 创建一个新协议。
检查是否已正确创建复制协议。
$ dsconf show-repl-agmt-status -h host -p port suffix-DN consumer-host:consumer-port |
如果验证状态不是 OK,请运行 dsconf accord-repl-agmt 命令。
只有使用默认复制管理员时,才应使用命令 dsconf accord-repl-agmt。 如果您已创建新的复制管理员,请不要使用此命令,因为它将覆盖某些必需设置。
dsconf accord-repl-agmt 命令可确保提供方和目标服务器共享相同的复制验证设置。
$ dsconf accord-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port |
例如:
$ dsconf accord-repl-agmt -h host2 -p 1389 dc=example,dc=com host1:1389 |
此过程更改现有复制协议所指向的远程副本。现有协议的后缀 DN 和配置保持不变。
更改复制协议中远程副本的主机名和端口号。
$ dsconf change-repl-dest -h host -p port suffix-DN host:port new-host:new-port |
如果使用 -A protocol 选项运行此命令,则可以更改复制所使用的验证协议。
默认情况下,复制操作会将复制后缀中的所有条目复制到使用方副本中。使用部分复制功能,您可以选择要使用的后缀,以及要包括或排除的属性。部分复制是在复制协议中配置的,允许您为主服务器的每个使用方复制后缀定义属性集。您可以控制要分配的数据,并可更有效地使用复制带宽和使用方资源。
例如,如果要减小复制带宽,则可以选择不复制 photo、jpegPhoto 和 audio 之类的属性,因为这些属性通常具有较大的值。因此,在使用方上将无法使用这些属性。另外一种情况是,您可以选择只将 uid 和 userpassword 属性复制到专用于执行验证的使用方服务器。
部分复制无法用于 Directory Server 5.2 之前版本的产品中。配置部分复制协议时,主副本和使用方副本必须至少使用 Directory Server 5.2。
启用或修改部分属性需要您重新初始化使用方副本。因此,您需要在部署之前确定部分复制需求,并在首次初始化复制后缀之前定义属性集。
如果某些复杂功能(如 ACI、角色和 CoS)依赖于特定属性,则您在复制小型属性集时需要特别谨慎。此外,不复制 ACI、角色或 CoS 机制的说明符或过滤器中所提到的其他属性可能会对数据安全性造成威胁。不复制这些属性可能还会导致在搜索中返回不同的属性集。管理要排除的属性列表比管理要包含的属性列表更加安全,并且更不容易出现人为错误。
如果您所复制的属性集不允许所有复制条目遵循模式,则需要在使用方服务器中关闭模式检查。复制不符合模式的条目不会引发错误,因为复制机制将避开使用方上的模式检查。但是,使用方将包含不符合模式的条目,并且需要关闭模式检查,以便向客户端显示一致状态。
将在主副本与集线器和专用使用方之间的复制协议中配置部分复制。不支持在多主复制环境中的两个主副本之间配置部分复制。此外,如果多个主服务器与同一副本之间具有多个复制协议,则所有这些协议都必须复制相同的属性集。
要配置部分复制,必须先指定后缀,再确定要在该后缀上包含属性还是排除属性,然后选择要包含或排除的属性。如果选择在后缀上排除属性,将自动包含所有其他属性。同样,如果选择在后缀上包含某些属性,将自动排除所有其他属性。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
在位于源服务器的复制协议上配置部分复制。
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN consumer-host:consumer-port property:value |
其中 property 为 repl-fractional-exclude-attr 或 repl-fractional-include-attr。
例如,如果要将部分协议配置为不在 dc=example,dc=com 后缀上复制 JPEG 以及 TIFF 照片,请使用以下命令:
$ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 repl-fractional-exclude-attr:jpegPhoto repl-fractional-exclude-attr:tiffPhoto |
要在现有的应排除属性列表中添加属性,请使用以下命令:
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN consumer-host:consumer-port repl-fractional-exclude-attr+:attribute |
指定复制优先级为可选操作。可以创建复制规则,以指定使用高优先级复制某些更改(如更新用户密码)。复制规则中指定的任何更改都将以高优先级进行复制,而所有其他更改都将以普通优先级进行复制。
只需在主服务器上创建复制优先级规则。不必为集线器和使用方进行配置。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
要在主服务器上创建新的复制优先级规则,请使用以下命令:
$ dsconf create-repl-priority -h host -p port suffix-DN priority-name property:value |
可以使用以下一个或多个属性设置复制优先级:
操作类型,op-type
绑定 DN,bind-dn
基 DN,base-dn
属性类型,attr
priority-name 是用户定义的属性。
例如,要创建复制规则以指定使用高优先级复制用户密码更改,请使用以下命令:
$ dsconf create-repl-priority -h host2 -p 1389 dc=example,dc=com pw-rule \ attr:userPassword |
要显示当前的复制规则,请使用 dsconf list-repl-priorities -v 命令。使用 -v 选项时,此命令将显示与按优先级排序的复制规则相关的其他信息。
$ dsconf list-repl-priorities -h host2 -p 1389 -v |
有关详细信息,请参见 dsconf(1M) 手册页。
创建复制协议并已配置两个副本之后,必须先初始化使用方复制后缀,然后才能开始复制。在初始化期间,您实际将提供方复制后缀中的数据复制到使用方复制后缀。
此外,某些错误条件或配置更改也需要重新初始化副本。例如,如果由于任何原因从备份恢复了单个主服务器复制后缀中的数据,则需要对它所更新的所有副本进行重新初始化。
进行重新初始化时,将在使用方上删除复制后缀的内容,并将其替换为主服务器上的后缀内容。这可确保副本保持同步,并且可以恢复复制更新。本部分介绍的所有初始化方法都会自动重新生成使用方副本的索引,以便使用方能以最佳方式响应客户端读取请求。
使用多主复制时,如果使用方已经由拓扑中的其他主服务器进行了更新,则可能不需要进行重新初始化。
可以使用现有的复制协议从远程服务器初始化后缀。请尽可能使用此方法进行初始化,因为它要比其他方法简单。仅当存在大量数据使得导入操作耗时过长时,才应使用其他方法。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用 DSCC 以联机方式对复制后缀进行初始化是初始化或重新初始化使用方的简便方法。但是,如果要初始化大量条目,则此过程可能会非常耗时。在这种情况下,使用命令行以脱机方式初始化使用方可能会更加有效。
初始化副本。
$ dsconf init-repl-dest -h host -p port suffix-DN destination-host:destination-port [destination-host:destination-port] |
其中 destination-host:destination-port 是要从远程服务器进行初始化的目标服务器的主机和端口。
(可选的)针对每个协议检查后缀是否已初始化。
$ dsconf show-repl-agmt-status -h host -p port suffix-DN destination-host:destination-port |
此过程介绍从 LDIF 文件初始化复制后缀时所使用的一般步骤。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用 DSCC 以联机方式对复制后缀进行初始化是初始化或重新初始化使用方的简便方法。但是,如果要初始化大量条目,则此过程可能会非常耗时。在这种情况下,使用命令行以脱机方式初始化使用方可能会更加有效。
确保已设置了复制协议。
必须在初始化副本之前执行此操作。
将主服务器复制后缀中的后缀数据的原始副本导出到 LDIF 文件。
请参见将复制后缀导出到 LDIF。
在多主复制环境中,可以使用从原始主服务器导出的 LDIF 文件来初始化其他主服务器和所有使用方。在级联复制环境中,可以使用相同的文件来初始化集线器副本及其使用方。
在任何情况下,都必须以 LDIF 文件(从已配置的主副本中导出)开始。无法使用任意的 LDIF 文件初始化所有副本,因为它不包含复制元数据。
如果要初始化部分副本,请过滤此文件以便只保留复制的属性,然后将该文件传送到所有使用方服务器。
请参见为部分复制过滤 LDIF 文件。
初始化副本。
执行以下任一操作:
要在已脱机(停止)的服务器上进行快速初始化,请使用 dsadm import 命令。
$ dsadm import instance-path LDIF_file suffix-DN |
要从 LDIF 文件以联机方式初始化副本,请使用 dsconf import 命令。
$ dsconf import -h host -p port LDIF_file suffix-DN |
使用 dsconf import 比使用 dsadm import 要慢,但不必在执行导入操作时停止服务器。
有关初始化后缀的更多详细信息以及示例,请参见初始化后缀。有关命令用法的详细信息,请参见 dsadm(1M) 和 dsconf(1M)。
(可选的)针对每个协议检查后缀是否已初始化。
$ dsconf show-repl-agmt-status -h host -p port suffix-DN destination-host:destination-port |
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
要以脱机方式导出,请键入:
$ dsadm export instance-path suffix-DN LDIF_file |
要以联机方式导出,请键入:
$ dsconf export -h host -p port suffix-DN LDIF_file |
以下示例将整个 dc=example,dc=com 复制后缀及复制信息导出到 example_replica_export.ldif 文件中:
$ dsconf export -h host2 -p 1389 dc=example,dc=com \ /local/ds/ldif/example_export_replica.ldif |
有关详细信息,请参见备份到 LDIF 以及 dsadm(1M) 和 dsconf(1M) 手册页。
使用 DSCC 时,对配置了部分复制的副本进行初始化的过程是不可视的。在初始化期间只会将选定属性发送给使用方。
如果已经配置了部分复制,应该在将导出的 LDIF 文件复制到使用方服务器之前过滤出所有未使用的属性。为此,目录服务器提供了 fildif 工具。此工具将过滤给定的 LDIF 文件,以便只保留复制协议中定义的属性集所允许的属性。
此工具将读取服务器配置以确定属性集定义。要读取配置文件,必须以超级用户身份或拥有此过程和文件(由 nsslapd-localuser 属性指定)的用户身份运行 fildif 工具。例如,以下命令将过滤前面示例中从 dc=example,dc=com 后缀导出的文件:
$ fildif -i /local/ds1/ldif/example_master.ldif \ -o /local/ds1/ldif/filtered.ldif -b "cn=host2.example.com:1389, \ cn=replica,cn=\\"dc=example,dc=com\\",cn=mapping tree,cn=config" -p /local/ds1 |
有关 fildif 命令的位置,请参见命令位置。
-i 和 -o 选项分别是输入和输出文件。-b 选项是定义部分复制的复制协议的 DN。可使用以下命令查找此 DN:
$ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \ -b "cn=config" "(&(objectclass=nsds5replicationagreement) (nsDS5ReplicaPort=replica-port) \ (nsDS5ReplicaHost=replica-host))" dn |
例如:
$ ldapsearch -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \ -b "cn=config" "(&(objectclass=nsds5replicationagreement) \ (nsDS5ReplicaPort=2090)(nsDS5ReplicaHost=host2))" dn Enter bind password: version: 1 dn: cn=host2:1389,cn=replica,cn=dc\=example\,dc\=com,cn=mapping tree,cn=config |
有关 fildif 工具的完整命令行语法,请参见 fildif(1) 手册页。
接下来,可以使用由 fildif 生成的 filtered.ldif 文件初始化此复制协议中的使用方。将此文件传送到使用方服务器并进行导入,如从 LDIF 文件导入数据中所述。
二进制副本允许您使用一个服务器中的二进制备份文件克隆整个服务器,以便将相同的目录内容恢复到另一个服务器上。使用二进制副本,您可以通过主服务器或集线器服务器的二进制副本初始化或重新初始化任何服务器,或者通过其他使用方服务器的二进制副本初始化或重新初始化使用方。
此高级过程将与目录服务器的数据库文件进行交互,因此只有经验丰富的管理员才应该使用。
由于对此功能进行了某些限制,因此对于包含很大数据库文件的副本(例如,包含数百万条目的副本),此功能非常实用和省时。
由于二进制副本将一台计算机上的数据库文件移动到另一台计算机上,因此该机制应遵循以下严格限制:
两台计算机必须运行相同的操作系统,包括所有服务包 (service pack) 或修补程序。
两台计算机必须共享相同的处理器体系结构。例如,可以在两台 UltraSPARC® T1 处理器之间执行二进制副本,但无法在一台 UltraSPARC T1 处理器和一台 AMD Opteron 处理器之间执行二进制副本。
两台计算机必须都是大端字节序或都是小端字节序。
两台计算机必须以相同方式映射内存。例如,可以在两个 64 位系统上的服务器实例之间执行二进制副本,但无法在 32 位系统上的一个服务器实例和 64 位系统上的另一个服务器实例之间执行二进制副本。
两台计算机必须安装相同版本的目录服务器,包括二进制格式(32 位或 64 位)、服务包 (service pack) 和修补程序级别。
两个服务器必须具有划分为相同后缀的相同目录树。所有后缀的数据库文件都必须一起复制。无法复制单个后缀。
每个后缀必须在两个服务器上配置相同的索引,包括 VLV(Virtual List View,虚拟列表视图)索引。这些后缀的数据库必须具有相同的名称。
每个服务器都必须将相同的后缀配置为副本。
如果配置部分复制,则必须在所有服务器上进行完全相同的配置。
不得在任一服务器上使用属性加密。
如果启用属性值唯一性插件,则它在两个服务器上必须具有相同的配置,而且必须在新副本上重新配置该插件,如以下过程所述。
以下过程介绍执行二进制副本的其他方法:不需要停止服务器的二进制副本,以及使用最少磁盘空间的二进制副本。
本部分介绍如何创建用于初始化服务器的二进制副本,以及如何创建使用最少磁盘空间的二进制副本。
可以使用此过程执行用于初始化复制服务器的二进制副本 ,因为它使用标准备份功能创建服务器数据库文件的副本。执行标准备份可确保所有数据库文件处于一致状态,而无需停止服务器。
此过程具有某些限制。由于备份和恢复操作将在同一台计算机上创建数据库文件的副本,因此在每台计算机上,这些文件所需的磁盘空间量都会加倍。此外,如果目录中包含数千兆字节的数据,则对这些文件执行实际的复制操作可能会耗费大量时间。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。
在新复制后缀的目标计算机上安装目录服务器,创建新的服务器实例(如有必要),然后按照将二进制副本用于复制的限制中所述配置此服务器。
在包含此复制后缀的复制拓扑中创建所有复制协议。
请在此副本中包含来自提供方的协议。如果此副本不是专用使用方,请在其使用方中包含来自此副本的协议。请参见创建和更改复制协议。
选择经过完整配置和初始化的副本,此副本的类型与您要初始化的类型相同(主服务器、集线器或使用方),然后按照二进制备份中所述在此副本上执行标准备份。
将备份目录中的文件复制或传送到目标计算机上的目录中,例如,可以使用 ftp 命令完成此操作。
如果您在多主复制方案中对新的主服务器进行了初始化,请执行在多主方案中恢复主服务器中的过程。
此过程将使用较少的磁盘空间和时间,因为它不创建数据库文件的备份副本。但是,它需要停止要克隆的服务器,以确保数据库文件处于一致状态。
不得使用此过程对已经加入多主复制方案的主服务器进行重新初始化。它只能用于重新初始化使用方服务器或初始化新的主服务器。要重新初始化现有的主副本,请使用联机初始化、导入 LDIF 文件或执行创建用于初始化服务器的二进制副本中的过程。
对于此过程的某些部分,可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。此过程的其他部分只能使用命令行完成。
在新复制后缀的目标计算机上安装目录服务器,创建新的服务器实例(如有必要),然后按照将二进制副本用于复制的限制中所述配置此服务器。
在包含此副本的复制拓扑中创建所有复制协议。
请在此副本中包含来自提供方的协议。如果此副本不是专用使用方,请在其使用方中包含来自此副本的协议。请参见创建和更改复制协议。
停止将要初始化或重新初始化的目标服务器,如启动、停止和重新启动目录服务器实例中所述。
选择经过完整配置和初始化的副本,此副本的类型与您要初始化的类型相同(主服务器、集线器或使用方),同时停止此服务器。
如果要克隆多主配置中的主副本,请确保此主副本在停止之前处于最新状态,即包含来自其他主服务器的所有最新更改。
从目标服务器中删除所有数据库文件,包括事务日志、更改日志和区域文件 (__db.xxx files )。
除非这些文件已被重新定位,否则数据库文件和事务日志位于 instance-path/db 目录中。
将源副本计算机中的所有数据库文件(包括事务日志和更改日志)复制或传送到目标计算机,例如,可以使用 ftp 命令完成此操作。
除非这些文件已被重新定位,否则数据库文件和事务日志位于 instance-path/db 目录中。
如果要初始化主服务器或集线器副本,还必须复制更改日志中的所有文件,默认情况下,更改日志位于 instance-path /changelog 中。
重新启动源服务器和目标服务器。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
如果还有多主复制,请确保一个主服务器具有要复制的完整数据集,然后使用此主服务器初始化每个其他主服务器上的副本。
从一级集线器副本的主副本初始化一级集线器副本上的副本。
如果有多个级别的集线器,请从之前初始化的集线器级别来初始化每个级别。
在最后级别的集线器副本上,初始化专用使用方上的副本。
索引不会自动从一个服务器实例复制到另一个服务器实例。要为保存复制后缀的所有服务器实例编制属性索引,请执行以下任一操作。
在 DSCC 中将保存复制后缀的所有服务器实例作为服务器组进行管理。将索引添加到组中的某个服务器上,然后使用“复制服务器配置”操作将索引设置复制到组中的其他服务器。
有关 DSCC 的详细信息,请参见目录服务控制中心界面。
使用 dsconf 命令管理每个服务器实例上的索引,如第 12 章,目录服务器索引中所述。
使用二进制副本初始化后缀,如使用二制进副本初始化复制后缀中所述。
如果您有包含大量条目的目录,并且要添加大量条目,请不要使用 ldapmodify -a,因为这样做会消耗大量时间。通过在 dsconf import 命令中使用用于在复制拓扑中添加条目的选项,可以逐渐添加新条目。导出这些条目时,将生成包含附加内容和复制元数据的 LDIF 文件。然后,可以将生成的此 LDIF 文件导入其他副本中。生成的 LDIF 文件可确保复制在您要添加数据的副本之间始终保持同步。
此过程将生成大型 LDIF 文件。在运行第一个 dsconf import 命令之前,请确保具有足够的磁盘空间用于生成的 LDIF 文件。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
可以使用此过程分以多次传递的方式初始化包含大量条目的服务器。但是,如果其中一次导入失败,则可能会丢失整个数据库。请务必在每次导入之前备份数据。
在任何主副本上导入条目。
$ dsconf import -h host -p port -K generated-LDIF-file suffix-DN |
-K 选项确保不会删除现有数据。它还将生成 generated-LDIF-file 文件,此文件包含复制过程所需的新条目和信息。
在所有其他副本上,导入上一步生成的文件。
$ dsconf import -h host -p port \ -K -f incremental-output=no generated-LDIF-file suffix-DN |
选项 -f incremental-output=no 指定将不会生成其他 LDIF 文件。此过程只需要一个生成的 LDIF 文件。
如果要将引用完整性插件用于复制,则必须在所有主服务器上启用此插件。不必在集线器服务器或使用方服务器上启用此插件。
必须在包含主副本的所有服务器上启用此插件。
必须在每个主服务器上使用相同配置启用此插件。
在只包含集线器或使用方副本的服务器上启用此插件不起作用。
有关配置引用完整性插件的信息,请参见配置引用完整性插件。
可以对复制中涉及的目录服务器进行配置,以便所有复制操作都通过 SSL 连接执行。
此过程显示的示例命令用于在包含两个主服务器的复制拓扑上设置复制。
此示例显示了一个简单复制配置(使用自签名证书)。在生产环境中设置通过 SSL 执行的复制时,如果改用由证书颁发机构颁发的可信证书将会更加安全。
如果提供方服务器证书是仅适用于服务器的 SSL 证书(无法在 SSL 握手时作为客户端),将无法通过 SSL 执行复制。
虽然通过 SSL 执行的复制是安全的,仍会使用简单绑定和密码对复制管理员进行验证。可以使用基于客户端的验证来完全保护复制,但这需要更复杂的设置。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
创建并启动新的服务器。
$ dsadm create -p 1389 -P 1636 /local/ds1 $ dsadm create -p 2389 -P 2636 /local/ds2 $ dsadm start /local/ds1 $ dsadm start /local/ds2 |
在所有服务器上创建空后缀。
$ dsconf create-suffix -e -i -p 1389 dc=example,dc=com $ dsconf create-suffix -e -i -p 2389 dc=example,dc=com |
在所有服务器上设置多主密码文件。
$ dsconf set-server-prop -e -i -h example1.server -p 1389 \ def-repl-manager-pwd-file:/local/ds1/replmanrpwd1.txt $ dsconf set-server-prop -e -i -h example2.server -p 2389 \ def-repl-manager-pwd-file:/local/ds1/replmanrpwd2.txt |
在所有服务器上启用复制。
$ dsconf enable-repl -h example1.server -p 1389 -e -i -d 1 master dc=example,dc=com $ dsconf enable-repl -h example2.server -p 2389 -e -i -d 2 master dc=example,dc=com |
在所有服务器上查看现有的默认证书。
$ dsadm show-cert -F der -o certfile1 /local/ds1 defaultCert $ dsadm show-cert -F der -o certfile2 /local/ds2 defaultCert |
在所有服务器上,添加来自所有其他服务器的 CA 可信证书。
$ dsadm add-cert --ca /local/ds1 "ds2 Repl Manager Cert" certfile2 $ dsadm add-cert --ca /local/ds2 "ds1 Repl Manager Cert" certfile1 |
在所有主服务器和集线器(源)服务器上,创建与所有使用方(目标)服务器之间的复制协议。
请注意,这些复制协议使用安全 LDAP 端口。
$ dsconf create-repl-agmt -h example1.server -p 1389 -e -i \ --auth-protocol "ssl-simple" dc=example,dc=com example2.server:2636 $ dsconf create-repl-agmt -h example2.server -p 2389 -e -i \ --auth-protocol "ssl-simple" dc=example,dc=com example1.server:1636 |
针对所有复制协议,在复制协议中将验证密码文件配置为使用方(目标)服务器的复制管理员密码文件。
$ dsconf set-repl-agmt-prop -h example1.server -p 1389 -e -i \ dc=example,dc=com example2.server:2636 auth-pwd-file:/local/ds1/replmanrpwd2.txt $ dsconf set-repl-agmt-prop -h example2.server -p 2389 -e -i \ dc=example,dc=com example1.server:1636 auth-pwd-file:/local/ds1/replmanrpwd1.txt |
初始化这些后缀之后,提供方将通过 SSL 向使用方发送所有复制更新消息,并将使用证书(如果已选择该选项)。如果使用为 SSL 配置的协议通过 DSCC 执行使用方初始化,则使用方初始化也将使用安全连接。
在所有服务器上,重新启动服务器以使配置更改生效。
$ dsadm restart /local/ds1 $ dsadm restart /local/ds2 |
在其中一个主服务器上初始化后缀。
$ dsconf import -h example1.server -p 1389 -e -i /tmp/Example.ldif dc=example,dc=com |
在尚未初始化的所有服务器上,使用复制协议初始化这些服务器。
$ dsconf init-repl-dest -e -i -h example1.server -p 1389 \ dc=example,dc=com example1.server:2636 |
目录服务器允许您执行所有形式的复制,包括通过广域网 (Wide Area Network, WAN) 连接的计算机之间的多主复制。此复制允许提供方服务器在初始化和更新使用方时,在具有较高时延和较低带宽的网络上以最佳方式使用带宽。
对通过 WAN 复制的复制拓扑进行部署和故障排除时,必须检查网络速度、时延和数据包丢失情况。上述任一方面的网络问题都可能会导致复制延迟。
此外,复制数据传输速率将始终低于可用物理介质所允许的速率(在带宽方面)。如果副本之间的更新量无法实际符合可用带宽,则调整操作将无法阻止各个副本在较重的更新负载下产生差异。复制延迟和更新性能由许多因素决定,包括但不限于以下因素:修改率、条目大小、服务器硬件、错误率、平均时延和平均带宽。
如果您的环境中存在复制方面的问题,请与 Sun 服务提供商联系。
默认情况下,复制机制的内部参数针对 WAN 进行了优化。但是,如果由于以上因素导致您的复制速度很慢,则可能需要根据经验调整窗口大小和组大小参数。您还可以安排复制以避开高峰网络时间,从而改善整个网络的使用情况。最后,目录服务器还支持复制数据压缩,以优化带宽使用。
窗口和组网络参数确定了复制机制如何对条目进行分组,以便通过网络更有效地发送这些条目。这些参数会影响提供方和使用方交换复制更新消息和确认的方式。可以在每个复制协议中配置这些参数,以便您根据每个使用方的特定网络条件调整复制性能。
请监视您所做的任何修改的效果,并相应地调整这些参数。有关说明,请参见获取复制状态。您不必中断复制来修改窗口大小和组大小参数。
窗口大小(默认值为 10)表示在无需使用方立即确认的情况下可以发送的更新消息的最大数目。
与发送每条消息后等待确认相比,快速连续地发送多个消息效率更高。使用适当的窗口大小,可以缩短副本等待复制更新或确认到达所花费的时间。
如果使用方副本落后于提供方,请将窗口大小调整为比默认值更大的值(如 100),并在进一步调整之前再次检查复制性能。当复制更新速率很高而使得更新之间的时间较短时,甚至由局域网 (Local Area Network, LAN) 连接的副本都能从较大的窗口大小中获益。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
修改窗口大小。
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN consumer-host:consumer-port transport-window-size:value |
例如:
$ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \ transport-window-size:20 |
组大小(默认值为 1)表示可以绑到单个更新消息中的数据修改的最大数目。如果网络连接似乎要妨碍复制,请将组大小调整为比默认值更大的值(如 10),然后重新检查复制性能。
增加组大小时,请确保满足以下条件:
将窗口大小设置为远大于组大小。
窗口大小除以组大小所得到的值远大于使用方 cn=config 下的 nsslapd-maxThreadsPerConn 值(通常为后者的两倍)。
将组大小设置为大于 1 时,提供方在将更新发送给使用方之前不会等待填充组。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
修改组大小。
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN \ consumer-host:consumer-port transport-group-size:value |
例如:
$ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \ transport-group-size:10 |
如果没有必要立即实现副本之间的同步,则可以在网络使用率较低的时段安排复制。当可用的网络资源较多时,完成数据复制的过程应明显加快。
可以将复制安排在一天中的特定时间(基于每天或每周)开始和结束。可以通过每个使用方的复制协议独立为每个使用方执行此操作。新的计划将立即生效,这会导致相应使用方的下一个数据复制出现延迟,直到此计划允许的第一个复制完成为止。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
修改复制计划。
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN \ host:port repl-schedule:value |
例如,如果要将复制设置为在每天凌晨 2:00 到 4:00 之间发生,请键入:
$ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \ repl-schedule:"0200-0400 0123456" |
其中 0123456 表示一周内的各天,0 表示星期日,1 表示星期一,依此类推。
要减小复制所使用的带宽,可以将复制配置为在更新使用方时压缩所发送的数据。复制机制使用 Zlib 压缩库。提供方和使用方都必须在 Solaris 或 Linux 平台上运行才能启用压缩。
应该根据经验测试并选择压缩级别,以便在 WAN 环境中使用预期复制时获得最佳结果。请勿在网络带宽很高的 LAN 中设置此参数,因为压缩和解压缩计算会降低复制速度。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
在主服务器中的复制协议条目上配置复制压缩。
$ dsconf set-repl-agmt-prop -h host -p port suffix-DN \ consumer-host:consumer-port transport-compression:level |
其中 level 可以为 high、medium、low 或 none。
例如,要在将复制更新发送到 host1:1389 上的使用方时使用最快速的压缩,请键入:
$ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \ transport-compression:high |
有关设置压缩级别的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Reference》。
本部分从以下几个方面介绍如何管理现有复制拓扑:
可以编辑复制协议以更改用于绑定到使用方服务器的复制管理员标识。为了避免复制中断,应该在使用方上定义新的复制管理员条目或证书条目,然后再修改复制协议。但是,如果复制由于绑定失败而中断,复制机制将在您更正错误时自动发送所有必要的更新,此过程将在复制恢复设置的限制下完成。有关过程,请参见使用非默认复制管理员。
可以禁用、启用或删除复制协议。
禁用复制协议时,主服务器将停止向指定的使用方发送更新。到该服务器的复制将会停止,但协议中的所有设置将被保留。您可以稍后通过重新启用此协议来恢复复制。有关在复制中断后恢复复制机制的信息,请参见启用复制协议。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
禁用复制协议。
$ dsconf disable-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port |
例如:
$ dsconf disable-repl-agmt -h host2 -p 1389 dc=example,dc=com host1:1389 |
启用复制协议将恢复与指定使用方之间的复制。但是,如果复制中断的时间已超过复制恢复设置所允许的时间,并且使用方未被其他提供方更新,则必须对该使用方进行重新初始化。复制恢复设置包括此提供方更改日志的最大大小和最大存留期,以及使用方的清除延迟(请参见执行高级使用方配置)。
如果中断时间很短并且复制可以恢复,则主服务器将在重新启用协议时自动更新使用方。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
启用复制协议。
$ dsconf -h host -p port enable-repl-agmt suffix-DN consumer-host:consumer-port |
例如:
$ dsconf -h host2 -p 1389 enable-repl-agmt dc=example,dc=com host1:1389 |
删除复制协议将停止到相应使用方的复制,并将删除有关此协议的所有配置信息。如果日后要恢复复制,请禁用此协议,如禁用复制协议。中所述。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
删除复制协议。
$ dsconf delete-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port |
例如:
$ dsconf delete-repl-agmt -h host2 -p 1389 dc=example,dc=com host1:1389 |
对副本进行升级或降级将更改该副本在复制拓扑中的角色。专用使用方可升级为集线器,而集线器可升级为主服务器。主服务器可降级为集线器,而集线器也可降级为专用使用方。但是,主服务器不能直接降级为使用方,同样,使用方也不能直接升级为主服务器。
多主复制机制中所允许的升级和降级功能使得拓扑非常灵活。以前由使用方副本提供服务的站点可能会增大,并且需要具有多个副本的集线器来处理负载。如果负载包括许多副本内容修改,则集线器可以变为主服务器以允许更快速的本地更改,然后可以将这些更改复制到位于其他站点的其他主服务器中。
对副本进行升级或降级时,请注意以下几点:
如果升级使用方,使用方将变为集线器。如果升级集线器,集线器将变为主服务器。无法直接将服务器从使用方升级为主服务器。必须首先将使用方升级为集线器,然后再将集线器升级为主服务器。同样,将主服务器降级为使用方时,必须先将主服务器降级为集线器,然后再将集线器降级为使用方。
将主服务器降级为集线器时,副本将变为只读副本,并被配置为将引用发送给其余的主服务器。新的集线器将保留其所有使用方,无论这些使用方是集线器还是专用使用方。
将单个主服务器降级为集线器将创建无主副本的拓扑。假定您要定义新的主服务器,目录服务器将允许您执行此操作。但是,最好将新的主服务器添加为多主服务器并允许对其进行初始化,然后再对其他主服务器进行降级。
将集线器降级为使用方之前,必须禁用或删除出入集线器的所有复制协议。如果不执行此操作,则降级操作将会失败,并出现以下错误:LDAP_OPERATIONS_ERROR “无法在启用某些协议的情况下将集线器降级为只读副本”。
如果集线器的使用方未被其他集线器或主服务器更新,将不再对它们进行更新。您应该在其余的集线器或主服务器上创建新协议,以便更新这些使用方。
将使用方升级为集线器时,将启用其更改日志,并且您可以定义与这些使用方之间的新协议。
将集线器升级为主服务器时,副本将接受修改请求,并且您可以定义与其他主服务器、集线器或专用使用方之间的新协议。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用以下任一命令对副本进行升级或降级:
$ dsconf promote-repl -h host -p port role suffix-DN |
$ dsconf demote-repl -h host -p port role suffix-DN |
其中 role 为 master、hub 或 consumer。
禁用复制后缀会将该后缀从复制拓扑中删除。根据该后缀的角色(主服务器、集线器或使用方),它将不再接受更新或发送更新。禁用提供方服务器上的后缀将删除所有复制协议,如果再次启用该副本,则必须重新创建这些协议。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
禁用复制后缀。
$ dsconf disable-repl -h host -p port suffix-DN |
例如:
$ dsconf disable-repl -h host2 -p 1389 dc=example,dc=com |
停止复制所使用的目录服务器以进行常规维护之后,当服务器重新处于联机状态时,必须确保立即通过复制对该服务器进行更新。对于多主环境中的主服务器,目录信息需要由多主服务器集中的其他主服务器进行更新。在其他情况下,当集线器服务器或专用使用方服务器进入脱机状态以进行维护之后,如果这些服务器重新处于联机状态,则需要通过主服务器对其进行更新。
本部分介绍复制重试算法,并说明如何在不等待下次重试的情况下强制执行复制更新。
只有在已经设置复制并且已经初始化使用方时,才能使用本部分介绍的过程。
如果源副本未成功复制到目标,它将定期以递增的时间间隔进行重试。重试时间间隔取决于错误类型。
请注意,即使您已将复制协议配置为始终保持源副本和目标副本同步,但这还不足以立即更新脱机时间已超过五分钟的副本。
如果复制已停止,您可以对目标后缀强制执行复制更新。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
在源服务器上,重新启动对目标服务器的复制更新。
$ dsconf update-repl-dest-now -h host -p port suffix-DN destination-host:destination-port |
例如:
$ dsconf update-repl-dest-now -h host2 -p 1389 dc=example,dc=com host1:1389 |
本部分提供有关如何使用 Directory Server 6.1 之前的版本配置复制的信息。
Directory Server 5.1、5.2 和 6.1 在复制配置方面是互相兼容的,但以下情况除外:
Directory Server 6.1 之前的版本不支持复制优先级。如果在 6.1 主副本上配置复制优先级,则此复制优先级将被传送到运行 Directory Server 6.1 的使用方,但不会传送到任何运行以前版本的目录服务器的使用方。
包含 Directory Server 5.1 或 5.2 主服务器的复制拓扑不允许使用任意数量的主服务器。尽管 Directory Server 6.1 允许在复制拓扑中使用任意数量的主服务器,但如果您的复制拓扑中包含任何 Directory Server 5.2 主服务器,则此数量将被限制为四个。DirectoryServer 5.1 不支持多主复制。
追溯更改日志由 LDAP 客户端使用,用于确定目录服务器数据的更改历史记录。追溯更改日志与目录服务器更改日志存储在不同的数据库中,位于 cn=changelog 后缀下。
可以在单独的服务上或复制拓扑中的每个服务器上启用追溯更改日志。在服务器上启用追溯更改日志时,默认情况下将记录该服务器上所有后缀的更新。可以将追溯更改日志配置为只记录指定后缀的更新。
有关在复制拓扑中使用追溯更改日志以及使用追溯更改日志的限制的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.1 Reference》中的“Replication and the Retro Change Log Plug-In”。
有关追溯更改日志中的条目属性的信息,请参见 changeLogEntry(5dsoc) 手册页。
有关修改追溯更改日志的详细信息,请参见 dsconf(1M) 手册页。
本部分说明使用追溯更改日志的各种方法。
要使用追溯更改日志,必须先启用该日志。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
修改追溯更改日志配置条目:
$ dsconf set-server-prop -h host -p port retro-cl-enabled:on |
重新启动服务器。
有关信息,请参见启动、停止和重新启动目录服务器实例。
在服务器上启用追溯更改日志时,默认情况下将记录该服务器上所有后缀的更新。此过程介绍如何将追溯更改日志配置为只记录指定后缀的更新。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
修改追溯更改日志配置条目:
$ dsconf set-server-prop -h host -p port retro-cl-suffix-dn:suffix-DN |
例如,如果只记录 cn=Contractors,dc=example,dc=com 后缀和 ou=People,dc=example,dc=com 后缀上的更改,请使用以下命令:
$ dsconf set-server-prop -h host2 -p 1389 \ retro-cl-suffix-dn:"cn=Contractors,dc=example,dc=com" \ retro-cl-suffix-dn:"ou=People,dc=example,dc=com" |
要在指定后缀的现有列表中添加后缀, 请使用以下命令:
$ dsconf set-server-prop -h host -p port retro-cl-suffix-dn+:suffix-DN |
重新启动服务器。
有关信息,请参见启动、停止和重新启动目录服务器实例。
此过程介绍如何将追溯更改日志配置为在删除条目时记录该条目的指定属性。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
指定必须记录的属性:
$ dsconf set-server-prop -h host -p port retro-cl-deleted-entry-attr: \ attribute1 attribute2 |
例如,要将追溯更改日志设置为记录已删除条目的 UID 属性,请使用以下命令:
$ dsconf set-server-prop -h host -p port retro-cl-deleted-entry-attr:uid |
要在指定属性的现有列表中添加属性, 请使用以下命令:
$ dsconf set-server-prop -h host -p port retro-cl-deleted-entry-attr+:attribute |
重新启动服务器。
有关信息,请参见启动、停止和重新启动目录服务器实例。
在指定的一段时间过后,可以自动删除追溯更改日志中的条目。要配置一段时间,使条目在此时间段后自动删除,请确保已启用追溯更改日志,然后设置 cn=Retro Changelog Plugin, cn=plugins, cn=config 条目中的 nsslapd-changelogmaxage 配置属性。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
检查是否已启用追溯更改日志。
$ dsconf get-server-prop -h host -p port retro-cl-enabled |
如果未启用追溯更改日志,请启用该日志。
$ dsconf set-server-prop -h host -p port retro-cl-enabled:on |
设置已记录的更改的最大存留期。
$ dsconf set-server-prop -h host -p port retro-cl-max-age:duration |
其中 duration 可以是 undefined(无存留期限制)或以下任一选项:
s(秒)
m(分钟)
h(小时)
d(天)
w(周)
例如,要将追溯更改日志的最大存留期设置为两天,请键入:
$ dsconf set-server-prop -h host 2 -p 1389 retro-cl-max-age:2d |
下次在追溯更改日志上执行操作时将会修整该日志。
追溯更改日志支持搜索操作。它针对特定搜索(包含以下格式的过滤器)进行了一些优化:
(&(changeNumber>=X)(changeNumber<=Y)) |
作为一般规则,请勿对追溯更改日志条目执行添加或修改操作。可以删除条目以修整日志大小。只有在修改默认访问控制策略时,才需要对追溯更改日志执行修改操作。
为所有经过验证的用户(userdn=anyone,不要与 userdn=all 的匿名访问相混淆)授予追溯更改日志顶级条目 cn=changelog 的读取、搜索和比较权限。
不授予写入和删除访问权限,但暗中授予目录管理员的除外。
不为匿名用户授予读取访问权限,因为追溯更改日志条目可能包含对敏感信息(如密码)的修改。如果不希望经过验证的用户查看追溯更改日志的内容,您可能需要进一步限制对内容的访问权限。
要修改应用于追溯更改日志的默认访问控制策略,请修改 cn=changelog 条目的 aci 属性。请参见第 6 章,目录服务器访问控制。
可以使用“后缀”选项卡以图形方式查看复制,包括复制协议和复制延迟。有关详细信息,请参见 DSCC 联机帮助。
此外,还可以使用 DSCC 查看复制拓扑,如下图所示。
如果无法使用 DSCC,请使用命令行工具获取有关复制部署的信息。
手册页提供了完整的命令行语法以及这些工具的使用示例。
repldisc -“搜索”和构建包含复制部署中所有已知服务器的表格。请参见 repldisc(1) 手册页。
insync - 表明提供方和一个或多个使用方副本之间的同步状态。请参见 insync(1) 手册页。
entrycmp - 比较两个或更多副本中的相同条目。请参见 entrycmp(1) 手册页。
要查找这些命令所在的目录,请参见命令位置。
多主复制使用宽松的一致性复制模型。这意味着可以在不同服务器上同时修改相同条目。在两个服务器之间发送更新时,必须解决所有冲突的更改。大多数情况下系统都可以自动解决冲突。例如,将使用最近的更改解决与每个服务器上的更改相关联的时间戳。但是,某些更改冲突需要手动介入才能解决。
本部分包含以下主题:
解决复制冲突的最简单方法是使用 DSCC。有关信息,请参见 DSCC 联机帮助。
可以使用命令行解决复制冲突。存在更改冲突(无法由复制过程自动解决)的条目将包含操作属性 nsds5ReplConflict 作为冲突标记。
要查找存在冲突的条目,请定期搜索包含此属性的条目。例如,您可以使用以下 ldapsearch 命令查找存在冲突的条目:
$ ldapsearch -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config \ -w - -b "dc=example,dc=com" "(nsds5ReplConflict=*)" |
请注意,默认情况下将为 nsds5ReplConflict 编制索引。
如果在服务器相互复制更改之前创建具有相同 DN 的条目,则可能会在不同的主服务器上创建这些条目。在复制时,冲突解决机制将自动对所创建的第二个条目进行重命名。
存在 DN 命名冲突的条目将通过以下方式进行重命名:在该条目的 DN 中包含其唯一标识符(由操作属性 nsuniqueid 提供)。
例如,如果在两个主服务器上同时创建条目 uid=bjensen,ou=People,dc=example,dc=com,则复制之后这两个主服务器上都将具有以下两个条目:
uid=bjensen,ou=People,dc=example,dc=com
nsuniqueid=66446001-1dd211b2-66225011-2ee211db+uid=bjensen,dc=example,dc=com
必须为第二个条目提供有用的 DN。您可以删除冲突的条目,然后使用不冲突的名称再次添加该条目。但是,重命名条目将确保其内容不会发生更改。重命名过程取决于命名属性是单值属性还是多值属性。请参见以下过程。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
在保留旧 RDN 值的同时重命名条目,例如:
$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: nsuniqueid=66446001-1dd211b2-66225011-2ee211db+uid=bjensen,dc=example,dc=com changetype: modrdn newrdn: uid=bj66446001 deleteoldrdn: 0 ^D |
您无法在此步骤中删除旧 RDN 值,因为它还包含无法删除的 nsuniqueid 操作属性。
删除命名属性的旧 RDN 值和冲突标记属性,例如:
$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bj66446001,dc=example,dc=com changetype: modify delete: uid uid: bjensen - delete: nsds5ReplConflict ^D |
如果重复条目中的命名属性是单值属性,例如 dc(domain component,域组件),则不能简单地将此条目重命名为同一属性的其他值。您必须为此条目提供一个临时名称。
您可以使用 DSCC 执行此任务。有关信息,请参见目录服务控制中心界面和 DSCC 联机帮助。
使用其他命名属性对条目进行重命名,并保留旧的 RDN,例如:
$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: nsuniqueid=66446001-1dd211b2-66225011-2ee211db+dc=HR,dc=example,dc=com changetype: modrdn newrdn: o=TempHREntry deleteoldrdn: 0 ^D |
您无法在此步骤中删除旧 RDN 值,因为它还包含无法删除的 nsuniqueid 操作属性。
将所需的命名属性更改为唯一的值,并删除冲突标记属性,例如:
$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: o=TempHREntry,dc=example,dc=com changetype: modify replace: dc dc: NewHR delete: nsds5ReplConflict ^D |
将条目重命名为预期的命名属性,例如:
$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: dc=NewHR,dc=example,dc=com changetype: modrdn newrdn: dc=HR deleteoldrdn: 1 ^D |
通过将 deleteoldrdn 属性值设置为 1,删除临时属性值对 o=TempHREntry。如果要保留此属性,请将 deleteoldrdn 属性值设置为 0。
复制删除操作时,如果使用方服务器发现要删除的条目具有子条目,则冲突解决过程将创建紧附条目,以免目录中出现孤立条目。
同样,复制添加操作时,如果使用方服务器找不到父条目,则冲突解决过程将创建代表父条目的紧附条目,以免新条目成为孤立条目。
紧附条目是包含对象类 glue 和 extensibleObject 的临时条目。可以使用多种方法创建紧附条目:
如果冲突解决过程发现已删除条目具有匹配的唯一标识符,则紧附条目就是该条目的再生条目。它还包含 glue 对象类和 nsds5ReplConflict 属性。
在这种情况下,可以修改紧附条目以删除 glue 对象类和 nsds5ReplConflict 属性(以便使此条目保持为普通条目),或者删除紧附条目及其子条目。
服务器创建具有 glue 和 extensibleObject 对象类的最小条目。
在这种情况下,必须修改此条目使其成为有意义的条目,或者删除此条目及其所有子条目。
如果需要与依赖于属性唯一性的应用程序(如邮件服务器)进行交互操作,您可能需要限制对包含 nsds5ReplConflict 属性的条目的访问权限。如果不限制对这些条目的访问权限,则只需要一个属性的应用程序将同时获得原始条目和包含 nsds5ReplConflict 的冲突解决条目,并且操作将会失败。
要限制访问权限,需要使用以下命令修改授予匿名读取访问权限的默认 ACI。
$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: dc=example,dc=com changetype: modify delete: aci aci: (target ="ldap:///dc=example,dc=com") (targetattr !="userPassword" (version 3.0;acl "Anonymous read-search access"; allow (read, search, compare)(userdn = "ldap:///anyone");) - add: aci aci: (target="ldap:///dc=example,dc=com") (targetattr!="userPassword") (targetfilter="(!(nsds5ReplConflict=*))")(version 3.0;acl "Anonymous read-search access";allow (read, search, compare) (userdn="ldap:///anyone");) ^D |
新的 ACI 可阻止在搜索结果中返回包含 nsds5ReplConflict 属性的条目。