Skip to content

EMQX クラスターリンク ​

クラスターリンクは、複数の独立した EMQX クラスターを接続し、異なる(多くの場合、地理的に分散した)クラスター間のクライアント間通信を可能にする機能です。従来の MQTT ブリッジと比較して、クラスターリンクはより効率的で信頼性が高く、スケーラブルです。帯域幅の使用を最小限に抑え、ネットワークの中断にも耐えられます。

本節では、クラスターリンクの概要とその使用方法および設定方法について紹介します。

クラスターリンクを使用する理由 ​

本節では、クラスターリンクが異なるクラスター間のクライアント通信に対して効率的なソリューションを提供する仕組みを説明します。帯域幅の使用量、ネットワーク耐性、スケーラビリティの観点から、MQTT ブリッジよりもクラスターリンクが優れている点を強調します。

単一クラスターの課題 ​

単一の EMQX クラスターは、地理的に分散した数千の MQTT クライアントに効果的に対応できます。しかし、クライアントが世界中に広がる場合、高いレイテンシやネットワーク接続の不安定さという問題が発生します。異なる地域に複数の EMQX クラスターを展開することで、クライアントをローカルでサービスでき、これらの問題を軽減できます。

クラスターリンクと MQTT ブリッジの比較 ​

異なる地域に複数の EMQX クラスターを展開すると、新たな課題が生じます。すなわち、異なるクラスターに接続されたクライアント間でシームレスな通信を可能にすることです。

従来の解決策は、各クラスターに MQTT ブリッジを追加し、クラスター間のすべてのメッセージを転送する方法です。この方法は帯域幅の過剰使用を招き、転送される多くのメッセージが相手側のクライアントにとって不要であるため、メッセージのレイテンシが増加する可能性があります。

クラスターリンクは、クラスター間で関連性のあるメッセージのみを転送することでこれらの問題を解決します。この最適化により、帯域幅の使用を削減し、ネットワークの中断時でも効率的な通信を実現します。

MQTT ブリッジとの機能比較 ​

クラスターリンクは MQTT ブリッジといくつかの機能を共有しています。以下は両者の比較表です。この比較により、MQTT ブリッジとクラスターリンクの主な違いと類似点が明確になり、それぞれの機能の利点と利用シーンを理解しやすくなります。

機能MQTT ブリッジクラスターリンク
プロトコルMQTTMQTT
認証リモートブローカーに準拠リモートブローカーに準拠
認可リモートブローカーに準拠制御トピックに対する認可のみ必要。
制御トピック:リンク機能に必要なデータ交換用トピック
メッセージトピック:メッセージ複製が必要なトピック
対応製品標準的な MQTT ブローカー全般EMQX のみ
メッセージループバックブリッジモードのサポートが必要自動的に回避
ネームスペースメッセージループバック回避のためトピックプレフィックスを追加することが多い統一されたネームスペース
カスタムトピックプレフィックスサポートされているサポートされていない
ブリッジング方式リモートまたはローカルでブリッジルール(Pub/Sub)を設定可能
同一接続でパブリッシャーとサブスクライバーの両方を兼ねることができる
プッシュモードのみサポート。ローカルでリモートへプッシュする設定が必要。相互通信にはピア設定が必要。
同一接続はパブリッシャーのみ。プッシュモードは双方向モードより効率的かつ安定。
メッセージ複製方式指定トピックのフルサブスクリプションで非効率的ローカルのサブスクリプションリストに基づくオンデマンド複製
ルールエンジンとデータ統合常にメッセージパブリッシュイベントをトリガーローカルのルールエンジンのメッセージパブリッシュイベントはトリガーしない

ワークフローと利用シナリオ ​

本節では、クラスターリンクのワークフローを2つの異なるシナリオで説明します。

リモートクラスターからローカルクラスターへのメッセージ複製 ​

このシナリオでは、クラスター A をローカルクラスター、クラスター B をリモートクラスターとして扱います。クラスター A はクラスター B からトピック t/# と c/1 を複製する必要があります。

  1. クライアント認証と認可:
    • クラスター A とクラスター B の両方のクライアント認証設定に認証情報を追加します。
    • クラスター A とクラスター B の両方のクライアント ACL に認可情報を追加します。
  2. クラスター A でクラスターリンクを設定:
    • クラスター B の MQTT アドレスを入力します。
    • 必要な認証情報を提供します。
    • 複製するトピック t/# と c/1 を指定します。
  3. クラスター B でクラスターリンクを設定:
    • クラスター A の MQTT アドレスを入力します。
    • 必要な認証情報を提供します。
    • トピックの指定は不要(クラスター B はクラスター A からのメッセージを必要としないため)。
  4. 相互接続の確立:
    • クラスター間の接続を確立します。
  5. ルート情報プッシュのブートストラップ(A → B):
    • クラスター A からクラスター B へルート情報のプッシュを開始します。
  6. サブスクリプションとメッセージフロー:
    • クラスター A のクライアントがトピックをサブスクライブします。
    • クラスター A からクラスター B へルート情報がプッシュされます。
    • クラスター B にクライアントがメッセージをパブリッシュします。
    • クラスター B からクラスター A へメッセージがプッシュされます。
  7. サブスクリプション解除:
    • クラスター A のクライアントがトピックのサブスクリプションを解除します。
    • クラスター A からクラスター B へのルート情報プッシュを削除します。
  8. 完了: 設定プロセスが完了します。

旧クラスターから新クラスターへの移行 ​

このシナリオでは、クラスター A を旧クラスター、クラスター B を新クラスターとします。目的はクラスター A からクラスター B へすべてのメッセージを完全に複製することです。

  1. クラスター A とクラスター B の間に対称的なリンクを設定し、両クラスターでトピックを # に設定します。
  2. クラスター間の接続を確立します。
  3. DNS の変更またはロードバランサーのトラフィック切り替えを実施します。
  4. クライアントを新クラスターに移行します。メッセージは中断されませんが、セッションは移行できないため、クライアントは再度サブスクライブする必要があります。
  5. クラスター A をネットワークから切断します。
  6. クラスター B で新たな接続を確立し、クライアントは再度アクティブなサブスクリプションを開始します。移行プロセスは完了です。

次のステップ ​

次に、クラスターリンク機能の使用方法と設定方法について、以下のガイドで学習できます。