MQTTプロトコルを実装するために Mosquittobroker を使用しています。しかし、モスキートブローカーの場合にクラスタリングを行う方法を見つけることができません。また、1つのブローカーでサービスを提供できるクライアントの数に制限はありますか。
この回答の元のソース: ブローカーの水平スケーリング 。プラグインのサポートを追加しました。
組み合わせたモスキートブローカーの2つの機能を使用して、n
ノードクラスターをセットアップできます。
ブリッジ機能は、すべての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 +-------------+
+-----^--^--------+
| |
| |
+ +
大規模なMQTTデプロイメントとクラスタリングをサポートする2つの(今回の執筆時点では)主要なオープンソースプロジェクトがあります
VerneMQとEMQはどちらもErlangで記述されており、分散メッセージングに非常に適しており、すべてのレプリケーションが(Erlang)言語のツールセット部分に組み込まれています。
VerneMQは営利企業をサポートしていますが、EMQは近い将来にサポートする予定ですが、どちらのプロジェクトにも大企業がスポンサーとして支援しています。
また、ブロック内で最も古い子供であるHiveMQを調べることもできますが、有料のライセンスがないと使用できません。
私がmosquittoのクラスタリングに取り組んだ方法は、複数のリスニングブローカーへのプロキシをリバースプロキシするhaproxyフロントエンドをセットアップすることでした。
また、モスキートの最新バージョンが-S
フラグでサポートするDNSSDを利用するためにさらに一歩進んだ。
ただし、この設計にはいくつかの問題があります。つまり、ほとんどのディストリビューションでのdnssdとlibresolvのアプリケーションサポートでは、resolv.confのドメインと検索フィールドが尊重されません。
したがって、レガシー環境で作業している場合は、rabbitmq、hivemq、またはredis pubsubのいずれかを調べて、既存のフットプリントに組み込むことができるより多くの本番レベルのソリューションを探すことをお勧めします。
Dominikが言及したリストには含まれていませんが、SolaceSystemsにはクラスタリングをサポートするMQTTアプライアンスがあります。各ブローカーは、数十万の同時クライアント接続をサポートします。
免責事項:私はSolaceのシステムエンジニアです
Bevywise IoT Platform を調べることができます。これは商用製品です。これには、スケールアップするためにできるだけ多くのブローカーを追加するオプションがあります。これは、MQTTおよびMQTT-SNプロトコルをサポートします。
免責事項:私はBevywiseNetworksで働いています。