负载均衡MQTT代理

8
5个回答

8
大多数 MQTT 经纪人不支持负载平衡。但是,有些经纪人支持聚合。请查看此列表以找到适合您聚合需求的经纪人。
如果您想了解有关 MQTT 经纪人聚合的信息,本博客文章可能有点过时,但仍然有用:http://www.hivemq.com/building-a-high-availability-mqtt-cluster/ 回答您的问题:MQTT 经纪人 HiveMQ 与 AWS ELB 配合使用可以实现跨多个可用区的负载平衡。您可能需要将默认的 ELB TCP 连接超时时间增加到您的应用程序中使用的 MQTT keep-alive 时间。如果需要弹性扩展,您甚至可以使用自动缩放组。HiveMQ 可以使用 S3 作为其它集群节点的发现方式,因此您可以在运行时添加和删除集群节点。
我不知道其他经纪人是否与 AWS ELB 完美配合。如果 HiveMQ 不符合您的需求,最好在上面链接的列表中搜索经纪人并尝试一下 :)
免责声明:我是开发 HiveMQ 的公司的员工。

6

使用 HAProxy。 这是一个免费、快速且可靠的解决方案,可提供基于TCP和HTTP应用程序的高可用性、负载平衡和代理。它适用于非常高流量的网站。


4
弹性梁是一款付费应用程序,而HA Proxy则是开源的。 - Arbaz Alam
1
这个答案是误导性的,你不能在没有额外软件的情况下进行MQTT负载均衡。 - ᐅdevrimbaris
1
这个答案是不正确的!!HAProxy只会在源IP:端口上进行负载均衡,而不是MQTT主题!! - JD Allen

6
您不能像负载均衡Web服务器那样平衡MQTT代理! LB解决方案必须将连接持久保存在MQTT Topic字段上,而不是客户端的IP:Port…否则,不是所有订阅者都会收到发布的消息。 “发布者”消息仅发送到单个MQTT代理,因此只有该代理将重新发送消息。 如果同一MQTT主题的“订阅者”转到另一个代理,则不会从连接到其他代理的发布者接收消息。 当然,您可以桥接MQTT代理,以便所有代理都获得消息,但是这样做LB-ing的意义何在? 在那一点上,您实际上并没有扩展它们,这可能是为什么您首先想要将它们LB的原因。 F5 BIG-IP可用于进行真正的MQTT LB,如果创建iRule脚本来执行MQTT主题上的LB决策。今天已经有公司在执行此操作。

2

(在@JD Allens的回答上补充) 在MQTT或TCP中进行负载均衡通常不会按预期工作,如果您在服务器上保留了状态(如MQTT订阅),例如,如果您在LB后面有两个MQTT后端服务器,则一半的MQTT客户端将连接到一个MQTT代理,另一半将连接到另一个代理。由于这两个代理没有任何连接,客户端将不知道另一个代理中正在发生什么(订阅和发布)。您有两个选择:

  • 只需配置负载均衡器,将所有连接定向到单个代理,仅在出现错误时才故障转移至另一个代理。在给定时间内应仅有一个代理处于活动状态(这不是真正的负载均衡)。

  • 使用类似HiveMQ、EMQX等集群MQTT代理,它们将连接后端代理。


-1

我更喜欢使用HAProxy而不是AWS ELB,因为在IaaS或PaaS上可以获得更多的灵活性。

您可以查看haproxy-mqtt使用Docker。核心haproxy.cfg文件在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接