在非控制性故障转移后恢复到已恢复的站点
在消息 VPN 复制变得同步合格后,您可以恢复到已恢复的站点。如果主站点的容量或能力高于备份站点,这可能是可取的。然而,不建议立即恢复。我们建议等到所有在故障转移前复制的消息都被消费后再进行恢复。
恢复的程序与计划中断相同(参见执行控制性故障转移)。然而,尤其是在您考虑在切换活动后不久恢复时,以下考虑因素适用:
- 在故障转移发生时正在进行的事务有丢失或重复的风险。
- 如果无法恢复恢复站点的消息池,那么在故障发生前复制且在活动站点上未被消费的消息将丢失。
如果没有 ADB 的硬件故障或外部磁盘上的数据丢失,那么可以恢复消息池的故障前状态。允许恢复状态的故障示例包括:
- 网络隔离
- 电源故障
- 暂时失去与外部磁盘的连接
如果能够恢复故障前的消息池,并且现在活动站点的复制队列没有满,那么在故障转移前复制的消息是可用的,并且完全恢复了复制行为。在长期故障中,如果复制队列满了,那么只有在复制队列中的消息和事务在恢复时可用。
如果有硬件故障或外部磁盘上的数据丢失,那么无法恢复故障前的消息池,并且将是空的。
在恢复备用站点时,无法自动同步在非控制性故障转移时正在进行的事务。如果复制从未被禁用,那么可以通过在恢复到以前活动站点之前对每个端点重复以下程序来消除同步事务丢失和重复的风险。
- 第1步:验证端点是否配置为将消费者确认传播到复制备用站点
- 第2步:显示以前活动站点上的消息的内部 ID
- 第3步:显示活动站点上的消息的内部 ID
- 第4步:删除以前活动站点上的消息
第1步:验证端点是否配置为将消费者确认传播到复制备用站点
例如:
NY_EventBroker1# show queue myQueue message-vpn Trading_VPN detail
...
Consumer Ack Propagation : Yes
如果 Consumer Ack Propagation
未启用,请移动到下一个端点。去重仅适用于启用了 Consumer Ack Propagation
的端点。
第2步:显示以前活动站点上的消息的内部ID
例如:
NY_EventBroker1# show queue myQueue message-vpn Trading_VPN messages detail
名称:myQueue
消息 ID: 2852
卷绕日期: 2016年8月22日 02:12:29 UTC
已复制: 是
复制伙伴消息 ID: n/a
消息 ID: 2853
卷绕日期: 2016年8月22日 02:12:29 UTC
已复制: 是
复制伙伴消息 ID: n/a
消息 ID: 2901
卷绕日期: 2016年8月22日 02:12:39 UTC
已复制: 是
复制伙伴消息 ID: n/a
消息 ID: 2903
卷绕日期: 2016年8月22日 02:12:39 UTC
已复制: 是
复制伙伴消息 ID: n/a
消息 ID: 2944
卷绕日期: 2016年8月22日 02:15:30 UTC
已复制: 是
复制伙伴消息 ID: 2919
消息 ID: 2945
卷绕日期: 2016年8月22日 02:15:30 UTC
已复制: 是
复制伙伴消息 ID: 2921
...
第3步:显示活动站点上的消息的内部ID
例如:
BOS_EventBroker# show queue myQueue message-vpn Trading_VPN messages oldest
名称:myQueue
消息 ID 复制伙伴消息 ID 已发送
2840 2852 是
2841 2853 是
2919 n/a 否
2921 n/a 否
第4步:删除以前活动站点上的消息
删除以前活动站点(上述示例中的 NY_EventBroker1
)上符合以下所有条件的消息:
- 消息必须将
Replicated
标志设置为yes
。 - 消息必须将
Replicated Mate Message Id
设置为n/a
。 - 消息的 ID 不能与活动站点(上述示例中的
BOS_EventBroker
)上的任何Replicated Mate Message Id
匹配。
在上述示例中,可以删除消息 2901
和 2903
。
消息 2852
和 2853
不能删除,因为它们的 ID 存在于 BOS_EventBroker
的 Replicated Mate Message Id
字段中。
消息 2944
和 2945
不能删除,因为 Replicated Mate Message Id
字段不是 n/a
。
输入以下 ADMIN 命令以删除消息:
solace(admin/message-spool)# delete-messages queue <queue-name> message <msg-id>
例如,删除上述示例中的 2901
和 2903
消息:
NY_EventBroker1# admin
NY_EventBroker1(admin)# message-spool message-vpn Trading_VPN
NY_EventBroker1(admin/message-spool)# delete-messages queue myQueue message 2901
NY_EventBroker1(admin/message-spool)# delete-messages queue myQueue message 2903