web-dev-qa-db-ja.com

Mosquittoブローカーによるクラスター形成

MQTTプロトコルを実装するために Mosquittobroker を使用しています。しかし、モスキートブローカーの場合にクラスタリングを行う方法を見つけることができません。また、1つのブローカーでサービスを提供できるクライアントの数に制限はありますか。

8

Mosquittoでクラスタリングを行うことはできません。

HiveMQ など、クラスタリングをサポートする他のMQTTブローカーがいくつかあります。 HiveMQは、自動検出と分散マスターレスアーキテクチャを備えた柔軟なクラスター機能を備えており、AWSやAzureなどのクラウドプロバイダーで非常にうまく機能します。

クラスタリングをサポートするすべてのブローカーの完全なリストを見ることができます ここ

免責事項:私はHiveMQの開発者であるため、この回答には偏りがある可能性があります。

16

この回答の元のソース: ブローカーの水平スケーリング 。プラグインのサポートを追加しました。

組み合わせたモスキートブローカーの2つの機能を使用して、nノードクラスターをセットアップできます。

  1. モスキートブリッジのサポート。
  2. プラグインのサポート-mosquitto-auth-plug( 1

ブリッジ機能は、すべてのmosquittoブローカー間でメッセージを同期するためにのみ使用されますが、mosquitto-auth-pluginは、単一のデータベースバックエンドに認証とACLを保存するために使用できます。

ブリッジを設定するときは、転送ループを回避するために、イン/アウトブリッジトピックの使用に注意してください( 2 )。パターンはフォーマットです

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

Mosquitto.confのマニュアルページの引用()、着信トピックの場合、ブリッジはパターンの前にリモートプレフィックスを付加し、リモートブローカーで結果のトピックをサブスクライブします。一致する着信メッセージを受信すると、リモートプレフィックスがトピックから削除され、ローカルプレフィックスが追加されます。発信トピックの場合はその逆

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        +-------------+
                                           +-----^--^--------+
                                                 |  |
                                                 |  |
                                                 +  +
8
Kiran

大規模なMQTTデプロイメントとクラスタリングをサポートする2つの(今回の執筆時点では)主要なオープンソースプロジェクトがあります

VerneMQとEMQはどちらもErlangで記述されており、分散メッセージングに非常に適しており、すべてのレプリケーションが(Erlang)言語のツールセット部分に組み込まれています。

VerneMQは営利企業をサポートしていますが、EMQは近い将来にサポートする予定ですが、どちらのプロジェクトにも大企業がスポンサーとして支援しています。

また、ブロック内で最も古い子供であるHiveMQを調べることもできますが、有料のライセンスがないと使用できません。

3
syberkitten

私がmosquittoのクラスタリングに取り組んだ方法は、複数のリスニングブローカーへのプロキシをリバースプロキシするhaproxyフロントエンドをセットアップすることでした。

また、モスキートの最新バージョンが-SフラグでサポートするDNSSDを利用するためにさらに一歩進んだ。

ただし、この設計にはいくつかの問題があります。つまり、ほとんどのディストリビューションでのdnssdとlibresolvのアプリケーションサポートでは、resolv.confのドメインと検索フィールドが尊重されません。

したがって、レガシー環境で作業している場合は、rabbitmq、hivemq、またはredis pubsubのいずれかを調べて、既存のフットプリントに組み込むことができるより多くの本番レベルのソリューションを探すことをお勧めします。

2
Dwight Spencer

Dominikが言及したリストには含まれていませんが、SolaceSystemsにはクラスタリングをサポートするMQTTアプライアンスがあります。各ブローカーは、数十万の同時クライアント接続をサポートします。

免責事項:私はSolaceのシステムエンジニアです

2
Hans Jespersen

Bevywise IoT Platform を調べることができます。これは商用製品です。これには、スケールアップするためにできるだけ多くのブローカーを追加するオプションがあります。これは、MQTTおよびMQTT-SNプロトコルをサポートします。

免責事項:私はBevywiseNetworksで働いています。