EMQX クラスターリンク
クラスターリンクは、複数の独立した EMQX クラスターを接続し、異なる(多くの場合、地理的に分散した)クラスター上のクライアント間の通信を可能にする機能です。従来の MQTT ブリッジと比較して、クラスターリンクはより効率的で信頼性が高く、スケーラブルです。帯域幅の使用を最小限に抑え、ネットワークの中断にも耐性があります。
本章では、クラスターリンクの概要とその使用方法および設定方法を紹介します。
クラスターリンクを使う理由
本節では、クラスターリンクが異なるクラスター間のクライアント通信に対して効率的なソリューションを提供する仕組みを説明します。帯域幅の使用、ネットワーク耐性、スケーラビリティの観点から、MQTT ブリッジよりもクラスターリンクが持つ利点を強調します。
単一クラスターの課題
単一の EMQX クラスターは、地理的に分散した数千の MQTT クライアントに対して効果的にサービスを提供できます。しかし、クライアントが世界中に分散している場合、高いレイテンシやネットワーク接続の不安定さといった問題が発生します。異なる地域に複数の EMQX クラスターを展開することで、クライアントをローカルでサービスし、これらの問題を軽減できます。
クラスターリンクと MQTT ブリッジの比較
異なる地域に複数の EMQX クラスターを展開すると、新たな課題が生じます。すなわち、異なるクラスターに接続されたクライアント間のシームレスな通信を実現することです。
従来の解決策は、各クラスターに MQTT ブリッジを追加し、クラスター間のすべてのメッセージを転送する方法です。しかし、この方法は帯域幅の過剰使用を招き、転送されるメッセージの多くが相手側のクライアントにとって不要なため、メッセージのレイテンシが増加する可能性があります。
クラスターリンクは、クラスター間で関連するメッセージのみを転送することでこれらの問題を解決します。この最適化により、帯域幅の使用を削減し、ネットワークの中断時でも効率的な通信を保証します。
MQTT ブリッジとの機能比較
クラスターリンクは MQTT ブリッジといくつかの機能を共有しています。以下は両者の比較表です。この比較により、MQTT ブリッジとクラスターリンクの主な違いと類似点が明確になり、それぞれの機能の利点と利用ケースを理解しやすくなります。
| 機能 | MQTT ブリッジ | クラスターリンク |
|---|---|---|
| プロトコル | MQTT | MQTT |
| 認証 | リモートブローカーに準拠 | リモートブローカーに準拠 |
| 認可 | リモートブローカーに準拠 | 制御トピックに対する認可のみ必要 制御トピック:リンク機能に必要なデータ交換用トピック メッセージトピック:メッセージ複製が必要なトピック |
| 対応製品 | 標準的な MQTT ブローカー全般 | EMQX のみ |
| メッセージループバック | ブリッジモードのサポートが必要 | 自動的に回避 |
| ネームスペース | メッセージループバック回避のためトピックプレフィックス追加が多い | 統一されたネームスペース |
| カスタムトピックプレフィックス | 対応 | 非対応 |
| ブリッジ方式 | リモートまたはローカルでのブリッジルール(Pub/Sub)設定をサポート 同一接続でパブリッシャーとサブスクライバーの両方を兼務可能 | プッシュモードのみ対応。ローカルからリモートへプッシュする設定が必要。相互通信にはピア設定が必要。 同一接続はパブリッシャーのみ。プッシュモードは双方向モードより効率的かつ安定。 |
| メッセージ複製方式 | 指定トピックのフルサブスクリプションで効率は低い | ローカルのサブスクリプションリストに基づくオンデマンド複製 |
| ルールエンジンとデータ統合 | 常にメッセージパブリッシュイベントをトリガー | ローカルのルールエンジンのメッセージパブリッシュイベントはトリガーしない |
ワークフローと利用シナリオ
本節では、クラスターリンクのワークフローを2つの異なるシナリオで説明します。
リモートクラスターからローカルクラスターへのメッセージ複製
このシナリオでは、クラスター A がローカルクラスター、クラスター B がリモートクラスターとして機能します。クラスター A はクラスター B からトピック t/# と c/1 を複製する必要があります。
- クライアントの認証と認可:
- クラスター A とクラスター B の両方でクライアント認証設定に資格情報を追加します。
- クラスター A とクラスター B の両方でクライアント ACL に認可を追加します。
- クラスター A でのクラスターリンク設定:
- クラスター B の MQTT アドレスを入力します。
- 必要な認証情報を提供します。
- 複製するトピックとして
t/#とc/1を指定します。
- クラスター B でのクラスターリンク設定:
- クラスター A の MQTT アドレスを入力します。
- 必要な認証情報を提供します。
- トピックの指定は不要(クラスター B はクラスター A からのメッセージを必要としません)。
- 相互接続の確立:
- クラスター間の接続を確立します。
- ルート情報プッシュのブートストラップ(A → B):
- クラスター A からクラスター B へルート情報のプッシュを開始します。
- サブスクリプションとメッセージフロー:
- クラスター A のクライアントがトピックをサブスクライブします。
- ルート情報がクラスター A からクラスター B へプッシュされます。
- クライアントがクラスター B にメッセージをパブリッシュします。
- メッセージがクラスター B からクラスター A へプッシュされます。
- サブスクリプション解除:
- クラスター A のクライアントがトピックのサブスクリプションを解除します。
- クラスター A からクラスター B へのルート情報プッシュを削除します。
- 完了: 設定プロセスが完了します。
旧クラスターから新クラスターへの移行
このシナリオでは、クラスター A が旧クラスター、クラスター B が新クラスターです。目的はクラスター A からクラスター B へすべてのメッセージを完全に複製することです。
- クラスター A とクラスター B の間に対称的なリンクを設定し、両クラスターでトピックを
#に設定します。 - クラスター間の接続を確立します。
- DNS の変更またはロードバランサーのトラフィック切り替えを実施します。
- クライアントを新クラスターに移行します。メッセージは中断されませんが、セッションは移行できないため、クライアントは再度サブスクライブする必要があります。
- クラスター A をネットワークから切断します。
- クラスター B で新しい接続を確立し、クライアントは再度アクティブにサブスクライブを開始します。移行プロセスが完了します。
次のステップ
次に、以下のガイドを参照してクラスターリンク機能の使用方法と設定方法を学べます。