# 集群连接

::: tip 注意

集群连接功能仅适用于 EMQX 5.8.6 版本以及之后的专有版部署。

:::

集群连接功能用于连接多个独立的 EMQX 集群，方便不同集群上客户端之间的通信。这种方式相比传统的 MQTT 桥接更加高效、可靠和可扩展。它最小化了带宽需求，并能够容忍网络中断。

本页面介绍集群连接功能以及如何在专有版部署中使用和配置该功能。

## 功能介绍

单个部署可以有效服务成千上万分布于不同地域的 MQTT 客户端。然而，当客户端分布在全球各地时，高延迟和网络连接不良的问题就会出现。在不同区域创建多个部署可以通过本地服务客户端来缓解这些问题，但这也引入了一个新的挑战：如何实现不同部署之间客户端的无缝通信。

传统的解决方案是在每个部署中添加一个 MQTT 桥接，转发两个部署之间的所有消息。这种方法导致过度的带宽使用，并可能增加消息延迟，因为许多转发的消息可能与另一侧的客户端无关。

集群连接通过仅转发相关消息来解决这些问题。这种优化减少了带宽使用，并确保在网络中断期间也能有效通信。

## 创建集群连接

::: tip 注意

目前 EMQX Cloud 暂不支持通过 API 创建或管理集群连接。
集群连接仅支持通过控制台进行配置。

:::

集群连接支持多种使用场景，您可以根据部署环境选择以下连接方式：

- 同一 EMQX 平台账号下的多个专有版部署之间的连接
- 不同 EMQX 平台账号下的专有版部署之间的连接
- 专有版部署与自托管（本地）EMQX 实例之间的连接

每种场景的配置略有不同，以下将逐一介绍。

### 前提条件

配置集群连接前，请确保满足以下要求：

- 已创建专有版部署。例如，可在不同地区分别创建名为 `部署-A` 和 `部署-B` 的两个部署。参见[创建专有版部署](../create/dedicated.md)。

- 已启用 [NAT 网关](../vas/nat-gateway.md)并具备公网访问能力：
  - 每个部署需配置 NAT 网关；
  - NAT 网关必须处于运行状态，以支持外部连接。
  
  ::: tip
  
  在 EMQX Cloud 中使用集群连接功能时，必须开通 NAT 网关。
  
  如果连接的是自托管的 EMQX 实例，专有版部署也必须能够通过公网访问目标节点。
  
  :::

### 场景一：同一账号下的部署集群连接

1. 在控制台中点击 `部署-A` 的部署卡片。

2. 从左侧导航菜单中选择**集群连接**。

3. 点击右上角的**新建**。在**新建集群连接** 页面，配置以下选项：

   - **部署名称**：选择要连接的专有版部署名称。在本演示中为 `部署-B`。

   - **连接地址**：要连接的部署的 MQTT 域名和端口。在选择部署名称后会自动填充。

   - **用户名**：输入 `部署-B` 认证页面中配置的用户名。

   - **密码**：输入 `部署-B` 的认证页面中配置的密码。

   - **客户端 ID 前缀**：为 MQTT 连接到 `部署-B` 使用的客户端 ID 定义前缀，例如 `from-A`。

     ::: tip

     根据部署集群的大小和配置，可能会建立多个 MQTT 客户端连接到远程部署，每个客户端必须具有唯一的 ClientID。您可以通过设置这些连接的“客户端 ID 前缀”来控制 ClientIDs 的分配方式。

     :::

   - **主题**：指定当前部署将从远程部署接收的 MQTT 消息的主题过滤器列表，例如 `/from-B`。您可以点击加号图标添加更多主题。

     ::: tip

     这些是本地部署期望从远程部署接收消息的主题。如果留空，本地部署将不会接收到来自远程部署的任何消息。

     :::

   - **高级设置**：配置 MQTT 协议参数等高级设置。

4. 点击**确认**。您将被重定向到集群连接页面，并看到新创建的集群连接条目已默认启用。

   ![create_link_us](./_assets/create_link_a.png)

5. 在 `部署-B` 中重复相同步骤，创建返回 `部署-A` 的反向连接。

   ![create_link_eu](./_assets/create_link_b.png)

### 场景二：跨账号部署连接

在此场景下，两个专有版部署位于不同 EMQX 平台账号下。您需要手动填写更多配置信息。

1. 在 `部署-A` 控制台中打开**集群连接**页面。

2. 点击**新建**创建连接。

3. 配置以下内容：

   - **集群名称**：填写目标部署的 ID（可在目标部署的设置页面中查看）。
   - **地址**：目标部署的 MQTT over TLS/SSL 地址。
   - **用户名 / 密码**：目标部署配置的有效认证信息。
   - **客户端 ID 前缀**：为 MQTT 连接到 `部署-B` 使用的客户端 ID 定义前缀，例如 `from-A`。
   - **主题**：指定当前部署将从远程部署接收的 MQTT 消息的主题过滤器列表，例如 `/from-B`。您可以点击加号图标添加更多主题。
   - **高级设置**：配置其他 MQTT 参数。

4. 点击**确认**创建连接。

5. 在远程账号下的 `部署-B` 中重复操作，建立返回 `部署-A` 的反向连接。


### 场景三：连接到本地（自托管）EMQX 节点

您也可以将专有版部署与本地部署的 EMQX 节点进行连接（如部署于数据中心或虚拟机中的自托管实例）。

::: tip
 本地节点必须支持通过公网访问，并启用 MQTT over TLS/SSL。建议使用有效的证书。
 :::

1. 在专有版部署控制台中打开**集群连接**页面，点击**新建**。
2. 在**新建集群连接**页面中配置以下内容：
   - **集群名称**：填写本地 EMQX 配置文件中的 `cluster.name` 值。
   - **地址**：填写本地节点的地址与端口（例如 `<你的节点地址>:8883`）。
   - **用户名 / 密码**：填写本地部署接受的认证凭据。
   - **客户端 ID 前缀**：例如 `from-A`。
   - **主题**：定义希望从本地节点接收的主题列表，例如 `/from-local`。
   - **高级设置**：配置其他 MQTT 参数。
3. 点击**确认**完成配置。连接会自动启用。
4. 在本地 EMQX 节点中重复操作，建立返回专有版部署的反向连接。

可参考[通过 Dashboard 配置和管理集群连接](https://docs.emqx.com/zh/emqx/latest/cluster-linking/configuration.html#%E9%80%9A%E8%BF%87-dashboard-%E9%85%8D%E7%BD%AE%E5%92%8C%E7%AE%A1%E7%90%86%E9%9B%86%E7%BE%A4%E8%BF%9E%E6%8E%A5)获取更详细的配置说明。

## 验证集群连接

您可以使用 MQTTX 验证集群连接是否成功创建。

1. 在 MQTTX 中创建名为 `A-client` 的新连接，并连接到 `部署-A`。创建对主题 `/from-B` 的订阅。
2. 在 MQTTX 中创建名为 `B-client` 的新连接，并连接到 `部署-B`。创建对主题 `/from-A` 的订阅。
3. 使用 `A-client` 客户端向主题 `/from-A` 发送消息， payload 为 `from A`。
4. 验证 `B-client` 客户端接收到该消息。
5. 使用 `B-client` 客户端向主题 `/from-B` 发送消息，`A-client` 客户端也应该接收到该消息。

## 创建不对称连接

要创建不对称连接，您只需通过将**主题**字段设置为空并保持其他设置不变来修改集群连接配置。

例如，您可以在 `部署-A` 的集群连接设置中删除主题。这意味着 `部署-A` 现在对来自 `部署-B` 的任何消息都不感兴趣。这使得集群连接变为“不对称”，适用于集群之间的单向消息转发。

如果您重复[验证集群连接](#验证集群连接)中的消息发布和订阅步骤，您会注意到，从 `部署-B` 发布的消息不会被 `部署-A` 上的订阅者接收到。

## 管理集群连接

您可以在集群连接页面查看列出的集群连接的基本信息。

通过点击部署名称，您可以在**概览**标签页下查看集群连接执行和消息传输的指标和统计信息。如果您想重置指标，可以点击右上角的"重置"按钮，系统将提示您确认重置操作。

通过点击**设置**标签，您可以修改配置。或者，您还可以在**操作**列中点击编辑图标修改配置。

点击**操作**列中的删除图标将删除所选的集群连接条目。
