Mosquitto ブローカーを使用してMQTT プロトコルを実装しています。しかし、mosquitto ブローカーの場合にクラスタリングを行う方法を見つけることができません。また、1 つのブローカーで処理できるクライアントの数に制限はありますか。
7 に答える
この回答の元の情報源:ブローカーの水平スケーリング。プラグインのサポートを追加しました。
mosquitto ブローカーの 2 つの機能を組み合わせて、n
ノード クラスターをセットアップすることができます。
- Mosquitto ブリッジのサポート。
- プラグインのサポート - mosquitto-auth-plug( 1 )
ブリッジ機能はすべての mosquitto ブローカー間でメッセージを同期するためにのみ使用されますが、mosquitto-auth-plugin は承認と ACL を単一のデータベース バックエンドに保存するために使用できます。
ブリッジをセットアップするときは、転送ループを回避するために、in/out bridge トピックの使用に注意してください ( 2 )。パターンはフォーマット
topic pattern [[[ out | in | both ] qos-level] local-prefix remote-prefix]
mosquitto.conf の man ページ ( 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 +-------------+
+-----^--^--------+
| |
| |
+ +
Dominik が言及したリストにはありませんが、Solace Systems にはクラスタリングをサポートする MQTT アプライアンスがあります。各ブローカーは、数十万の同時クライアント接続をサポートします。
免責事項: 私は Solace のシステム エンジニアです。
私が mosquitto のクラスタリングに対処した方法は、複数のリッスン ブローカーに逆プロキシする haproxy フロントエンドをセットアップすることでした。
また、最新バージョンの mosquitto が-S
フラグでサポートする DNS SD を利用するために、さらに一歩進んでいます。
ただし、この設計にはいくつかの頭痛の種がありました。つまり、ほとんどのディストリビューションでの dnssd と libresolv のアプリケーション サポートは、resolv.conf のドメインと検索フィールドを尊重しません。
したがって、レガシー環境で作業している場合は、rabbitmq、hivemq、または redis pubsub のいずれかを調べて、既存のフットプリントに押し込むことができるより本番レベルのソリューションを検討することをお勧めします。