クラスターリンクユーザーガイド
このページでは、EMQXダッシュボード、設定ファイル、およびREST APIを通じてクラスターリンク機能を設定および管理するためのガイドラインを提供します。
ダッシュボードによるクラスターリンクの設定と管理
EMQXダッシュボードにアクセスし、左メニューの Management -> Cluster Linking をクリックします。Cluster Linking ページの右上にある Create をクリックして、クラスターリンクの作成を開始します。

設定ページでは、以下の項目を設定します。
- Cluster Name:リモートクラスターの名前を入力します。
- Server:リモートクラスターのMQTTホストとポートを指定します。
- Client ID Prefix:リモートクラスターへのMQTT接続で使用されるClientIDのプレフィックスを定義します。詳細は Configure MQTT Connections を参照してください。
- Username:必要に応じてリモートクラスターへの認証に使用するユーザー名を入力します。
- Password:必要に応じてリモートクラスターへの認証に使用するパスワードを入力します。
- Topics:ローカルクラスターがリモートクラスターから受信するメッセージの対象となるMQTTトピックフィルターのリストです。デフォルトでは空です。プラスアイコンをクリックしてトピックを追加したり、不要なトピックを削除してリストを空にすることも可能です。詳細は Configure Topics を参照してください。
- Enable TLS:クラスター間の通信にTLS暗号化が必要な場合はこのオプションを有効にし、SSL証明書などの設定を行います。
- Advanced Settings:MQTTプロトコルのパラメータなど追加の設定を行います。
設定が完了したら Create をクリックします。
新しいエントリーがクラスターリンクページに表示され、デフォルトで有効になります。クラスターリンク一覧にはクラスター名、サーバーアドレス、トピック、状態(有効/無効)などの詳細が表示されます。Actions 列の Settings または Delete ボタンをクリックして設定の変更や削除が可能です。
クラスター名をクリックすると Overview タブに移動し、メッセージ送受信の統計やクラスターリンクの実行状況を監視できます。ページ右上の削除アイコンをクリックするとクラスターリンクエントリーを完全に削除できます。スイッチを切り替えることで一時的にクラスターリンクを無効化し、設定を保持したまま再利用することも可能です。
設定ファイルによるクラスターリンクの設定
EMQXの設定ファイル内の cluster.links リストに複数のクラスターリンクを設定できます。各リンクはリモートクラスター名が一意である必要があり、個別に有効化・無効化できます。
リンクの正常な動作には、各リンク間でクラスター名を一貫して保つことが重要です。以下の例では、リモートクラスター名は対応する設定ファイルで emqx-eu-west である必要があります。
cluster {
name = "emqx-us-east"
links = [
{
name = "emqx-eu-west"
server = "emqx.us-east.myinfra.net:11883"
username = "clink-user:us-east"
password = "clink-password-no-one-knows"
clientid = "clink-us-east"
topics = ["global/#", "fwd/#", "cluster/+/status", ...]
ssl {
enable = true
verify = verify_peer
certfile = "etc/certs/client/emqx-us-east.pem"
...
}
}
...
]
}リンクを機能させるには、リモートの emqx-eu-west クラスターも設定ファイルで emqx-us-east へのリンクを同様に設定しておく必要があります。
リンクの有効化と無効化
設定済みのリンクはデフォルトで有効です。enable パラメータを false に設定することで無効化できます。
リンクを無効化すると、EMQXはリモートクラスターとの通信を停止します。ただし、リモートクラスター側で通信が停止されるわけではないため、リモート側で警告やアラームが発生する可能性があります。これを避けるため、リンクは両側で無効化することを推奨します。
トピックの設定
topics パラメータは、ローカルクラスターが関心を持つMQTTトピックフィルターのリストです。ローカルクラスターは、これらのトピックにパブリッシュされたメッセージをリモートクラスターから受信します。リストが空の場合、ローカルクラスターはリモートクラスターからメッセージを受信しません。
MQTT接続の設定
クラスターリンクは標準のMQTTをプロトコルとして使用するため、リモートクラスターのMQTTリスナーのエンドポイントを server に指定する必要があります。
クラスターの規模や設定によっては、リモートクラスターに対して複数のMQTTクライアント接続が確立されることがあり、それぞれのクライアントは一意のClientIDを持つ必要があります。clientid パラメータはこれらの接続に対する ClientIDプレフィックス として機能し、ClientIDの割り当てを制御します。
認証や認可に関するパラメータ(username、password)も設定可能です。リモートクラスターはこれらの接続を認証し、クラスターリンクで指定された特定のMQTTトピックに対してメッセージのパブリッシュを認可できる必要があります。例えば、上記の設定例に対応するリモートクラスターのACLルールは以下のようになります。
%% クラスターリンクMQTTクライアントが"$LINK/#"トピックを操作できるよう許可
{allow, {clientid, {re, "^clink-us-east"}}, all, ["$LINK/#"]}.
...このルールは、ClientIDが正規表現 ^clink-us-east にマッチするMQTTクライアントが、$LINK/ で始まる任意のトピックのパブリッシュおよびサブスクライブを許可します。$LINK/ はクラスターリンク関連の制御トピックのプレフィックスであり、クラスターリンクの維持・管理に必要なメッセージを受信するために重要です。
クラスターリンクはTLS接続をサポートしています。クラスター間通信がパブリックインターネットやその他の信頼できないネットワークを経由する場合はTLSの利用が必須です。EMQXは相互TLS認証もサポートしており、安全で機密性の高い信頼できる通信を実現します。
REST APIによるクラスターリンクの管理
EMQXのクラスターリンクは、クラスター間のリンクを管理するためのREST APIを提供しており、設定作業やリンク状態の監視が可能です。APIは基本的な操作から高度な操作まで対応し、柔軟な管理を実現します。
基本的なREST API操作
簡単なユースケース向けに、以下のエンドポイントで基本的なREST API操作をサポートしています。
- クラスターリンクの設定:
- エンドポイント:
PUT /cluster/links - 機能:必要な設定パラメータを一括で送信し、クラスターリンクの作成または更新を行います。シンプルなホット設定に適しています。
- エンドポイント:
- クラスターリンク情報の取得:
- エンドポイント:
GET /cluster/links - 機能:現在存在するすべてのクラスターリンクの設定と状態を取得します。アクティブなリンクの確認に便利です。
- エンドポイント:
高度なCRUD API操作
より詳細な制御が必要な場合は、以下のCRUD(作成、取得、更新、削除)操作が利用可能です。
| 操作 | エンドポイント | 機能 |
|---|---|---|
| クラスターリンクの作成 | POST /cluster/links | 新しいクラスターリンクを作成し、初期設定を行います。 |
| 特定のクラスターリンク取得 | GET /cluster/links/{name} | 指定した名前のクラスターリンクの詳細情報を取得します。 |
| クラスターリンクの更新 | PUT /cluster/links/{name} | 既存のクラスターリンクの設定を変更します。トピックやサーバーアドレス、認証情報などの更新が可能です。 |
| クラスターリンクの削除 | DELETE /cluster/links/{name} | 指定したクラスターリンクを削除し、クラスター間接続を終了します。 |
クラスターリンクの状態およびメトリクスの監視
設定以外に、APIはクラスターリンクの状態やパフォーマンスを監視するためのエンドポイントも提供しています。
クラスターリンクの状態取得:
エンドポイント:
GET /cluster/linksまたはGET /cluster/links/{name}機能:すべてのクラスターリンクまたは特定のリンクの状態を返します。レスポンスには全体の状態(
running、stoppedなど)や詳細なノード状態情報が含まれます。レスポンス例:
json{ ... "server": "broker.emqx.io:1883", "topics": ["t/#"], "status": "running", "node_status": [ {"node": "emqx@127.0.0.1", "status": "running"} ] }
クラスターリンクのメトリクス取得:
エンドポイント:
GET /cluster/links/{name}/metrics説明:アクティブルート数(ゲージタイプ)など、クラスターリンクに関連するメトリクスを提供し、リンクの現在の負荷やパフォーマンスを評価できます。
レスポンス例:
json{ "metrics": {"routers": 10240}, "node_metrics": [{}] }
特定クラスターリンクのメトリクスリセット
エンドポイント:
PUT /cluster/links/link/:name/metrics/reset説明:指定したクラスターリンクの累積メトリクスをリセットします。リセット後はパフォーマンス統計がクリアされ、新たに計測が開始されます。設定変更後の監視やトラブルシューティングに有用です。
レスポンス例:コンテンツなしの
204を返します。