【发布时间】:2014-10-09 13:50:42
【问题描述】:
我正在使用Mosquitto broker 来实现 MQTT 协议。但是我无法找到在蚊子经纪人的情况下如何进行集群。一个经纪人可以服务的客户数量是否有任何限制。
【问题讨论】:
我正在使用Mosquitto broker 来实现 MQTT 协议。但是我无法找到在蚊子经纪人的情况下如何进行集群。一个经纪人可以服务的客户数量是否有任何限制。
【问题讨论】:
【讨论】:
此答案的原始来源:Horizontal scaling for brokers。我刚刚添加了插件支持。
结合 mosquitto 代理的两个功能可用于设置 n 节点集群。
桥接功能仅用于在所有 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 +-------------+
+-----^--^--------+
| |
| |
+ +
【讨论】:
有 2 个(在撰写本文时)主要开源 支持大规模 MQTT 部署和集群的项目
VerneMQ 和 EMQ 都是用 Erlang 编写的,非常适合分布式消息传递,所有复制都内置在 (Erlang) 语言的工具集部分。
VerneMQ 有商业企业支持,而 EMQ 计划在不久的将来,这两个项目都有大公司作为赞助商支持。
您还可以查看 HiveMQ,它是该区块中最年长的孩子,但没有付费许可证就无法使用。
【讨论】:
它不在 Dominik 提到的列表中,但 Solace Systems 有一个支持集群的 MQTT 设备。每个代理支持数十万个并发客户端连接。
免责声明:我是 Solace 的系统工程师
【讨论】:
我为 mosquitto 解决集群问题的方法是设置一个 haproxy 前端,将代理反向代理到多个侦听代理。
我还更进一步利用了最新版本的 mosquitto 支持的 DNS SD,并带有 -S 标志。
但是,这种设计存在一些令人头疼的问题,即在大多数发行版上对 dnssd 和 libresolv 的应用程序支持不支持 resolv.conf 中的域和搜索字段。
因此,如果您在遗留环境中工作,那么我建议您研究 rabbitmq、hivemq 或 redis pubsub,以获取可以硬塞到现有足迹中的更多生产级解决方案。
【讨论】:
您可以查看Bevywise IoT Platform。这是一个商业产品。这可以选择添加尽可能多的经纪人来扩大规模。这支持 MQTT 和 MQTT-SN 协议。
免责声明:我在 Bevywise Networks 工作。
【讨论】:
您也可以查看 EMQX 是否支持 MQTT 的集群。
【讨论】: