クラスターリンク クイックスタート
このページでは、離れた2つのEMQXクラスター間でクラスターリンクを設定するためのクイックスタートガイドを提供します。
前提条件
異なる2つのリージョンにそれぞれEMQXクラスターをホストするためのコンピュートリソースを用意してください。本例では、us-east と eu-west リージョンを使用し、それぞれのクラスター名を cluster-us-east と cluster-eu-west とします。
要件
- EMQX バージョン 5.8.0 以降
- 一意のクラスター名
- クラスター間のネットワーク通信
クラスターリンクでは、各クラスターのMQTTリスナーが他方のクラスターのネットワークから到達可能である必要があります。トラフィックを均等に分散させるため、これらのMQTTリスナーはロードバランサーの背後に配置することを推奨します。セキュリティの観点から、パブリックインターネットを使用する場合は、TLSおよび厳格なTLSまたはMQTTクライアント認証を用いてクラスター間通信を保護してください。
本番環境に移行する前に、専用のセキュアクラスターリンクガイドに従い、各クラスターの認証、認可、および$LINK/トピックネームスペースを強化してください。
最初のクラスターのセットアップ(cluster-us-east)
最初のクラスター cluster-us-east を、クラスターの設定ファイルに以下の設定スニペットを追加してセットアップします。
# クラスターリンク設定
cluster {
# このクラスターの名前
name = "cluster-us-east"
links = [
{
# 2つ目のクラスター名
name = "cluster-eu-west"
# 2つ目のクラスターのMQTTリスナーのエンドポイント
server = "emqx.us-east.myinfra.net:11883"
clientid = "clink-us-east"
topics = ["#"]
}
]
}
# クラスターリンク接続専用リスナー
listeners {
tcp.clink {
bind = 11883
}
}この設定は以下を指定しています:
- リモートクラスター名は
cluster-eu-west - クラスターは
emqx.us-east.myinfra.net:11883でアクセス可能 - クラスターリンクMQTT接続のクライアントIDプレフィックスは
clink-us-east - すべてのメッセージ(
#ワイルドカードトピックにマッチ)がローカルクラスターに転送される - ポート
11883でクラスターリンク接続専用のリスナーを有効化
2つ目のクラスターのセットアップ(cluster-eu-west)
2つ目のクラスター cluster-eu-west を、クラスターの設定ファイルに以下の設定スニペットを追加してセットアップします。
# クラスターリンク設定
cluster {
name = "cluster-eu-west"
links = [
{
name = "cluster-us-east"
server = "emqx.eu-west.myinfra.net:11883"
clientid = "clink-eu-west"
topics = ["#"]
}
]
}
# クラスターリンク接続専用リスナー
listeners {
tcp.clink {
bind = 11883
}
}この設定は最初のクラスターと対称的です。両方の設定が完了し、クラスターが稼働すると、2つのクラスター間で対称的かつ双方向のクラスターリンクが確立されます。非対称リンクの作成も可能であり、後述します。
クラスターリンクの動作確認
異なるクラスターに接続されたクライアント同士が標準のMQTTメカニズムで通信できることを確認するために、MQTTX CLIツールを使用して、一方のクラスターからメッセージをパブリッシュし、もう一方のクラスターでサブスクライブします。
cluster-us-eastでサブスクライバーを起動:bashmqttx sub -h emqx.us-east.myinfra.net --topic linked/# --qos 1 --verbose [6/4/2024] [3:53:32 PM] › … 接続中... [6/4/2024] [3:53:32 PM] › ✔ 接続完了 [6/4/2024] [3:53:32 PM] › … linked/# をサブスクライブ中... [6/4/2024] [3:53:32 PM] › ✔ linked/# をサブスクライブしましたcluster-eu-westからメッセージをパブリッシュ:bashmqttx pub -h emqx.eu-west.myinfra.net --topic linked/42 --message "Hello from the other side!" [6/4/2024] [3:53:35 PM] › … 接続中... [6/4/2024] [3:53:35 PM] › ✔ 接続完了 [6/4/2024] [3:53:35 PM] › … メッセージをパブリッシュ中... [6/4/2024] [3:53:35 PM] › ✔ メッセージをパブリッシュしましたサブスクライバーがメッセージを受信することを確認:
bash[6/4/2024] [3:53:35 PM] › topic: linked/42 payload: Hello from the other side!逆方向でも同様に確認:
cluster-eu-westでサブスクライバーを起動:bashmqttx sub -h emqx.eu-west.myinfra.net --topic linked/# --qos 1 --verbose [6/4/2024] [3:54:12 PM] › … 接続中... [6/4/2024] [3:54:12 PM] › ✔ 接続完了 [6/4/2024] [3:54:12 PM] › … linked/# をサブスクライブ中... [6/4/2024] [3:54:12 PM] › ✔ linked/# をサブスクライブしましたcluster-us-eastからメッセージをパブリッシュ:bashmqttx pub -h emqx.us-east.myinfra.net --topic linked/1 --message "Hello from US!" [6/4/2024] [3:54:15 PM] › … 接続中... [6/4/2024] [3:54:15 PM] › ✔ 接続完了 [6/4/2024] [3:54:15 PM] › … メッセージをパブリッシュ中... [6/4/2024] [3:54:15 PM] › ✔ メッセージをパブリッシュしましたサブスクライバーがメッセージを受信することを確認:
bash[6/4/2024] [3:54:15 PM] › topic: linked/1 payload: Hello from US!
完璧です!クラスターリンクが正常に動作しています。
TIP
クラスターリンクはクラスター間でサブスクリプション情報を伝播する非同期プロセスを含みます。通常は数ミリ秒で完了しますが、サブスクライブ直後にメッセージをパブリッシュすると、メッセージ配信に若干の遅延が発生することがあります。
非対称リンクのセットアップ
非対称リンクを作成するには、cluster-eu-west の設定を少し変更します。
cluster {
name = "cluster-eu-west"
links = [
{
name = "cluster-us-east"
server = "emqx.eu-west.myinfra.net:11883"
clientid = "clink-eu-west"
topics = []
}
]
}ご覧の通り、前述の設定とほぼ同じですが、topics フィールドが空になっています。これは cluster-eu-west が cluster-us-east からのメッセージを一切受け取らないことを意味します。これによりクラスターリンクは非対称となり、クラスター間の一方向メッセージ転送に有用です。
上記のメッセージパブリッシュおよびサブスクライブの手順を繰り返すと、cluster-us-east からパブリッシュされたメッセージが cluster-eu-west のサブスクライバーに届かないことが確認できます。