15.3. 多层复制
在多层次复制场景中,目录数据的供应商副本存储在多个读写副本中。每个服务器都会为读写副本维护一个更改日志。目录服务器支持复制拓扑中最多 20 个供应商。
注意
多层次复制环境中的每个供应商也是一个消费者。
下图显示了带有两个供应商的多层次复制环境:
图 15.2. 带有两层线的多层次复制
在复杂的环境中,复制拓扑通常包含多个读写供应商以及只读用户。下图显示了一个拓扑,每个供应商都配置有十个复制协议,将数据复制到两个其他提供者和八个消费者:
图 15.3. 带有 Four Suppliers 和 Eight Consumers 的复杂复制场景
注意
复制速度取决于:
- 网络的速度。
- 传出和传入复制协议的数量。
使用命令行或 Web 控制台来设置多层次复制拓扑。请参阅:
15.3.1. 使用命令行设置多层次复制
以下示例假定您已在名为 provider
1.example.com
的主机上运行现有的 Directory 服务器实例。以下流程描述了如何将名为 provider 2.example.com
的另一个读写副本添加到拓扑中,以及如何为 dc=example,dc=com
后缀配置多层次复制。
准备要加入的远程服务器
在 provider
2.example.com
主机上:
- 安装目录服务器并创建实例。详情请查看 红帽目录服务器 安装指南。
- 如果您在没有数据库的情况下创建实例,请为后缀创建数据库。例如,要为 dc=example,dc=com 后缀创建一个名为
userRoot
的数据库:# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com backend \ create --suffix="dc=example,dc=com" --be-name="userRoot"
有关为后缀创建数据库的详情,请参考 第 2.1.1 节 “创建后缀”。 - 为后缀启用复制,并创建复制管理器帐户:
# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com replication \ enable --suffix="dc=example,dc=com" --role="supplier" --replica-id=1 \ --bind-dn="cn=replication manager,cn=config" --bind-passwd="password"
此命令将 provider2.example.com
主机配置为 dc=example,dc=com 后缀的供应商,并将此条目的副本 ID 设置为 1。另外,服务器使用指定密码创建cn=replication manager,cn=config
用户,并允许此帐户将后缀的更改复制到此主机上。重要对于拓扑中的所有供应商,副本 ID 必须是 1 到 65534 之间的唯一整数。
将现有服务器配置为独立服务器
在 provider
1.example.com
主机上:
- 与您在新服务器上运行的命令类似,为 dc=example,dc=com 后缀启用复制,并创建复制管理器帐户:
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com replication \ enable --suffix="dc=example,dc=com" --role="supplier" --replica-id=2 \ --bind-dn="cn=replication manager,cn=config" --bind-passwd="password"
副本 ID 必须与 “准备要加入的远程服务器”一节 中创建的副本 ID 不同,但复制管理器帐户可以使用相同的 DN。 - 添加复制协议,并初始化新的服务器。例如:
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt \ create --suffix="dc=example,dc=com" --host="supplier2.example.com" --port=636 \ --conn-protocol=LDAPS --bind-dn="cn=replication manager,cn=config" \ --bind-passwd="password" --bind-method=SIMPLE --init \ example-agreement-supplier1-to-supplier2
此命令创建一个名为example-agreement-supplier1-to-supplier2
的复制协议。复制协议定义了设置,如消费者的主机名、协议和身份验证信息,这些设置供应商将数据连接到消费者时使用。创建协议后,目录服务器会初始化消费者。要稍后初始化使用者,请省略--init
选项。请注意,在初始化消费者前复制不会启动。有关初始化消费者的详情,请参考 第 15.8.3 节 “初始化消费者”。有关命令中使用的选项的详情,请输入:# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt --help
- 验证初始化是否成功:
# dsconf -D "cn=Directory Manager" ldap://supplier1.example.com repl-agmt \ init-status --suffix="dc=example,dc=com" example-agreement-supplier1-to-supplier2 Agreement successfully initialized.
根据要复制的数据量,初始化可能需要非常耗时。
将新服务器配置为叶
在 provider
2.example.com
主机上:
警告
如果您还没有在现有服务器上初始化后缀 'dc=example,dc=com',如 “将现有服务器配置为独立服务器”一节 所述,则不要继续。否则,新的服务器上的空数据库会覆盖现有供应商上的数据库。
- 添加复制协议,以将信息从供应商
2
复制到供应商 1
。例如:# dsconf -D "cn=Directory Manager" ldap://supplier2.example.com repl-agmt \ create --suffix="dc=example,dc=com" --host="supplier1.example.com" --port=636 \ --conn-protocol=LDAPS --bind-dn="cn=replication manager,cn=config" \ --bind-passwd="password" --bind-method=SIMPLE \ example-agreement-supplier2-to-supplier1
此命令创建一个名为example-agreement-supplier2-to-supplier1
的复制协议。复制协议定义了设置,如消费者的主机名、协议和身份验证信息,这些设置供应商将数据连接到消费者时使用。
15.3.2. 使用 Web 控制台设置多层次复制
以下示例假定您已在名为 provider
1.example.com
的主机上运行现有的 Directory 服务器实例。以下流程描述了如何将名为 provider 2.example.com
的另一个读写副本添加到拓扑中,以及如何为 dc=example,dc=com
后缀配置多层次复制。
准备要加入的远程服务器
在 provider
2.example.com
主机上:
- 安装目录服务器并创建实例。详情请查看 红帽目录服务器 安装指南。
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 如果您在没有数据库的情况下创建实例,请从后缀创建数据库。有关为后缀创建数据库的详情,请参考 第 2.1.1 节 “创建后缀”。
- 为后缀启用复制:
- 打开菜单。
- 选择 dc=example,dc=com 后缀,然后单击 。
- 在 Replication Role 字段中选择 Supplier,输入副本 ID,以及要创建的复制管理器帐户的 DN 和密码。例如:这些设置将 provider
2.example.com
主机配置为 dc=example,dc=com 后缀的供应商,并将此条目的副本 ID 设置为 1。另外,服务器使用指定密码创建cn=replication manager,cn=config
用户,并允许此帐户将后缀的更改复制到此主机上。重要对于拓扑中的所有供应商,副本 ID 必须是 1 到 65534 之间的唯一整数。 - 点。
将现有服务器配置为独立服务器
在 provider
1.example.com
主机上:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 与新服务器上的设置类似,为 dc=example,dc=com 后缀启用复制,并创建一个复制管理器帐户:
- 打开菜单。
- 选择 dc=example,dc=com 后缀,然后单击 。
- 在 Replication Role 字段中选择 Supplier,输入副本 ID,以及要创建的复制管理器帐户的 DN 和密码。例如:副本 ID 必须与 “准备要加入的远程服务器”一节 中创建的副本 ID 不同,但复制管理器帐户可以使用相同的 DN。
- 点。
- 添加复制协议并初始化消费者:
- 打开菜单,然后选择 Agreements 。
- 点,并填写字段。例如:这些设置会创建一个名为
example-agreement-supplier1-to-supplier2
的复制协议。复制协议定义了设置,如消费者的主机名、协议和身份验证信息,这些设置供应商将数据连接到消费者时使用。 - 在 Consumer Initialization 字段中选择 Do Online Initialization,以在保存协议后自动初始化消费者。要稍后初始化消费者,请选择 Do Not Initialize。请注意,在初始化消费者前复制不会启动。有关初始化消费者的详情,请参考 第 15.8.3 节 “初始化消费者”。
- 点。
- 验证初始化是否成功:
- 打开菜单。
- 选择条目。对于成功完成的初始化,Web 控制台会在 Last Update Status 列中显示 Error (0) Replica obtained: Incremental update successful 信息。根据要复制的数据量,初始化可能会非常耗时。
将新服务器配置为叶
在 provider
2.example.com
主机上:
警告
如果您还没有在现有服务器上初始化复制协议,如 “将现有服务器配置为独立服务器”一节 所述,请不要继续。否则,新的服务器上的空数据库会覆盖现有供应商上的数据库。
- 添加复制协议,并初始化消费者:
- 打开菜单,然后选择 Agreements 。
- 点,并填写字段。例如:这些设置会创建一个名为
example-agreement-supplier2-to-supplier1
的复制协议。 - 在 Consumer Initialization 字段中选择 Do Online Initialization,以在保存协议后自动初始化消费者。要稍后初始化消费者,请选择 Do Not Initialize。请注意,在初始化消费者前复制不会启动。有关初始化消费者的详情,请参考 第 15.8.3 节 “初始化消费者”。
- 点。
- 验证初始化是否成功:
- 打开菜单。
- 选择条目。如果初始化成功完成,Web 控制台会在 Last Update Status 列中显示 Error (0) Replica obtained: Incremental update successful 信息。根据要复制的数据量,初始化非常耗时。
15.3.3. 防止在多层复制中移动消费者
multi-supplier 复制的一个特性是供应商获得对复制区域的消费者独占访问权限。在此期间,其他供应商不会与消费者直接联系。如果供应商尝试在锁定时获得访问权限,使用者会返回忙碌的响应,并在进行另一个尝试前,供应商会休眠几秒钟。在更新负载较低期间,供应商将其更新发送到另一个消费者,而第一个消费者被锁定,然后在第一个消费者再次释放时发送更新。
如果锁定供应商处于重数更新负载,或者更改日志中有很多待处理的更新,则可能会出现问题。如果锁定供应商完成发送更新并有多个要发送的待处理的更改,它会立即尝试重新清空消费者。在大多数情况下,这种尝试都会成功,因为其他供应商通常会处于睡眠状态。这可能会导致单个供应商在几小时或更长时间内对消费者进行货币化。
以下属性解决了这个问题:
nsds5ReplicaBusyWaitTime
- 设置供应商在消费者发回忙碌响应后等待的时间(以秒为单位),然后再尝试获取访问权限。例如,要配置供应商在进行另一个获取尝试前等待 5 秒:
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt \ set --suffix="suffix" --busy-wait-time=5 agreement_name
nsds5ReplicaSessionPauseTime
- 设置供应商在两个更新会话之间等待的时间(以秒为单位)。如果您设置的值低于
nsds5ReplicaBusyWaitTime
指定的值,则目录服务器会自动使用nsds5ReplicaSessionPauseTime
参数的值,它比nsds5ReplicaBusyWaitTime
中设置的值高。例如,配置供应商在两个更新会话之间等待 10 秒:# dsconf -D "cn=Directory Manager" ldap://supplier.example.com repl-agmt \ set --suffix="suffix" --session-pause-time=10 agreement_name
nsds5ReplicaReleaseTimeout
- 设置供应商发布副本的超时时间,无论是完成发送其更新。这可防止单个供应商货币化副本。例如,在大量复制环境中将供应商配置为在 90 秒后发布副本:
# dsconf -D "cn=Directory Manager" ldap://supplier.example.com replication \ set --suffix="suffix" --repl-release-timeout=90
详情请查看 红帽目录服务器配置、命令和文件参考中的参数描述。