ADC

MQTT 负载平衡

消息队列遥测传输 (MQTT) 是物联网 (IoT) 的 OASIS 标准消息协议。MQTT 是一种灵活且易于使用的技术,可在物联网系统内提供有效的通信。MQTT 是一种基于经纪商的协议,广泛用于促进客户和经纪商之间的报文交换。

MQTT 的以下主要优势使其成为物联网设备的理想选择:

  • 可靠性
  • 快速响应时间
  • 能够支持无限设备
  • 发布/订阅消息,非常适合多对多沟通

物联网是嵌入传感器、软件、网络连接和必要电子设备的互联设备的网络。嵌入式组件使物联网设备能够收集和交换数据。物联网设备使用率的增加给网络基础设施带来了多种挑战,其中 Scale 是突出的挑战。在物联网设备的大规模部署中,需要快速分析每台 IoT 设备生成的数据。为了达到规模要求和资源的有效利用,必须均匀分配代理池中的负载。在 MQTT 协议的支持下,您可以在物联网部署中使用 Citrix ADC 设备来对 MQTT 流量进行负载均衡。

下图描述了使用 Citrix ADC 设备对 MQTT 流量进行负载均衡的 MQTT 体系结构。

MQTT 系统

使用 MQTT 协议的物联网部署包括以下组件:

  • MQTT 经纪人。接收来自客户端的所有消息然后将消息路由到相应的目标客户端的服务器。经纪人负责接收所有消息、过滤消息、确定谁订阅了每条消息,并将消息发送给这些已订阅的客户端。经纪商是每条消息必须通过的中心枢纽。
  • MQTT 客户端。任何设备,从微控制器到成熟的服务器,它运行 MQTT 库并通过网络连接到 MQTT 代理。出版商和订阅者都是 MQTT 客户端。发布者和订阅者标签是指客户端是在发布消息还是订阅接收消息。
  • MQTT 负载均衡器。Citrix ADC 设备配置了 MQTT 负载平衡虚拟服务器,以对 MQTT 流量进行负载平衡。

在典型的物联网部署中,代理(服务器群集)管理物联网设备组(物联网客户端)。Citrix ADC 设备根据客户端 ID、主题和用户名等各种参数对 MQTT 流量进行负载平衡。

为 MQTT 流量配置负载均衡

要使 Citrix ADC 设备对 MQTT 流量进行负载均衡,请执行以下配置任务:

  1. 配置 MQTT/MQTT_TLS 服务或服务组。
  2. 配置 MQTT/MQTT_TLS 负载平衡虚拟服务器。
  3. 将 MQTT/MQTT_TLS 服务绑定到 MQTT/MQTT_TLS 负载平衡虚拟服务器。
  4. 配置 MQTT/MQTT_TLS 内容交换虚拟服务器。
  5. 配置指定目标负载平衡虚拟服务器的内容切换操作
  6. 配置内容切换策略。
  7. 将内容切换策略绑定到已配置为重定向到特定负载平衡虚拟服务器的内容交换虚拟服务器。
  8. 保存配置。

使用 CLI 为 MQTT 流量配置负载平衡

配置 MQTT/MQTT_TLS 服务或服务组。

add service <name> <IP> <protocol> <port>
add servicegroup <ServiceGroupName> <Protocol>
bind servicegroup <serviceGroupName> <IP> <port>
<!--NeedCopy-->

示例:

add service srvc1 10.106.163.3 MQTT 1883
add servicegroup srvcg1 MQTT
bind servicegroup srvcg1 10.106.163.3 1883
<!--NeedCopy-->

配置 MQTT/MQTT_TLS 负载平衡虚拟服务器。

add lb vserver <name> <protocol> <IPAddress> <port>
<!--NeedCopy-->

示例:

add lb vserver lb1 MQTT 10.106.163.9 1883
<!--NeedCopy-->

将 MQTT/MQTT_TLS 服务或服务组绑定到 MQTT 负载平衡虚拟服务器。

bind lb vserver <name> <serviceName>
bind lb vserver <name> <servicegroupName>
<!--NeedCopy-->

示例:

bind lb vserver lb1 srvc1
bind lb vserver lb1 srvcg1
<!--NeedCopy-->

配置 MQTT/MQTT_TLS 内容交换虚拟服务器。

add cs vserver <name> <protocol> <IPAddress> <port>
<!--NeedCopy-->

示例:

add cs vserver cs1 MQTT 10.106.163.13 1883
<!--NeedCopy-->

配置指定目标负载平衡虚拟服务器的内容切换操作。

add cs action <name> -targetLBVserver <string> [-comment <string>]
<!--NeedCopy-->

示例:

add cs action act1 -targetlbvserver lbv1
<!--NeedCopy-->

配置内容切换策略。

add cs policy <policyName> [-url <string> | -rule <expression>] –action <actName>
<!--NeedCopy-->

示例:

add cs policy cspol1  -rule  “MQTT.COMMAND.EQ(CONNECT) && MQTT.CONNECT.FLAGS.QOS.eq(2)” -action act1
<!--NeedCopy-->

将内容切换策略绑定到已配置为重定向到特定负载平衡虚拟服务器的内容交换虚拟服务器。

bind cs vserver <virtualServerName> -policyName <policyName> -priority <positiveInteger>
<!--NeedCopy-->

示例:

bind cs vserver cs1 –policyName cspol1 -priority 20
<!--NeedCopy-->

保存配置。

save ns config
<!--NeedCopy-->

使用 GUI 为 MQTT 流量配置负载平衡

  1. 导航到 流量管理 > 负载平衡 > 虚拟服务器,然后创建 MQT T 或 MQTT_TLS类型的负载平衡虚拟服务器。
  2. 创建 MQTT 类型的服务或服务组。
  3. 将服务绑定到 MQTT 虚拟服务器。
  4. 单击保存

MQTT 消息长度限制

Citrix ADC 设备将消息长度大于 65536 字节的消息视为巨型数据包,并默认情况下将其丢弃。dropmqttjumbomessagelb 参数决定是否处理巨型数据包。默认情况下,此参数设置为 YES,这意味着默认情况下会丢弃巨型 MQTT 数据包。如果此参数设置为 NO,则 ADC 设备甚至会处理消息长度大于 65536 字节的数据包。

要使用 CLI 将 ADC 设备配置为处理巨型数据包,请执行以下操作:

Set lb parameter –dropMqttJumboMessage [YES | NO]
<!--NeedCopy-->

示例:

set lb parameter –dropMqttJumboMessage no
<!--NeedCopy-->
MQTT 负载平衡