跳到主要内容

在DMR网络中配置复制

您可以在动态消息路由(DMR)的帮助下,利用复制和 Config-Sync 进行灾难恢复,以动态地通过事件网格路由消息。DMR 提供了一种互联 Solace PubSub+ 事件代理实例的手段,使得由一个代理托管的客户发布的信息可以被另一个代理托管的客户消费。建立代理之间的关系后,代理会自动发现如何路由消息。客户端应用程序不需要采取任何行动来跨事件网格发布或消费消息。

有关更多信息,请参见以下内容:

  • 使用 DMR 进行复制
  • 灾难恢复的数据中心复制
  • 动态消息路由
  • Config-Sync

使用这些程序

以下指令适用于设备和软件事件代理,以及单个代理和 HA 对。

当提到代理 A(或 B 等)时,它可能有 HA 伙伴 A'(或 B' 等)。这些程序假设以下情况:

  • 代理 A 可能有 HA 伙伴 A'
  • A 是主代理,A' 是备份,A 是活动的
  • 冗余状态是 UP
  • 已启用 Config-Sync,且 A 和 A' 当前已同步
  • 网络中所有节点都在同一软件级别

在 10.0.1 之前的版本中,复制需要在所有启用 DMR 的消息 VPN 上启用。在 10.0.1 及更高版本中,可以在所有启用 DMR 的消息 VPN 上启用或禁用复制。

在 Config-Sync 运行时,您需要只在活动代理上进行配置更改,在这个例子中是 A/A' 对中的代理 A。每个程序所需的特殊考虑都列在每个程序旁边。

未能遵循这些程序,或使用此处未列出的程序,可能会导致消息丢失。

在DMR网络中向节点添加复制伙伴

您可以在不中断现有客户端服务的情况下,向 DMR 网络中的节点添加复制伙伴。在程序期间,预计集群的状态将被报告为 DOWN,并且在节点之间建立链接时会触发拓扑错误。尽管有这些错误,流量将继续通过网络流动,预计不会出现消息丢失。

假设

  • 集群 C 中的代理 A 已与代理 X1 至 Xn 建立了 DMR 链接(内部或外部)
  • 所有 A 和 X1..n 上的集群状态是 UP
  • 代理 B 将被添加为 A 的复制伙伴
  • 使用 HA 或复制的所有代理都已启用 Config-Sync 且状态为 UP

img

高可用性考虑

对于软件事件代理,您可能需要在配置复制和链接的步骤中提供第二个 connect-via 地址。例如,当您在 A 到 B/B' 上配置集群链接时,您可能需要提供 B 和 B' 的地址。

步骤

  1. 在 A 和 B 之间正常配置复制,使得 A 为活动状态,B 为备用状态:

    1. 在 A 和 B 上设置全局复制属性,使得 A 是 B 的复制伙伴,反之亦然。参见配置系统级复制设置。
    2. 在 B 上创建所有将从 A 复制的消息 VPN。参见配置消息 VPN。
    3. 为 A(活动)和 B(备用)的消息 VPN 启用复制。参见启用复制。
  2. 等待 A 和 B 上的 Config-Sync 报告所有复制的消息 VPN 为 Ready-InSync

  3. 在 B 上创建集群 C,并根据需要配置其认证和其他属性。参见配置 DMR 集群。

  4. 在 A 到 B 和 B 到 A 上创建新的集群链接(参见配置集群链接)。至少配置这些链接属性:

    • span 设置为 internal
    • 认证设置
    • connect-via 不得设置
    • 启用
  5. 验证 A 和 B 之间的链接状态为 UP。参见显示集群链接信息。

  6. 对于每个代理 X1 至 Xn,请执行以下操作:

    1. 等待 X 上的集群报告 X 和 B 之间缺少链接。
    2. 在 X 到 B 和 B 到 X 上创建新的集群链接(参见配置集群链接)。新链接属性必须与现有链接属性匹配,除了那些专门与 B 相关的属性:
      • 认证设置
      • connect-via
  7. 验证 X1 至 Xn 和 B 之间的链接状态为 UP。参见显示集群链接信息。

  8. 验证所有代理上的集群状态为 UP。参见显示集群信息。

新的复制伙伴 B 现在已完全集成到 DMR 网络中。

可选:您现在可以将 A 上选定的复制消息 VPN 移动,使得它们在 B 上处于活动状态。

从DMR网络中移除复制伙伴

如果被移除的节点没有托管任何客户端(即它是复制备用),您可以在不中断现有客户端服务的情况下,从 DMR 网络中的节点移除复制伙伴。在程序期间,预计集群的状态将被报告为 DOWN,并且在节点之间移除链接时会触发拓扑错误。尽管有这些错误,流量将继续通过网络流动,预计不会出现消息丢失。

假设

  • 集群 C 中的代理 A 已与代理 X1 至 Xn 建立了 DMR 链接(内部或外部)
  • 代理 A 和所有 X1..n 上的集群状态是 UP
  • 代理 B(将被移除)是 A 的复制伙伴
  • 所有消息 VPN 在代理 A 上处于活动复制状态,在代理 B 上处于备用复制状态
  • 使用冗余或复制的所有代理都已启用 Config-Sync 且状态为 UP

步骤

  1. 在每个代理 X1 至 Xn 上,禁用并移除到 B 的集群链接:
broker-X1(configure)# routing
broker-X1(configure/routing)# dynamic-message-routing
broker-X1(...igure/routing/dynamic-message-routing)# cluster cluster-C
broker-X1(...uting/dynamic-message-routing/cluster)# link broker-B
broker-X1(...uting/dynamic-message-routing/cluster)# shutdown
broker-X1(...uting/dynamic-message-routing/cluster)# exit
broker-X1(...uting/dynamic-message-routing/cluster)# no link broker-B

broker-X2(configure)# routing
broker-X2(configure/routing)# dynamic-message-routing
broker-X2(...igure/routing/dynamic-message-routing)# cluster cluster-C
broker-X2(...uting/dynamic-message-routing/cluster)# link broker-B
broker-X2(...uting/dynamic-message-routing/cluster)# shutdown
broker-X2(...uting/dynamic-message-routing/cluster)# exit
broker-X2(...uting/dynamic-message-routing/cluster)# no link broker-B

...

结果集群如下所示:

  1. 在 B 上禁用并移除集群 C:
broker-B(configure)# routing
broker-B(configure/routing)# dynamic-message-routing
broker-B(...igure/routing/dynamic-message-routing)# cluster cluster-C
broker-B(...igure/routing/dynamic-message-routing)# shutdown
broker-B(...igure/routing/dynamic-message-routing)# exit
broker-B(...igure/routing/dynamic-message-routing)# no cluster cluster-C

  1. 在 A 到 B 上禁用并移除集群链接(如步骤 1)。 节点 B 不再是集群的一部分,但仍然是 A 的复制伙伴,如下所示:

  2. 如果 A 上存在拓扑问题 B 和 A 之间的单向链接,请等待其清除。这可能需要几分钟。 在拓扑问题清除之前进行下一步可能会导致持久消息丢失。注意,在这一步存在拓扑问题 B 和 X 之间缺少外部链接 是正常的。

  3. 正常禁用并移除 A 和 B 之间的复制。

    1. 为 A 和 B 的所有消息 VPN 禁用复制:

      broker-A(configure)# message-vpn vpn-one
      broker-A(configure/message-vpn)# replication shutdown
      broker-A(configure/message-vpn)# exit
      broker-A(configure)# message-vpn vpn-two
      broker-A(configure/message-vpn)# replication shutdown
      broker-A(configure/message-vpn)# exit
      ...
      broker-B(configure)# message-vpn vpn-one
      broker-B(configure/message-vpn)# replication shutdown
      broker-B(configure/message-vpn)# exit
      broker-B(configure)# message-vpn vpn-two
      broker-B(configure/message-vpn)# replication shutdown
      broker-B(configure/message-vpn)# exit
      ...
  4. 在 A 和 B 上移除全局复制属性:

    broker-A(configure)# replication
    broker-A(configure/replication)# no interface
    broker-A(configure/replication)# no mate broker-B
    broker-A(configure/replication)# no mate connect-via <addr-port>
    broker-B(configure)# replication
    broker-B(configure/replication)# no interface
    broker-B(configure/replication)# no mate broker-A
    broker-B(configure/replication)# no mate connect-via <addr-port>

    在前面的代码中,<addr-port> 是事件代理的 IP 地址或主机名,格式为 IP-address:porthostname:port,其中 IP 地址以点分十进制表示法 nnn.nnn.nnn.nnn 指定,端口是复制伙伴虚拟路由器上的端口号(指定为 0 到 65535 之间的十进制值)。

  5. 验证所有代理上的集群状态为 UP。参见显示集群信息。

此时 B 已完全从 DMR 网络中移除,不再是 A 的复制伙伴,如下所示:

在DMR集群中为复制配对两个节点

将两个已存在于 DMR 网络中的节点组成一个复制组会中断服务 - 任何由一个代理托管的客户都必须重新托管到另一个代理上。在程序期间,预计集群的状态将被报告为 DOWN,并且在节点之间调整链接时会触发拓扑错误一段时间。尽管有这些错误,流量将继续通过网络流动。

在要配对的代理之一(在本例中为 B)上,目标是或当前在该代理上排队的消息将会丢失。

假设

  • 代理 A 和 B 都在集群 C 中,通过内部链接连接
  • 代理 A 和 B 已与代理 X1 至 Xn 建立了 DMR 链接(内部或外部)
  • A、B 和 X1..n 上的所有集群状态是 UP
  • 代理 B 将成为 A 的复制伙伴
  • 使用 HA 或复制的所有代理都已启用 Config-Sync 且状态为 UP(然而,如果 B 是非冗余代理,Config-Sync 在 B 上在步骤 7 之前操作为 DOWN)
  • 复制组 A/B 的客户端已配置为在它们的主机列表中包含 A 和 B 的地址

高可用性考虑

  • 对于软件事件代理,您可能需要在配置复制和链接的步骤中提供第二个 connect-via 地址。例如,当您在 A 到 B/B' 上配置集群链接时,您可能需要提供 B 和 B' 的地址。
  • 必须在 B 和 B' 上启用/禁用 msg-backbone。

步骤

  1. 在 B 上关闭 msg-backbone 服务。任何连接到 B 的客户端将转移到 A。

    broker-B(configure)# service msg-backbone shutdown
  2. 在 B 上关闭并移除所有到代理 X1 至 Xn 的集群链接

    broker-B(configure)# routing
    broker-B(configure/routing)# dynamic-message-routing
    broker-B(...igure/routing/dynamic-message-routing)# cluster cluster-C
    broker-B(...uting/dynamic-message-routing/cluster)# link broker-X1
    broker-B(...uting/dynamic-message-routing/cluster)# shutdown
    broker-B(...uting/dynamic-message-routing/cluster)# exit
    broker-B(...uting/dynamic-message-routing/cluster)# no link broker-X1
    broker-B(...uting/dynamic-message-routing/cluster)# link broker-X2
    broker-B(...uting/dynamic-message-routing/cluster)# shutdown
    broker-B(...uting/dynamic-message-routing/cluster)# exit
    broker-B(...uting/dynamic-message-routing/cluster)# no link broker-X2
    ...
    broker-B(...uting/dynamic-message-routing/cluster)# link broker-Xn
    broker-B(...uting/dynamic-message-routing/cluster)# shutdown
    broker-B(...uting/dynamic-message-routing/cluster)# exit
    broker-B(...uting/dynamic-message-routing/cluster)# no link broker-Xn
  3. 在每个代理 X1 至 Xn 上,禁用并移除到 B 的集群链接。

    broker-X1(configure)# routing
    broker-X1(configure/routing)# dynamic-message-routing
    broker-X1(...igure/routing/dynamic-message-routing)# cluster <cluster-name>
    broker-X1(...uting/dynamic-message-routing/cluster)# link broker-B
    broker-X1(...uting/dynamic-message-routing/cluster)# shutdown
    broker-X1(...uting/dynamic-message-routing/cluster)# exit
    broker-X1(...uting/dynamic-message-routing/cluster)# no link broker-B
    broker-X2(configure)# routing
    broker-X2(configure/routing)# dynamic-message-routing
    broker-X2(...igure/routing/dynamic-message-routing)# cluster <cluster-name>
    broker-X2(...uting/dynamic-message-routing/cluster)# link broker-B
    broker-X2(...uting/dynamic-message-routing/cluster)# shutdown
    broker-X2(...uting/dynamic-message-routing/cluster)# exit
    broker-X2(...uting/dynamic-message-routing/cluster)# no link broker-B
    ...

    节点 B 现在只与节点 A 连接,如下所示:

  4. 在 A 和 B 之间正常配置复制,使得 A 为活动状态,B 为备用状态:

    1. 在 A 和 B 上设置全局复制属性,使得 A 是 B 的复制伙伴,反之亦然。参见配置复制伙伴。
    2. 在 B 上创建所有将从 A 复制的消息 VPN。参见配置消息 VPN。
    3. 为 A(活动)和 B(备用)的消息 VPN 启用复制。参见启用复制。
  5. 移除 A 到 B 和 B 到 A 的集群链接的 connect-via 设置。

    broker-A(configure)# routing
    broker-A(configure/routing)# dynamic-message-routing
    broker-A(...igure/routing/dynamic-message-routing)# cluster cluster-C
    broker-A(...uting/dynamic-message-routing/cluster)# link broker-B
    broker-A(.../dynamic-message-routing/cluster/link)# shutdown
    broker-A(.../dynamic-message-routing/cluster/link)# no connect-via <addr-port>

    broker-A(...uting/dynamic-message-routing/cluster)# link broker-B
    broker-A(.../dynamic-message-routing/cluster/link)# no shutdown
    broker-B(configure)# routing
    broker-B(configure/routing)# dynamic-message-routing
    broker-B(...igure/routing/dynamic-message-routing)# cluster cluster-C
    broker-B(...uting/dynamic-message-routing/cluster)# link broker-A
    broker-B(.../dynamic-message-routing/cluster/link)# shutdown
    broker-B(.../dynamic-message-routing/cluster/link)# no connect-via <addr-port>

    broker-B(...uting/dynamic-message-routing/cluster)# link broker-A
    broker-B(.../dynamic-message-routing/cluster/link)# no shutdown

    在前面的代码中,<addr-port> 是事件代理的 IP 地址或主机名,格式为 IP-address:porthostname:port,其中 IP 地址以点分十进制表示法 nnn.nnn.nnn.nnn 指定,端口是复制伙伴虚拟路由器上的端口号(指定为 0 到 65535 之间的十进制值)。

  6. 对于每个代理 X1 至 Xn,请执行以下操作:

    1. 等待 X 上的集群报告 X 和 B 之间缺少链接。

    2. 在 B 到 X 上创建新的链接(参见配置集群链接)。至少配置这些链接属性:

      • span 设置为 internalexternal 适当
      • 认证设置
      • connect-via
      • 启用

如果跨度是外部的,在 B 上创建相应的 DMR 桥(参见配置 DMR 桥)。

  1. 在 B 上启用 msg-backbone 服务。

    broker-B(configure)# no service msg-backbone shutdown
  2. 等待 A 和 B 上的 Config-Sync 报告所有复制的消息 VPN 为同步。

  3. 验证 A 和 B 之间的链接状态为 UP。参见显示集群链接信息。

  4. 对于每个代理 X1 至 Xn 请执行以下操作: 创建 X 到 B 的新链接(参见配置集群链接)。至少配置这些链接属性:

    • span 设置为 internalexternal 适当
    • 认证设置
    • connect-via
    • 启用

如果跨度是外部的,在 X 上创建相应的 DMR 桥(参见配置 DMR 桥)。

  1. 验证 X1 至 Xn 和 B 之间的链接状态为 UP。参见显示集群链接信息。
  2. 验证所有代理上的集群状态为 UP。参见显示集群信息。

新的复制伙伴 B 现在已完全集成到 DMR 网络中。

可选:您现在可以将 A 上选定的复制消息 VPN 移动,使得它们在 B 上处于活动状态。

向DMR集群添加复制组

您可以将现有的复制组作为新节点添加到 DMR 网络中,而不中断现有客户端的服务。在程序期间,预计集群的状态将报告为 DOWN,并且在节点之间添加链接时会触发拓扑错误一段时间。尽管如此,现有的网络流量将继续,预计不会出现消息丢失。

假设锚点

  • 代理 A 和 B 是一个没有配置集群的复制组
  • A 和 B 上所有复制的消息 VPN 在 A 上为 active,在 B 上为 standby
  • 代理 X1 至 Xn 属于集群 C
  • X1..n 上的所有集群状态是 UP
  • 使用 HA 或复制的所有代理都已启用 Config-Sync 且状态为 UP

高可用性考虑锚点

对于软件事件代理,您可能需要在配置复制和链接的步骤中提供第二个 connect-via 地址。例如,当您在 A 到 B/B' 上配置集群链接时,您可能需要提供 B 和 B' 的地址。

步骤锚点

  1. 在代理 A 和 B 上创建集群 C,并根据需要配置其认证和其他属性。参见配置 DMR 集群。

  2. 在 A 上,为 X1 至 Xn 上启用 DMR 的每个消息 VPN 启用 DMR。

    broker-A(configure)# message-vpn vpn-one
    broker-A(configure/message-vpn)# dynamic-message-routing
    broker-A(...e/message-vpn/dynamic-message-routing)# no shutdown
    broker-A(configure/message-vpn)# exit
    broker-A(configure)# message-vpn vpn-two
    broker-A(configure/message-vpn)# dynamic-message-routing
    broker-A(...e/message-vpn/dynamic-message-routing)# no shutdown
    broker-A(configure/message-vpn)# exit
    ...
  3. 从 A 到 B 和从 B 到 A 创建新的集群链接(参见配置集群链接)。至少配置这些链接属性:

    • span 设置为 internal
    • 认证设置
    • connect-via 不得设置
    • 启用
  4. 验证 A 和 B 之间的链接状态为 UP(参见显示集群链接信息),并且集群 C 在 A 和 B 上都为 UP(参见显示集群信息)。

  5. 在 A 上为每个代理 X1 至 Xn 创建新的集群链接(参见配置集群链接)。至少配置这些链接属性:

    • span 设置为 internal
    • 认证设置
    • connect-via
    • 启用
  6. 在每个代理 X1 至 Xn 上,为 A 创建新的链接(参见配置集群链接)。至少配置这些链接属性:

    • span 设置为 internal
    • 认证设置
    • connect-via
    • 启用
  7. 验证 X1 至 Xn 和 A 之间的链接状态为 UP(参见显示集群链接信息)。

  8. 在 B 上为每个代理 X1 至 Xn 创建新的链接(参见配置集群链接)。至少配置这些链接属性:

    • span 设置为 internal
    • 认证设置
    • connect-via
    • 启用
  9. 对于每个代理 X1 至 Xn,请执行以下操作:

    1. 等待 X 上的集群报告拓扑问题,可以是:
      • X 和 B 之间缺少链接
      • X 和 B 之间存在单向链接
    2. 在 X 到 B 上创建新的链接(参见配置集群链接)。至少配置这些链接属性:
      • span 设置为 internal
      • 认证设置
      • connect-via
      • 启用
  10. 验证所有代理上的集群状态为 UP。参见显示集群信息。

此时,新的复制组 A/B 已完全集成到 DMR 网络中。如果需要,您可以将 A 上选定的复制消息 VPN 移动,使得它们在 B 上处于活动状态。