负载消除MQTT代理

时间:2015-07-11 18:00:49

标签: load-balancing mqtt amazon-elb

是否可以对MQTT代理进行负载均衡?我可以使用ELB来平衡MQTT吗?这方面的任何指针都会有所帮助。我点击http://www.slideshare.net/kellogh/mqtt-kafka-33100776,但没有多大帮助。

5 个答案:

答案 0 :(得分:6)

大多数MQTT代理都不支持负载均衡MQTT代理。但是,有些经纪人可以支持群集。查看this list以找出适合您的群集要求的经纪人。

此博客文章有点过时,但如果您想了解MQTT代理群集,可能仍然有用:http://www.hivemq.com/building-a-high-availability-mqtt-cluster/

回答您的问题:MQTT代理HiveMQ与AWS ELB完美配合,实现跨多个可用区域的负载平衡。您可能希望将TCP连接的默认ELB超时增加到用于应用程序的MQTT保持活动时间。如果需要,您甚至可以使用Auto Scaling组进行弹性扩展。 HiveMQ可以使用S3来发现其他群集节点,因此您可以在运行时添加和删除群集节点。

我不知道其他经纪人是否与AWS ELB无缝协作。如果HiveMQ不符合您的需求,最好是在上面链接的列表中搜索代理并尝试:)

免责声明:我在为开发HiveMQ的公司工作。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我更喜欢 HAProxy AWS ELB,因为您可以在IaaS或PaaS上获得更多灵活性。

您可以使用Docker查看haproxy-mqtt。核心haproxy.cfg文件为here

答案 4 :(得分:0)

(添加到@JD Allens响应)如果在MQTT(订阅)之类的服务器上保持状态,一般而言,负载均衡MQTT或TCP通常不会按预期工作。例如,如果您在LB后面有两个MQTT后端服务器,则您的MQTT客户端中的一半将连接到一个MQTT代理,而另一半则连接到另一个。由于这两个代理没有任何形式的互连,因此客户端将不会获得有关其他代理中发生的一切的信息(订阅和发布)。您有两种选择:

  • 只需配置将所有连接定向到单个代理并且仅在出现错误时才故障转移到另一个代理的负载均衡器。在给定的时间只有一个代理可以启动(这本身并不是负载均衡)。

  • 使用群集的MQTT代理,例如HiveMQ,EMQX等。它们将互连后端代理。