跳到主要内容

执行控制性故障转移

要执行控制性复制故障转移,以便将客户端从一个站点的消息 VPN(具有活动复制状态)切换到另一个站点的相应消息 VPN,必须采取以下步骤:

  • 第1步:验证复制桥是否绑定到复制队列
  • 第2步:将消息 VPN 复制状态切换为备用
  • 第3步:等待以前活动的消息 VPN 的复制队列排空
  • 第4步:启发式提交或回滚任何正在进行的事务
  • 第5步:使以前复制备用的消息 VPN 复制活动
  • 第6步:删除启发式完成的事务

要实现真正的控制性,将接管活动的复制站点的复制桥连接必须绑定到另一个复制站点的复制队列。在执行控制性故障转移之前,应尽一切努力最小化断开复制桥的可能性。在通过配置消息 VPN 放弃活动并设置为复制备用状态后,如果复制桥连接在复制队列排空之前断开,故障转移将变为非控制性故障转移。

在这些步骤中使用的例子中,客户端从一个站点(纽约)的消息 VPN(Trading_VPN)具有活动复制状态,切换到另一个站点(波士顿)的相应消息 VPN,该消息 VPN 具有备用复制状态。

虽然这个简单的例子只显示了具有单个消息 VPN 的复制站点,在现实世界的场景中,这些步骤必须通过 CLI 为参与复制站点故障转移的每个消息 VPN 执行。

第1步:验证复制桥是否绑定到复制队列

验证您希望激活的具有复制备用消息 VPN 的事件代理的复制桥是否绑定到具有活动复制状态的消息 VPN 的复制队列。

这里假设 NY_EventBroker1BOS_EventBroker 在各自站点上为启用保证消息传递的虚拟路由器处于活动状态。

纽约数据中心

NY_EventBroker1> show message-vpn Trading_VPN replication
标志图例:
A - 管理状态(U=上,D=下)
C - 配置状态(A=活动,S=备用)
B - 本地桥状态(U=上,Q=队列未绑定,D=下,-=N/A)
R - 远程桥状态(U=上,D=下,-=N/A)
Q - 队列状态(U=上,D=下,-=N/A)
S - 同步复制合格(Y=是,N=否,-=N/A)
M - 同步不合格时拒绝消息(Y=是,N=否)
T - 事务复制模式(A=异步,S=同步,-=N/A)

消息 VPN A C B R Q S M T
-------------------------------- - - - - - - - - -
Trading_VPN U A - U U - N A

NY_EventBroker1>

波士顿数据中心

BOS_EventBroker> show message-vpn Trading_VPN replication
标志图例:
A - 管理状态(U=上,D=下)
C - 配置状态(A=活动,S=备用)
B - 本地桥状态(U=上,Q=队列未绑定,D=下,-=N/A)
R - 远程桥状态(U=上,D=下,-=N/A)
Q - 队列状态(U=上,D=下,-=N/A)
S - 同步复制合格(Y=是,N=否,-=N/A)
M - 同步不合格时拒绝消息(Y=是,N=否)
T - 事务复制模式(A=异步,S=同步,-=N/A)

消息 VPN A C B R Q S M T
-------------------------------- - - - - - - - - -
Trading_VPN U S U - - N A

BOS_EventBroker>

第2步:将消息VPN复制状态切换为备用

将当前复制活动的消息 VPN 切换为备用状态。

纽约数据中心

NY_EventBroker1(configure)# message-vpn Trading_VPN
NY_EventBroker1(configure/message-vpn)# replication state standby

第3步:等待以前活动的消息VPN的复制队列排空

允许以前复制活动的消息 VPN 的任何消息或事务到达其复制伙伴上的相应消息 VPN。允许所有消息和事务传播到备用消息 VPN 可以防止异步复制消息和事务的丢失。

要确定刚刚从活动状态更改为备用状态的消息 VPN 的复制队列是否已排空,请为消息 VPN 的复制队列(命名为 #MSGVPN_REPLICATION_DATA_QUEUE)输入 show queue 命令。当输出显示 "Current Messages Spooled" 的值为 0 时,队列已排空。

纽约数据中心

NY_EventBroker1(configure)# show queue #MSGVPN_REPLICATION_DATA_QUEUE message-vpn Trading_VPN
名称 : #MSGVPN_REPLICATION_DATA_QUEUE
消息 VPN : Trading_VPN
...
当前消息卷绕 : 1
当前池使用量 (MB) : 0.0006
...

系统管理员在复制队列的消息 VPN 的 "Current Messages Spooled" 为 0 之前,不应将另一复制伙伴(BOS_EventBroker)的消息 VPN 配置为复制活动状态。

第4步:启发式提交或回滚任何正在进行的事务

如果消息 VPN 使用 XA 事务,可能需要对以前活动站点上一些已准备的事务进行启发式提交或回滚。只有已准备的事务需要处理。其他状态的事务可以忽略。如果您不处理已准备的事务:

  • 您将浪费事务资源,这将减少两个站点的事务处理能力
  • 如果恢复到原始活动站点,可能会发生重复消息传递或消息丢失

有关如何启发式提交或回滚事务的信息,请参阅对事务执行启发式操作。

重要的是,您只能在以前活动的消息 VPN 上执行启发式提交或启发式回滚操作。

决定提交还是回滚事务将取决于各种因素。在查看 XA 事务时,目标是确保在两个复制站点的所有分布式事务分支上一致地处理事务。以下是一些决策指南:

  • 对于由应用程序服务器中的事务管理器控制的已准备 XA 事务,您应该检查事务管理器的日志或状态,以检查已准备事务的 XID,以检查分布式事务的其他分支:
    • 如果所有其他分支都已提交,您应该启发式提交事务
    • 如果任何其他分支已回滚,您应该启发式回滚事务
  • 对于不受事务管理器控制的 XA 已准备事务,手动协调分布式事务,以便所有分布式事务分支要么提交,要么回滚

显示复制事务

要显示复制事务,请输入以下用户执行命令:

solace> show transaction replicated

示例:

Solace # show transaction message-vpn blue_02 state PREPARED replicated
标志图例
T - 事务类型(X=XA L=本地)
S - 事务状态(A=活动 S=挂起 I=空闲 P=准备 C=完成)
R - 已复制(Y=是 N=否)
XID 消息
消息 VPN T S R 上次状态更改 卷绕
--------------------------------------------- - - - ----------------- --------
0021ABC4-00-01
blue_02 X P Y 1s 0

要显示正在进行的复制事务的详细信息,请输入以下用户执行命令:

solace> show transaction message-vpn blue_02 state PREPARED replicated detail

示例:

Solace # show transaction replicated detail
XID: 0021B028-00-01
消息 VPN: blue_02
客户端: username/15848/#000c0001
客户端用户名: default
会话: N/A
空闲超时: 0
类型: XA
状态: PREPARED
已复制: Yes
上次状态更改: 0d 0h 0m 0s
消息: 10
发布消息: 0
消费消息: 150
发布者消息:
消息 ID 主题
-------------------- -----------------------------------------------------------
消费者消息:
消息 ID 类型 端点名称
-------------------- ----- -----------------------------------------------------
3118727406 队列 test
3118727407 队列 test
3118727408 队列 test
3118727409 队列 test
3118727410 队列 test
3118727411 队列 test
3118727412 队列 test
3118727413 队列 test
3118727414 队列 test
3118727415 队列 test

要显示特定事务的详细信息,请输入以下用户执行命令:

solace> show transaction xid <xid> detail

其中:

xid 指定要显示的事务的 XID。

第5步:使以前复制备用的消息VPN复制活动

要恢复服务器,您需要将以前复制备用的消息 VPN 切换到活动状态。

BOS_EventBroker(configure)# message-vpn Trading_VPN
BOS_EventBroker(configure/message-vpn)# replication state active

此时,客户端应该能够重新连接到消息 VPN,并且完整的复制服务将恢复。

第6步:删除启发式完成的事务

如果您之前启发式地完成了事务,您应该删除它们以释放资源。您必须始终在以前活动的站点上删除已完成的事务。您可能需要根据复制模式和 XA 事务管理器,在新活动的站点上删除已完成的事务。XA 事务管理器在连接到新活动站点后可能自动删除活动消息 VPN 上的启发式完成事务,因为它协调 XA 事务状态。在删除已完成的事务之前,应允许此过程完成。

要删除已完成的事务,请在以前活动的站点上输入以下 ADMIN 命令:

solace(admin/message-spool) delete-transaction xid <xid>

其中:

xid 指定要删除的事务的 XID。

您应该检查备用和活动消息 VPN 上的已完成事务。