12

我正在使用Mosquitto 代理来实现 MQTT 协议。但是我无法找到在蚊子经纪人的情况下如何进行集群。一个经纪人可以服务的客户数量也有任何限制。

4

7 回答 7

17

你不能用 mosquitto 进行聚类。

其他一些支持集群的 MQTT 代理,包括HiveMQ。HiveMQ 具有自动发现和分布式无主架构的弹性集群能力,并且在 AWS 或 Azure 等云提供商上运行良好。

您可以在此处查看支持集群的所有代理的完整列表。

免责声明:我是 HiveMQ 的开发人员,所以这个答案可能有偏见。

于 2014-10-09T15:12:40.867 回答
9

此答案的原始来源:经纪人的水平扩展。我刚刚添加了插件支持。

mosquitto broker 的两个功能结合起来可以用来设置一个n节点集群。

  1. 蚊子桥支持。
  2. 插件支持 - mosquitto-auth-plug( 1 )

桥接功能仅用于在所有 mosquitto 代理之间同步消息,而 mosquitto-auth-plugin 可用于在单个数据库后端保存授权和 ACL。

在设置网桥时,请注意使用 in/out 网桥主题以避免转发循环 ( 2 )。模式是格式

topic pattern [[[ out | in | both ] qos-level] local-prefix remote-prefix]

引用 mosquitto.conf 手册页(3),对于传入的主题,网桥将在模式前面加上远程前缀,并订阅远程代理上的结果主题。当接收到匹配的传入消息时,将从主题中删除远程前缀,然后添加本地前缀。对于传出主题,反之亦然

下面是 3 节点集群的示例mosquitto.conf。使用 mqtt-malaria( 4 ) 进行负载测试,更重要的是对连接clean_session标志为 false 的客户端的影响,.

                                          +-------------------+
                       +------------------> BRIDGE BROKER     <------------+
                       |                  | 192.168.1.1       |            |
                       |                  +--------^----------+            |
                       |                           |                       |
                       |                           |                       |
                       |                           |                       |
  Broker A             |             Broker B      |                       |   Broker C
                       |                           |                       |
+----------------------+--+       +----------------+--------+           +--+----------------------+
| connection A            |       | connection B            |           | connection C            |
|                         |       |                         |           |                         |
| address 192.168.1.1:1883|       | address 192.168.1.1:1883|           | address 192.168.1.1:1883|
|                         |       |                         |           |                         |
| topic # out 2 "" A/     |       | topic # out 2 "" B/     |           | topic # out 2 "" C/     |
| topic # in 2 ""  B/     |       | topic # in 2 ""  A/     |           | topic # in 2 ""  A/     |
| topic # in 2 ""  C/     |       | topic # in 2 ""  C/     |           | topic # in 2 ""  B/     |
+----------------------^--+       +----------------^--------+           +--+----------------------+
                       |                           |                       ^
                       |                           |                       |
                       |                           |                       |
                       |                   +-------+---------+             |
                       +-------------------+ HA PROXY        +-------------+
                                           +-----^--^--------+
                                                 |  |
                                                 |  |
                                                 +  +
于 2016-04-02T19:16:47.273 回答
5

有 2 个(在撰写本文时)支持大规模 MQTT 部署和集群的主要开源项目

VerneMQ 和 EMQ 都是用 Erlang 编写的,非常适合分布式消息传递,所有复制都内置在 (Erlang) 语言的工具集部分。

VerneMQ 有商业企业支持,而 EMQ 计划在不久的将来,这两个项目也有大公司作为赞助商支持它们。

您还可以查看 HiveMQ,它是该区块中最年长的孩子,但没有付费许可证就无法使用。

于 2017-05-13T18:58:42.423 回答
2

它不在 Dominik 提到的列表中,但 Solace Systems 有一个支持集群的 MQTT 设备。每个代理支持数十万个并发客户端连接。

免责声明:我是 Solace 的系统工程师

于 2015-01-17T23:01:57.947 回答
2

我为 mosquitto 解决集群问题的方法是设置一个 haproxy 前端,将代理反向代理到几个侦听代理。

我还更进一步利用了最新版本的 mosquitto 支持的 DNS SD -S

然而,这种设计存在一些令人头疼的问题,即在大多数发行版上对 dnssd 和 libresolv 的应用程序支持不支持 resolv.conf 中的域和搜索字段。

因此,如果您在遗留环境中工作,那么我建议您研究 rabbitmq、hivemq 或 redis pubsub,以获得更多可以被硬塞到现有足迹中的生产级解决方案。

于 2015-06-11T18:15:52.687 回答
1

您可以查看Bevywise 物联网平台。这是一个商业产品。这可以选择添加尽可能多的经纪人来扩大规模。这支持 MQTT 和 MQTT-SN 协议。

免责声明:我为 Bevywise Networks 工作。

于 2017-05-17T02:29:42.963 回答
0

您还可以查看 EMQX 以了解 MQTT 的集群支持。

EMQX MQTT 经纪商

于 2020-09-21T14:19:15.953 回答