跳到主要内容

水平扩展配置

以下部分提供了一个示例,展示如何使用动态消息路由(DMR)扩展单个事件代理的能力。

这个示例向您展示如何创建一个包含三个节点(每个节点可以是一个单独的事件代理或高可用性(HA)组)的单一集群。三个节点共同提高了连接限制、订阅限制、队列限制和带宽,超过了单个节点的能力,而无需额外的订阅管理。

在启用DMR水平扩展之前,您必须确保满足“先决条件”部分讨论的要求。

使用此示例

在这个配置示例中,一个集群包含三个事件代理(节点),内部链接配置为连接这些节点。

以下示例显示了一个集群,节点使用占位符名称,使用Broker-<letter>表示法,代表该节点的路由器名称(每个可能是一个独立的代理或HA组中的主代理)。请注意,在下面的示例命令中,IP地址、消息VPN的名称以及名称Cluster-ABroker-ABroker-BBroker-C是占位符,您应该用您自己的值替换它们。

第1步:创建安全集群

在将您的节点网络连接在一起之前,您必须创建一个包含这些节点的集群。

在这个示例中,为三个参与节点创建了一个单一的集群,并且使用基本认证以及共享密码(myshared_secret123)来保护集群。

horizontal-scale-cluster_703x450.png

名称Broker-ABroker-BBroker-C是我们正在链接的事件代理的占位符路由器名称(每个可能是一个独立的代理或HA组中的主代理),Cluster-A是集群的名称。

为所有三个节点创建一个安全集群:

  1. 登录到Broker-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
  1. Broker-B添加到集群,登录到Broker-B并创建一个与Broker-A上的集群同名和密码的安全集群:
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-A
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
  1. Broker-C添加到集群,登录到Broker-C并创建一个与Broker-A上的集群同名和密码的安全集群:
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-A
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步:为每个节点创建集群链接

创建集群后,您可以在节点之间创建双向链接以建立控制通道。一旦建立了控制通道,每个节点所需的订阅集可以与其他节点交换。此外,随着本地客户端和队列订阅的变化,订阅集会动态保持最新。

在这个示例中,三个节点之间配置了完整的集群链接网格,这是水平扩展(即使用内部链接)的要求。此配置在三个节点之间创建了一个控制通道。

horizontal-scale-control_788x450.png

对于生产部署,我们建议使用localremote链接发起者配置。

为三个节点创建集群链接网格:

  1. 登录到Broker-A并从Broker-ABroker-BBroker-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 internal
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 internal
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
  1. 登录到Broker-B并从Broker-BBroker-ABroker-C创建链接:
Broker-B> enable
Broker-B# config
Broker-B(configure)# routing dynamic-message-routing
Broker-B(...igure/routing/dynamic-message-routing)# cluster Cluster-A
Broker-B(...uting/dynamic-message-routing/cluster)# create link Broker-A
Broker-B(.../dynamic-message-routing/cluster/link)# span internal
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 internal
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
  1. 登录到Broker-C并从Broker-CBroker-ABroker-B创建链接:
Broker-C> enable
Broker-C# config
Broker-C(configure)# routing dynamic-message-routing
Broker-C(...igure/routing/dynamic-message-routing)# cluster Cluster-A
Broker-C(...uting/dynamic-message-routing/cluster)# create link Broker-A
Broker-C(.../dynamic-message-routing/cluster/link)# span internal
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 internal
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 *命令,并验证所有链接的AdminOperational状态均为Up。例如,对于Cluster-A

Broker-A> show cluster Cluster-A link *

Cluster Name : Cluster-A
Node Name : Broker-A

Link Admin Oper Fail Reason / Uptime
---------------------------------- ----- ----- ----------------------------
#ACTIVE Up Up 0d 0h 3m 35s
Broker-B Up Up 0d 0h 2m 43s
Broker-C Up Up 0d 0h 2m 24s

故障排除失败锚点

如果任何链接的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。此配置在节点间建立了数据通道。建立数据通道后,应用程序消息根据控制通道维护的订阅集在节点间交换。

在这个示例中,为每个节点上的消息VPNred启用了DMR,从而在三个节点间创建了一个数据通道。

DMR中的消息VPN名称必须相同才能进行水平扩展。在这种情况下,消息VPN被命名为red。名称red是示例命令中消息VPN的占位符,您应该用您自己的消息VPN名称替换它。更多信息请参见配置消息VPN。

horizontal-scale-data_737x450.png

为每个参与的消息VPN启用DMR:

  1. 登录到Broker-A并在您想要参与集群拓扑的消息VPN上启用DMR——在这个例子中是red消息VPN。
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
  1. 登录到Broker-B并在Broker-A上启用的相同消息VPN上启用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
  1. 登录到Broker-C并在Broker-A上启用的相同消息VPN上启用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

第5步:验证数据通道是否运行

此时,您已经配置了所有必要的组件,以在您的PubSub+事件代理网络上启用DMR。要验证DMR配置是否成功并且按预期工作,请在一个节点上发布消息到一个主题,并确保您可以在另一个节点上的队列中使用匹配的主题订阅消费消息。

在开始这一步之前,您必须在Broker-B上创建一个具有匹配订阅a/b的队列。有关添加主题的信息,请参见添加队列的主题订阅。

horizontal-scale-traffic_811x450.png

使用SDKPerf验证数据通道是否运行:

  1. 在集群中的一个节点上发布消息。
sdkperf_c -cip=192.0.2.1:55443 -ptl=a/b -mn=50 -mr=50 -md
...
等待发布完成。 Ctrl-c退出。

允许客户端完成接收。 等待:2秒
-----------------------------------------------------
聚合消息发送统计(总客户端数:1)
传输的总消息数 = 50
计算的发布速率(msg/sec) = 49.99

-----------------------------------------------------
聚合消息接收统计(总客户端数:1)
所有客户端接收的总消息数 = 0
计算的接收速率(msg/sec聚合) = 0.00
带有丢弃指示的消息接收数 = 0
  1. 在集群中的另一个节点上订阅具有匹配主题订阅的队列,并验证发布的流量是否被订阅者接收。
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