30.3. 数据复制


在使用复制时,实时和备份服务器对不会共享相同的数据目录,所有数据同步都是通过网络进行的。因此,实时服务器接收的所有(永久)数据都将复制到备份中。

如果实时服务器已彻底关闭,备份服务器将激活,并且客户端将故障转移到备份。这个行为是预先确定的,因此在使用数据复制时不可配置。

备份服务器首先需要同步来自活动服务器的所有现有数据,然后才能进行替换。因此,与共享存储不同,副本备份在启动后不会立即完全运行。同步的发生时间取决于要同步的数据量和网络速度。另请注意,当备份启动时,客户端会在 初始复制-sync-timeout 期间被阻止。在此超时后,客户端将被取消阻塞,即使没有完成同步。

成功故障转移后,备份的日志将开始保存比实时服务器上的数据更新的数据。您可以将原始的实时服务器配置为执行故障恢复,并在重新启动后成为实时服务器。故障恢复将在实时服务器恢复在线之前同步备份与实时服务器之间的数据。

如果两个服务器都已关闭,管理员必须确定哪些服务器的日志具有最新的数据。如果备份日志具有最新的数据,请将该日志复制到实时服务器。否则,每当它再次激活时,备份将从实时服务器复制陈旧的日志数据并删除自己的日志数据。如果实时服务器的数据是最新数据,则不需要任何操作,并且可以正常启动服务器。

重要

由于数据中心之间的延迟较高,数据中心之间可能不可靠,因此不建议配置和使用复制日志以实现数据中心之间的高可用性。

复制实时和备份对必须是集群的一部分。cluster-connection 配置元素定义备份服务器如何找到其实时匹配项。

复制至少需要三个实时/备份对,以减少网络隔离的风险,但您无法消除此风险。如果您使用至少三个 live/backup 对,集群可以使用仲裁投票来避免使用两个 live 代理。

配置 cluster-connection 时,请记住以下详情:

  • 实时和备份服务器必须属于同一群集。请注意,即使简单的实时/备份复制对也需要集群配置。
  • 集群用户和密码必须与对中每台服务器上匹配。

通过在 < master> 和 <slave> 元素中配置 group-name 属性来指定 一对 live/backup 服务器。备份服务器仅连接到共享同一 组名的实时服务器

作为使用 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 命令以配置用于数据复制的实时服务器

  1. 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)

    check-for-live-server 属性告知 live 服务器检查以确保没有其他服务器在群集中具有其给定 ID。此属性的默认值在 JBoss EAP 7.0 中为 false。在 JBoss EAP 7.1 及更高版本中,默认值为 true

  2. ha-policy 添加到备份服务器

    /subsystem=messaging-activemq/server=default/ha-policy=replication-slave:add(cluster-name=my-cluster,group-name=group1)
  3. 确认共享的 cluster-connection 是否存在。

    实时和备份服务器之间的正确通信需要 群集连接。使用以下管理 CLI 命令,确认实时和备份服务器上配置了相同的 cluster-connection :该示例使用 standalone -full-ha 配置配置文件中找到的默认 cluster- connection,这应该足以满足大多数用例的需要。如需有关如何 配置集群连接的详细信息,请参阅 配置集群连接。

    使用以下管理 CLI 命令,确认实时和备份服务器使用相同的 cluster-connection:

    /subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource

    如果存在 cluster-connection,输出将提供当前的配置。否则将显示错误消息。

有关 所有配置属性的详情,请参阅所有复制 配置。

30.3.2. 所有复制配置

在添加配置后,您可以使用管理 CLI 将配置添加到策略中。要执行此操作的命令遵循以下基本语法:

/subsystem=messaging-activemq/server=default/ha-policy=POLICY:write-attribute(name=ATTRIBUTE,value=VALUE)

例如,若要将 restart-backup 属性的值设为 true,可使用以下命令:

/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:write-attribute(name=restart-backup,value=true)

下表提供 replication -master 节点和 replication- slave 配置元素的 HA 配置属性。

Expand
表 30.1. replication-master的属性
属性描述

check-for-live-server

设置为 true 可告知此服务器在启动时使用相同服务器 ID 检查另一台服务器的集群。JBoss EAP 7.0 的默认值为 false。JBoss EAP 7.1 及更高版本的默认值为 true

cluster-name

用于复制的集群的名称。

group-name

如果设置,备份服务器将仅对具有匹配 group-name 的实时服务器。

initial-replication-sync-timeout

在同步发起复制前,以毫秒为单位等待的时间。默认值为 30000

synchronized-with-backup

指明实时服务器上的日志是否已同步。

Expand
表 30.2. replication-slave的属性
属性描述

allow-failback

当另一服务器发出接管其位置的请求时,该服务器是否会自动停止。典型的用例是实时服务器请求,请求在重新启动或故障恢复后恢复活动处理。当实时服务器重新加入群集并请求恢复处理后,其 allow-failback 设为 true 的备份服务器将返回到该实时服务器。默认值为 true

cluster-name

用于复制的集群的名称。

group-name

如果设置,备份服务器将仅对具有匹配 group-name 的实时服务器。

initial-replication-sync-timeout

在同步发起复制前,以毫秒为单位等待的时间。默认值为 30000

max-saved-replicated-journal-size

指定复制备份服务器在开始移动其文件后可以重新启动的次数。达到最大值后,如果 出现故障,服务器将在 之后永久停止。默认值为 2

restart-backup

设置为 true,告知此备份服务器在因为故障恢复而停止后重新启动。默认值为 true

sync-with-live

指明复制服务器上的日志是否与实时服务器同步,这意味着可以安全地关闭实时服务器。

30.3.3. 防止集群连接超时

每个实时和备份对使用 集群连接 进行通信。cluster -connection 的 call- timeout 属性设置服务器在向群集中另一台服务器发出调用后等待响应的时间。call-timeout 的默认值为 30 秒,这足以满足大多数用例的需要。但在某些情况下,备份服务器可能无法处理来自实时服务器的复制数据包。例如,由于磁盘操作较慢或 journal- min-file 的值较大,日志文件的初始预创建时间可能会发生。如果出现如此超时的情况,您将在日志中看到与以下类似的一行。

AMQ222207: The backup server is not responding promptly introducing latency beyond the limit. Replication server being disconnected now.
警告

如果诸如上面的行出现在日志中,这意味着复制过程已停止。您必须重新启动备份服务器才能重新初始化复制。

要防止集群连接超时,请考虑以下选项:

30.3.4. 删除旧日志目录

当备份服务器开始与实时服务器同步时,备份服务器会将其日志移到新位置。默认情况下,日志目录位于 EAP_HOME /standalone 下的 data/ activemq 目录中。对于域,每一服务器自己的 serverX/data/activemq 目录位于 EAP_HOME/domain/servers 下。目录命名为 bindings日志大型消息和 分页。有关这些目录的更多信息,请参阅 配置持久性和 配置 Paging

移动之后,新目录将重命名为 旧replica.X,其中 X 是数字后缀。如果由于新的故障转移而启动另一个同步,则"moved"目录的后缀将由 1 增加。例如,在第一次同步时,日志目录将移到 旧replica.1,第二个是 旧的replica.2,等等。原始目录将存储从实时服务器同步的数据。

默认情况下,备份服务器配置为管理出现两次故障切换和回退故障。在此之后,清理过程会触发移除 旧replica.X 目录。您可以使用备份服务器上的 max-saved-replicated-journal-size 属性来更改触发清理过程的故障转移数量。

注意

实时服务器将 max-saved-replicated-journal-size 设置为 2。此值无法更改

30.3.5. 更新 Dedicated Live 和备份服务器

如果实时和备份服务器部署在专用拓扑中(每个服务器都在自己的 JBoss EAP 实例中运行),请按照以下步骤确保集群的平稳更新和重新启动。

  1. 彻底关闭备份服务器。
  2. 彻底关闭实时服务器。
  3. 更新实时和备份服务器的配置。
  4. 启动实时服务器。
  5. 启动备份服务器。

30.3.6. 检测代理的网络隔离

要检测代理的网络隔离,您可以 ping 可配置的主机列表。使用以下参数之一配置如何检测网络上的代理状态:

  • network-check-NIC :注意要在 InetAddress.isReachable 方法中使用的网络接口控制器(NIC)来检查网络可用性。
  • network-check-period: (以毫秒为单位),它定义检查网络状态的频率。
  • network-check-timeout :在网络连接过期之前,请注意等待的时间段。
  • network-check-list :注意要检测网络状态的 ping 的 IP 地址列表。
  • network-check-URL-list :注意用于验证网络的 http URI 列表。
  • network-check-ping-command :注意 ping 命令及其用于检测 IPv4 网络上的网络状态的参数。
  • network-check-ping6-command :注意 ping 命令及其用于检测 IPv6 网络上的网络状态的参数。

流程

  • 使用以下命令 ping 可配置的主机列表,以检测代理的网络隔离:

    /subsystem=messaging-activemq/server=default:write-attribute(name=<parameter-name>, value="<ip-address>")

示例

要通过 ping IP 地址 10.0.0.1 检查网络状态,请发出以下命令:

/subsystem=messaging-activemq/server=default:write-attribute(name=network-check-list, value="10.0.0.1")

30.3.7. 数据复制的限制:脑裂处理

当实时服务器及其备份同时处于活动状态时,会发生"脑裂"情况。两个服务器都可以提供客户端和进程消息,而其他人不知道它。在这种情况下,实时和备份服务器之间不再有任何消息复制。如果这两个服务器之间进行网络故障,则会出现分割情况。

例如,如果实时服务器和网络路由器之间的连接中断,备份服务器将丢失与实时服务器的连接。但是,备份仍可以连接到集群中超过一半的服务器,因此它变为活跃状态。请记住,如果只有一个实时备份对,并且备份服务器丢失与实时服务器的连接,则备份也会激活。当两个服务器都在集群中处于活跃状态时,可能会发生两个不合预期的情况:

  1. 远程客户端故障转移到备份服务器,但 MDB 等本地客户端将使用实时服务器。两个节点都有完全不同的日志,从而导致脑裂处理。
  2. 在远程客户端切换到备份服务器后,与 live 服务器的连接已被修复。当旧客户端继续使用备份时,任何新客户端都将连接到实时服务器,这也会导致脑裂情景。

客户应在每对实时和备份服务器之间实施可靠的网络,以减少使用数据复制时脑裂处理的风险。例如,使用重复的网络接口卡和其他网络冗余。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部