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