Mqtt 用Mosquitto代理进行集群形成

Mqtt 用Mosquitto代理进行集群形成,mqtt,mosquitto,Mqtt,Mosquitto,我正在使用来实现MQTT协议。但我无法找到如何在mosquitto经纪人的情况下进行集群。此外,对于可以由一个代理服务的客户机的数量也有任何限制。您不能使用mosquitto进行集群 其他一些支持集群的MQTT代理,包括。HiveMQ具有自动发现的弹性集群能力和分布式无主架构,在AWS或Azure等云提供商上运行良好 您可以看到支持集群的所有代理的完整列表 免责声明:我是HiveMQ的开发人员,所以这个答案可能有偏差。Dominik没有提到它,但Solace Systems有一个支持集群的MQT

我正在使用来实现MQTT协议。但我无法找到如何在mosquitto经纪人的情况下进行集群。此外,对于可以由一个代理服务的客户机的数量也有任何限制。

您不能使用mosquitto进行集群

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

您可以看到支持集群的所有代理的完整列表


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

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


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

我为mosquitto解决集群问题的方法是建立一个haproxy前端,将代理反向发送给多个监听代理

我还进一步利用了DNS SD,MOSQUITO的最新版本支持它,并带有
-S
标志

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


因此,如果您在传统环境中工作,那么我建议您研究rabbitmq、hivemq或redis pubsub,以获得更多可嵌入现有封装外形的生产级解决方案。

此答案的原始来源:。我刚刚添加了插件支持

mosquitto broker的两个功能组合可用于设置
n
节点集群

  • 莫斯基托桥支撑
  • 插件支持-mosquitto-auth-plug()
  • 桥接功能仅用于在所有MOSQUITO代理之间同步消息,而MOSQUITO auth插件可用于在单个数据库后端保存授权和ACL

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

    topic pattern [[[ out | in | both ] qos-level] local-prefix remote-prefix]
    
    引用mosquitcho.conf man page(),对于传入的主题,网桥将在模式前面加上远程前缀,并在远程代理上订阅生成的主题。当收到匹配的传入消息时,将从主题中删除远程前缀,然后添加本地前缀。对于外向型话题,反之亦然

    下面是3节点集群的mosquitt.conf示例。要使用mqtt-malia()进行负载测试,更重要的是,使用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        +-------------+
                                               +-----^--^--------+
                                                     |  |
                                                     |  |
                                                     +  +
    
    +-------------------+
    +------------------>BRIDGE BROKER有两个主要的开源软件(在撰写本文时)
    支持大规模MQTT部署和集群的项目

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

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

    • VerneMQ()
    • EMQ()
    您还可以查看HiveMQ,它是该区块中年龄最大的孩子,但在没有付费许可证的情况下无法使用

    • HiveMQ()
      • 您可以查看。这是一个商业发行。这可以选择增加尽可能多的经纪人以扩大规模。这支持MQTT和MQTT-SN协议


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

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


        HiveMQ在Azure上的行为如何?默认情况下,Azure VM的ICMP被阻止,而对于常规的Mosquito实例,我们会因此经历很多断开连接的情况。你能确认HiveMQ在最新的Azure虚拟机上工作正常吗?根据文档:“mosquitto集群是在后端级别实现的(redis、amqp等)。@DánielKis:我在官方文档中没有看到这一点,据我所知,mosquitto中没有官方支持这一点。请注意,即使您将使用数据库进行“集群”,您也在交易单点故障,因为它将是数据库。但这更多的是一个理论问题,因为mosquitto不支持任何现成的“后端”。你可以使用mosquitto进行集群)@hardillb我应该删除这个答案还是需要一个更清晰的源属性?如果能说出这个想法的来源,那就太好了from@hardillb那样做了。我这方面的不良行为。是的,您在第二段中的注释链接(2)对读者来说并不明显。需要注意的是,这只涉及代理之间的消息路由,客户端将无法在其他代理实例上恢复其持久会话,并且不会接收其排队消息。对于未完成的QoS 1和2消息流也是如此