多站点连接配置
以下部分提供了一个示例,展示如何使用动态消息路由(DMR)将运行在三个不同站点的应用程序连接起来:
- 一个云服务提供商环境,例如亚马逊网络服务(Amazon Web Services)
- 另一个与第一个不同的云服务提供商环境,例如谷歌云平台(Google Cloud Platform)
- 一个本地数据中心
在启用DMR多站点连接之前,您必须确保满足“先决条件”部分讨论的要求。
使用此示例
在这个配置示例中,每个站点由一个单独的集群组成,该集群包含一个单独的节点,即一个单独的事件代理或一个单独的高可用性(HA)冗余组。在每个节点(因此,每个站点)之间配置了外部链接。外部链接支持动态订阅学习,同时支持直接和保证消息传递模式。
以下示例显示了使用占位符名称Cluster-A
、Cluster-B
和Cluster-C
创建的集群。节点的占位符名称与集群相对应,使用Broker-<letter_of_cluster>
表示法,代表该代理的路由器名称。例如,对于名为Cluster-A
的集群,节点被称为Broker-A
。
请注意,在下面的示例命令中,IP地址、消息VPN名称、密码以及名称Cluster-A
、Cluster-B
、Cluster-C
、Broker-A
、Broker-B
和Broker-C
是占位符,您应该用您自己的值替换它们。
第1步:为每个站点创建安全集群
在连接不同站点的节点之前,您必须在每个站点创建一个集群来包含相应的节点。每个集群都使用一个共同的共享密码进行保护(我们使用myshared_secret123
作为占位符)。
为每个站点创建安全集群:
- 登录到
Broker-A
,进入节点的Solace CLI,并创建一个名为Cluster-A
的集群:
Broker-A > enable
Broker-A# config
Broker-A(configure)# routing
Broker-A(configure/routing)# dynamic-message-routing
Broker-A(...igure/routing/dynamic-message-routing)# create cluster Cluster-A
Broker-A(...uting/dynamic-message-routing/cluster)# authentication
Broker-A(...essage-routing/cluster/authentication)# basic
Broker-A(...-routing/cluster/authentication/basic)# password myshared_secret123
Broker-A(...-routing/cluster/authentication/basic)# no shutdown
Broker-A(...-routing/cluster/authentication/basic)# exit
Broker-A(...essage-routing/cluster/authentication)# exit
Broker-A(...uting/dynamic-message-routing/cluster)# no shutdown
- 登录到
Broker-B
,进入节点的Solace CLI,并创建一个名为Cluster-B
的集群。
Broker-B > enable
Broker-B# config
Broker-B(configure)# routing
Broker-B(configure/routing)# dynamic-message-routing
Broker-B(...igure/routing/dynamic-message-routing)# create cluster Cluster-B
Broker-B(...uting/dynamic-message-routing/cluster)# authentication
Broker-B(...essage-routing/cluster/authentication)# basic
Broker-B(...-routing/cluster/authentication/basic)# password myshared_secret123
Broker-B(...-routing/cluster/authentication/basic)# no shutdown
Broker-B(...-routing/cluster/authentication/basic)# exit
Broker-B(...essage-routing/cluster/authentication)# exit
Broker-B(...uting/dynamic-message-routing/cluster)# no shutdown
- 登录到
Broker-C
,进入节点的Solace CLI,并创建一个名为Cluster-C
的集群。
Broker-C> enable
Broker-C# config
Broker-C(configure)# routing
Broker-C(configure/routing)# dynamic-message-routing
Broker-C(...igure/routing/dynamic-message-routing)# create cluster Cluster-C
Broker-C(...uting/dynamic-message-routing/cluster)# authentication
Broker-C(...essage-routing/cluster/authentication)# basic
Broker-C(...-routing/cluster/authentication/basic)# password myshared_secret123
Broker-C(...-routing/cluster/authentication/basic)# no shutdown
Broker-C(...-routing/cluster/authentication/basic)# exit
Broker-C(...essage-routing/cluster/authentication)# exit
Broker-C(...uting/dynamic-message-routing/cluster)# no shutdown
第2步:为每个站点创建集群链接
创建每个站点的集群后,您可以在节点之间创建双向链接以建立控制通道。一旦建立了控制通道,每个站点的节点所需的订阅集可以与其他节点交换。此外,随着本地客户端和队列订阅的变化,订阅集会动态保持最新。在本节中,我们登录到每个集群的节点,并在每个站点之间创建集群链接(外部链接)。此配置在三个站点之间创建了一个控制通道。
这个多站点连接配置示例显示了一个完整的网格(即,每个集群都通过外部链接连接到所有其他集群)。这允许订阅传播和数据流在所有集群之间发生。有关订阅传播和数据流的更多信息,请参见DMR订阅传播和数据转发。
对于多站点连接配置,不需要使用完整的外部链接网格。如果您不希望在某些集群之间发生订阅传播或数据流,请不要在这些集群之间创建外部链接。例如,如果您不希望在多站点连接配置中Cluster-A
(AWS云)和Cluster-B
(谷歌云平台)之间发生订阅传播或数据流,请不要在这两个集群之间创建外部链接。有关网络规则的更多信息,请参见网络构造规则。
对于生产部署,我们建议使用local
和remote
链接发起者配置。
为每个站点创建集群链接:
名称Broker-A
、Broker-B
和Broker-C
是我们正在链接的事件代理的占位符路由器名称(每个可能是一个独立的代理或HA组中的主代理),Cluster-A
、Cluster-B
和Cluster-C
是每个集群的占位符名称。
- 登录到
Broker-A
,创建从Broker-A
到Broker-B
和Broker-C
的集群链接。在此示例中,请注意Broker-B
和Broker-C
是其他集群中代理的远程路由器名称。
Broker-A> enable
Broker-A# config
Broker-A(configure)# routing dynamic-message-routing
Broker-A(...igure/routing/dynamic-message-routing)# cluster Cluster-A
Broker-A(...uting/dynamic-message-routing/cluster)# create link Broker-B
Broker-A(.../dynamic-message-routing/cluster/link)# span external
Broker-A(.../dynamic-message-routing/cluster/link)# initiator local
Broker-A(.../dynamic-message-routing/cluster/link)# connect-via 192.0.2.2
Broker-A(.../dynamic-message-routing/cluster/link)# transport ssl
Broker-A(.../dynamic-message-routing/cluster/link)# no shutdown
Broker-A(.../dynamic-message-routing/cluster/link)# exit
Broker-A(...uting/dynamic-message-routing/cluster)# create link Broker-C
Broker-A(.../dynamic-message-routing/cluster/link)# span external
Broker-A(.../dynamic-message-routing/cluster/link)# initiator remote
Broker-A(.../dynamic-message-routing/cluster/link)# transport ssl
Broker-A(.../dynamic-message-routing/cluster/link)# no shutdown
- 登录到
Broker-B
,在集群Cluster-B
中创建从Broker-B
到Broker-A
和Broker-C
的集群链接。在此示例中,请注意Broker-A
和Broker-C
是其他集群中代理的远程路由器名称。
Broker-B> enable
Broker-B# config
Broker-B(configure)# routing dynamic-message-routing
Broker-B(...igure/routing/dynamic-message-routing)# cluster Cluster-B
Broker-B(...uting/dynamic-message-routing/cluster)# create link Broker-A
Broker-B(.../dynamic-message-routing/cluster/link)# span external
Broker-B(.../dynamic-message-routing/cluster/link)# initiator remote
Broker-B(.../dynamic-message-routing/cluster/link)# transport ssl
Broker-B(.../dynamic-message-routing/cluster/link)# no shutdown
Broker-B(.../dynamic-message-routing/cluster/link)# exit
Broker-B(...uting/dynamic-message-routing/cluster)# create link Broker-C
Broker-B(.../dynamic-message-routing/cluster/link)# span external
Broker-B(.../dynamic-message-routing/cluster/link)# initiator remote
Broker-B(.../dynamic-message-routing/cluster/link)# transport ssl
Broker-B(.../dynamic-message-routing/cluster/link)# no shutdown
- 登录到
Broker-C
,在集群Cluster-C
中创建 从Broker-C
到Broker-A
和Broker-B
的集群链接。在此示例中,请注意Broker-A
和Broker-B
是其他集群中代理的远程路由器名称。
Broker-C> enable
Broker-C# config
Broker-C(configure)# routing dynamic-message-routing
Broker-C(...igure/routing/dynamic-message-routing)# cluster Cluster-C
Broker-C(...uting/dynamic-message-routing/cluster)# create link Broker-A
Broker-C(.../dynamic-message-routing/cluster/link)# span external
Broker-C(.../dynamic-message-routing/cluster/link)# initiator local
Broker-C(.../dynamic-message-routing/cluster/link)# connect-via 192.0.2.1
Broker-C(.../dynamic-message-routing/cluster/link)# transport ssl
Broker-C(.../dynamic-message-routing/cluster/link)# no shutdown
Broker-C(.../dynamic-message-routing/cluster/link)# exit
Broker-C(...uting/dynamic-message-routing/cluster)# create link Broker-B
Broker-C(.../dynamic-message-routing/cluster/link)# span external
Broker-C(.../dynamic-message-routing/cluster/link)# initiator local
Broker-C(.../dynamic-message-routing/cluster/link)# connect-via 192.0.2.2
Broker-C(.../dynamic-message-routing/cluster/link)# transport ssl
Broker-C(.../dynamic-message-routing/cluster/link)# no shutdown
第3步:验证所有控制通道是否运行
现在您已经配置了支持站点间控制通道的集群链接,您可以通过验证每个链接是否运行来检查配置。
要检查配置,请在每个参与节点上输入show cluster <cluster-name-pattern> link *
命令,并验证所有链接的Admin
和Operational
状态均为Up
。在这种情况下,我们登录到Broker-C
。
Broker-C> show cluster Cluster-C link *
Cluster Name : Cluster-C
Node Name : Broker-C
Link Admin Oper Fail Reason / Uptime
---------------------------------- ----- ----- ----------------------------
#ACTIVE Up Up 0d 0h 3m 35s
Broker-A Up Up 0d 0h 2m 40s
Broker-B Up Up 0d 0h 2m 28s
故障排除失败锚点
如果任何链接的Operational
状态为Down
,请使用以下显示命令获取更多信息:
show cluster <cluster-name-pattern> detail
show cluster <cluster-name-pattern> link <link-name-pattern> detail
show cluster <cluster-name-pattern> link <link-name-pattern> channel detail
为了获得完整的信息,您可能需要在链接的两端都执行这些命令。
第4步:为每个参与的消息VPN启用DMR
配置好必要的集群链接后,您可以为想要参与集群拓扑的消息VPN启用DMR,并通过DMR桥接链接消息VPN。此配置在节点间建立了数据通道。一旦建立了数据通道,应用程序消息就会根据控制通道维护的订阅集在节点间交换。
这一步假设您已经通过create message-vpn <vpn-name>
命令创建了red
、blue
和green
消息VPN。名称red
、blue
、green
是示例命令中消息VPN的占位符字符串——您应该用您自己的消息VPN名称替换这些名称。更多信息请参见配置消息VPN。
在这个示例中,Broker-A
上启用了red
和blue
消息VPN的DMR,Broker-B
上启用了red
、blue
和green
消息VPN的DMR,Broker-C
上启用了red
和green
消息VPN的DMR。还配置了必要的DMR桥接以链接每个消息VPN。这在三个站点间创建了一组数据通道。
为每个参与的消息VPN启用DMR:
- 登录到集群
Cluster-A
中的Broker-A
,进入Solace CLI,在每个参与的消息VPN 上启用DMR,然后创建必要的DMR桥接。
Broker-A> enable
Broker-A# config
Broker-A(configure)# message-vpn red
Broker-A(configure/message-vpn)# dynamic-message-routing
Broker-A(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-A(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-B
Broker-A(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn red
Broker-A(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-A(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-C
Broker-A(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn red
Broker-A(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-A(...e/message-vpn/dynamic-message-routing)# exit
Broker-A(configure)# message-vpn blue
Broker-A(...e/message-vpn/dynamic-message-routing)# dynamic-message-routing
Broker-A(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-A(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-B
Broker-A(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn blue
- 登录到集群
Cluster-B
中的Broker-B
,在每个参与的消息VPN上启用DMR,并创建必要的DMR桥接。
Broker-B> enable
Broker-B# config
Broker-B(configure)# message-vpn red
Broker-B(configure/message-vpn)# dynamic-message-routing
Broker-B(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-B(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-A
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn red
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-B(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-C
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn red
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-B(...e/message-vpn/dynamic-message-routing)# exit
Broker-B(configure)# message-vpn blue
Broker-B(configure/message-vpn)# dynamic-message-routing
Broker-B(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-B(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-A
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn blue
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-B(...e/message-vpn/dynamic-message-routing)# exit
Broker-B(configure)# message-vpn green
Broker-B(configure/message-vpn)# dynamic-message-routing
Broker-B(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-B(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-C
Broker-B(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn green
- 登录到集群
Cluster-C
中的Broker-C
,在每个参与的消息VPN上启用DMR,并创建必要的DMR桥接。
Broker-C> enable
Broker-C# config
Broker-C(configure)# message-vpn red
Broker-C(configure/message-vpn)# dynamic-message-routing
Broker-C(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-C(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-A
Broker-C(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn red
Broker-C(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-C(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-B
Broker-C(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn red
Broker-C(...pn/dynamic-message-routing/dmr-bridge)# exit
Broker-C(...e/message-vpn/dynamic-message-routing)# exit
Broker-C(configure)# message-vpn green
Broker-C(configure/message-vpn)# dynamic-message-routing
Broker-C(...e/message-vpn/dynamic-message-routing)# no shutdown
Broker-C(...e/message-vpn/dynamic-message-routing)# create dmr-bridge Broker-B
Broker-C(...pn/dynamic-message-routing/dmr-bridge)# remote message-vpn green
第5步:验证数 据通道是否运行
此时,您已经配置了所有必要的组件以在您的PubSub+事件代理网络上启用DMR。要验证DMR配置是否成功并且按预期工作,请在一个节点上发布消息到一个主题,并确认您可以在另一个站点的节点上的队列中使用匹配的主题订阅消费消息。在开始这一步之前,您必须在Broker-B
上创建一个具有匹配订阅a/b
的队列。有关添加主题的信息,请参见添加队列的主题订阅。
使用SDKPerf验证数据通道是否运行:
- 在一个站点的节点上发布消息。
sdkperf_c -cip=192.0.2.1:55443 -ptl=a/b -mn=50 -mr=50 -md -cu=user1@red
...
等待发布完成。 Ctrl-c退出。
允许客户端完成接收。 等待:2秒
-----------------------------------------------------
聚合消息发送统计(总客户端数:1)
传输的总消息数 = 50
计算的发布速率(msg/sec) = 49.99
-----------------------------------------------------
聚合消息接收统计(总客户端数:1)
所有客户端接收的总消息数 = 0
计算的接收速率(msg/sec聚合) = 0.00
带有丢弃指示的消息接收数 = 0
- 在另一个站点的节点上订阅具有匹配主题订阅的队列,并验证发布的流量是否被订阅者接收。
sdkperf_c -cip=192.0.2.2:55443 -sql=Q1
...
接收消息。 Ctrl-c退出。
-----------------------------------------------------
聚合消息发送统计(总客户端数:1)
传输的总消息数 = 0
计算的发布速率(msg/sec) = 0.00
-----------------------------------------------------
聚合消息接收统计(总客户端数:1)
所有客户端接收的总消息数 = 50
计算的接收速率(msg/sec聚合) = 14626.11
带有丢弃指示的消息接收数 = 0