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 で新たな接続を確立し、クライアントは再度アクティブにサブスクライブを開始します。移行プロセスが完了します。

次のステップ

次に、クラスターリンク機能の使用方法と設定方法について、以下のガイドをご参照ください。