30.3. 数据复制
在使用复制时,实时和备份服务器对不会共享相同的数据目录,所有数据同步都是通过网络进行的。因此,实时服务器接收的所有(永久)数据都将复制到备份中。
如果实时服务器已彻底关闭,备份服务器将激活,并且客户端将故障转移到备份。这个行为是预先确定的,因此在使用数据复制时不可配置。
备份服务器首先需要同步来自活动服务器的所有现有数据,然后才能进行替换。因此,与共享存储不同,副本备份在启动后不会立即完全运行。同步的发生时间取决于要同步的数据量和网络速度。另请注意,当备份启动时,客户端会在 初始复制-sync-timeout 期间被阻止。在此超时后,客户端将被取消阻塞,即使没有完成同步。
成功故障转移后,备份的日志将开始保存比实时服务器上的数据更新的数据。您可以将原始的实时服务器配置为执行故障恢复,并在重新启动后成为实时服务器。故障恢复将在实时服务器恢复在线之前同步备份与实时服务器之间的数据。
如果两个服务器都已关闭,管理员必须确定哪些服务器的日志具有最新的数据。如果备份日志具有最新的数据,请将该日志复制到实时服务器。否则,每当它再次激活时,备份将从实时服务器复制陈旧的日志数据并删除自己的日志数据。如果实时服务器的数据是最新数据,则不需要任何操作,并且可以正常启动服务器。
由于数据中心之间的延迟较高,数据中心之间可能不可靠,因此不建议配置和使用复制日志以实现数据中心之间的高可用性。
复制实时和备份对必须是集群的一部分。cluster-connection 配置元素定义备份服务器如何找到其实时匹配项。
复制至少需要三个实时/备份对,以减少网络隔离的风险,但您无法消除此风险。如果您使用至少三个 live/backup 对,集群可以使用仲裁投票来避免使用两个 live 代理。
配置 cluster-connection 时,请记住以下详情:
- 实时和备份服务器必须属于同一群集。请注意,即使简单的实时/备份复制对也需要集群配置。
- 集群用户和密码必须与对中每台服务器上匹配。
通过在 < master> 和 < 一对 live/backup 服务器。备份服务器仅连接到共享同一 slave> 元素中配置 group-name 属性来指定组名的实时服务器。
作为使用 group-name 的示例,假设您有三个实时服务器和三个备份服务器。因为每个实时服务器都必须带有自己的备份对,所以请分配以下组名称:
-
live1 和 backup1 使用
pair1 的group-name。 -
live2 和 backup2 使用
pair2 的group-name。 -
live3 和 backup3 使用
pair3 的group-name。
在本例中,服务器 backup1 会搜索具有相同 组名称对 1 的实时服务器,本例中为服务器 live1。
与共享存储案例中非常相似,当实时服务器停止或崩溃时,其复制和配对备份将变为活动状态并接管其职责。具体来说,配对备份将在丢失与其实时服务器的连接时激活。这可能有问题,因为可能会因为临时网络问题而发生。为解决这个问题,配对备份将尝试确定它是否仍然可以连接到群集中的其他服务器。如果它可以连接到超过一半的服务器,它将变为活动状态。如果无法与其实时服务器通信,并且群集中的其他服务器超过一半,配对备份将等待并尝试重新与实时服务器连接。这可降低"脑裂"情况的风险,即备份和实时服务器正在处理消息,而其他人不知道该情况。
这是共享存储备份的重要区别,在共享存储备份中,如果备份找不到实时服务器并且日志中的文件锁定已被释放,则备份将激活并开始为客户端请求提供服务。另请注意,在复制时,备份服务器不知道其是否具有最新数据,因此它实际上无法决定自动激活。要使用其所拥有的数据激活备份服务器副本,管理员必须通过将从卷更改为主服务器来更改其配置,使它成为实时服务器。
30.3.1. 配置数据复制 复制链接链接已复制到粘贴板!
以下是两个示例,显示了驻留在名为 my-cluster 的群集和名为 group1 的备份组中的实时和备份服务器的基本配置。
以下步骤使用管理 CLI 为驻留于名为 my-cluster 的群集和名为 group1 的备份组中的实时和备份服务器提供基本配置。
以下示例假定您将使用 standalone-full-ha 配置配置文件运行 JBoss EAP:
管理 CLI 命令以配置用于数据复制的实时服务器
将
ha-policy添加到 Live Server/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(check-for-live-server=true,cluster-name=my-cluster,group-name=group1)
/subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(check-for-live-server=true,cluster-name=my-cluster,group-name=group1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow check-for-live-server属性告知 live 服务器检查以确保没有其他服务器在群集中具有其给定 ID。此属性的默认值在 JBoss EAP 7.0 中为false。在 JBoss EAP 7.1 及更高版本中,默认值为true。将
ha-policy添加到备份服务器/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:add(cluster-name=my-cluster,group-name=group1)
/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:add(cluster-name=my-cluster,group-name=group1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认共享的
cluster-connection是否存在。实时和备份服务器之间的正确通信需要
群集连接。使用以下管理 CLI 命令,确认实时和备份服务器上配置了相同的cluster-connection:该示例使用standalone,这应该足以满足大多数用例的需要。如需有关如何配置集群连接的详细信息,请参阅配置集群连接。-full-ha 配置配置文件中找到的默认 cluster-connection使用以下管理 CLI 命令,确认实时和备份服务器使用相同的 cluster-connection:
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource
/subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果存在
cluster-connection,输出将提供当前的配置。否则将显示错误消息。