# 集群配置

EMQX 提供了热配置能力，可以在运行时动态修改配置，无需重启 EMQX 节点。EMQX Dashboard 针对热配置功能，提供了一个可视化配置页面。通过该页面，可以方便地修改 EMQX 的配置。目前提供了以下配置项：

- MQTT 配置
- 集群
- 命名空间
- 监听器
- 日志
- 监控
- 集群连接

## MQTT 配置

在**管理** -> **MQTT 配置**页面中，您可以配置 MQTT 协议相关的配置项，包括：

### 通用

通用菜单下为 MQTT 协议的通用基础配置项，包括类似于配置空闲超时，最大报文大小，最大 Client ID 长度，主题层级和 QoS 等级等配置项。

### 会话

会话菜单下为 MQTT 协议的会话相关配置项，包括会话过期间隔（仅支持非 MQTT 5.0 连接，MQTT 5.0 连接需在客户端配置），最大订阅数量，最大飞行窗口，是否存储QoS 0 消息等相关配置。

### 会话持久化

会话持久化菜单下为 [MQTT 会话持久化](../durability/durability_introduction.md)功能的相关配置项，包括消息保留时长，消息查询批大小，空闲轮询间隔，会话心跳间隔等。

### 保留消息

保留消息菜单下为 MQTT 协议的保留消息相关配置项，例如是否开启保留消息功能，消息的存储类型与方式，保留消息的最大数量，保留消息的负载大小，保留消息过期间隔等相关配置。当需要对保留消息进行配置修改时，就可以在这里进行配置。详见[设置保留消息](./retained.md#设置保留消息)。

> 当停用保留消息时，已有的保留消息将不会被删除。

### 系统主题

系统主题菜单下为 EMQX 内置的系统主题相关配置项，EMQX 将周期性的将运行状态，使用统计和即时客户端事件发布到 `$SYS/` 开头的系统主题，当客户端订阅该主题时，EMQX 将会将相关的信息发布到该主题下。系统主题的配置项包括消息发布周期，心跳周期等相关配置。

### 强制关闭

**强制关闭**选项卡允许您根据资源使用阈值配置自动关闭行为。此功能可以防止由于过度消耗资源（例如消息队列长度或堆内存大小）而导致系统不稳定。

在**强制关闭**选项卡页面中，您可以配置以下字段的设置：

- **启用强制关闭**：此开关用于启用或禁用强制关闭功能。当启用时，如果超过指定的资源阈值，系统将自动触发客户端进程关闭。默认为`启用`。
- **最大堆内存**：指定系统允许的最大堆内存大小。如果堆内存超出此限制，系统将启动强制关闭，以保持稳定性。默认为`32 MB`。
- **最大邮箱大小**：定义邮箱消息队列的最大允许长度。如果队列长度超过此限制，系统将触发强制关闭以防止系统过载。默认为`1000`。


## 集群

**集群**配置页面用于管理 EMQX 集群节点，您可以在此页面查看节点详情、邀请新节点以及移除已有节点。

::: tip 注意

如果您使用的是 EMQX 社区版，将无法邀请新节点。集群功能在试用期内可用，试用结束后需购买商业 License，否则该功能将被禁用。

:::

从 EMQX v6.0.0 开始，您可以添加**集群描述**，以帮助标识集群的用途或部署环境。在输入框中填写有意义的描述，并点击**保存**应用更改。

保存后，集群描述将显示在控制台顶部，在**集群**和**集群概览**等页面中便于快速查看。点击编辑图标可跳转回**集群**页面修改描述。

- 若要查看节点详情，点击节点名称，将跳转至**集群概览**页面以获取详细信息。
- 若要邀请新节点，点击**邀请**按钮，在**节点名称**输入框中填写节点的 IP 地址或主机名，然后点击**确定**。
- 若要移除节点，点击**移除**按钮。系统将在移除前弹出确认对话框以进行确认。

<img src="./assets/invite-node.png" alt="cluster-node" style="zoom:67%;" />

EMQX 还提供了通过使用命令的方式来创建和管理集群，详细信息请参考[创建和管理集群](../deploy/cluster/create-cluster.md)。

## 命名空间

EMQX 中的命名空间功能为单个集群内的不同客户端组提供逻辑隔离。您可以在**命名空间**页面管理命名空间。有关如何管理和配置命名空间的详细指导，参阅[命名空间](../multi-tenancy/namespace-overview.md)。

## 监听器

**管理** -> **监听器**页面默认是一个监听器的列表页。EMQX 默认提供了四个常用的监听器：

- 使用 1883 端口的 TCP 类型监听器
- 使用 8883 端口的 SSL/TLS 安全连接类型监听器
- 使用 8083 端口的 WebSocket 类型监听器
- 使用 8084 端口的 WebSocket 安全类型监听器

![config-listener-list](./assets/config-listener-list.png)

通常使用以上默认的监听器，输入对应端口和协议类型即可。如果需要添加其他类型的监听器，可以点击右上角的**添加监听器**按钮，添加一个新的监听器。

### 添加监听器

在右侧弹出的**添加监听器**面板中可以看到一个添加监听器的表单，其中中包含了监听器的基本配置项。您可以输入一个监听器名称用于标识该监听器；选择一个监听器类型，包括 tcp、ssl、ws 和 wss 类型；输入监听器地址，可以输入 IP 地址和端口号，使用 IP 地址可以限制监听器的访问范围，也可以直接输入一个端口号。

![image](./assets/config-listener-add.png)

#### 速率限制

在**添加监听器**表单中的**速率限制**区域，您可以对 EMQX 的使用时，接入消息，分发消息的速率进行限制，包括：

- 最大连接速率（监听器）
- 最大消息发布速率（单客户端）
- 最大消息发布流量（单客户端）

配置速率限制可以在当消息数据过载或客户端过度请求时确保系统和网络的稳定性。

更多关于速率限制的详细配置文档，请参考[速率限制](../rate-limit/rate-limit.md)。

更多关于监听器配置的详情，请参考[企业版配置手册](https://docs.emqx.com/zh/enterprise/v6.2.0/hocon/)。

### 管理监听器

完成添加一个监听器后，可以在列表中看到该监听器。点击监听器名称进入到编辑页面，在该页面下可以修改该监听器的配置或删除一个监听器。需要注意的是，监听器名称、类型和监听地址不可在设置中再次修改。

点击编辑页面中的**删除**按钮，可以删除该监听器。当删除监听器时，需要输入目前正在删除的监听器名称，以确认删除操作。列表中我们还可以点击启用开关来启用或者禁用该监听器。列表中还可以查看每个监听器下的连接数。

::: tip 注意

修改和删除监听器是一个带有危险性的操作，需要谨慎操作。如果更新或删除了一个监听器，那么该监听器上的客户端连接将会被断开。

:::

## 日志

**管理**->**日志**为日志相关的配置页面。该页面包含**控制台日志**、**文件日志**、**日志限流**，和**审计日志**标签页。

EMQX 支持两种不同的日志输出方式：控制台输出日志和文件输出日志。您可以根据需要选择输出方式或同时启用这两种方式。在相应的配置页面中，可以设置是否启用日志处理进程，设置日志级别，日志格式类型，文件日志还可以设置日志文件的路径和日志名称。更多关于日志的详细配置说明，请参考[通过 Dashboard 修改日志配置](../observability/log.md#通过-dashboard-修改日志配置)。

在**日志限流**配置页面，您可以设置日志限流的时间窗口。关于日志限流功能的介绍，参考[日志限流](../observability/log.md#日志限流)。

在**审计日志**配置页面，您可以启用或禁用审计日志这一功能并对该功能进行相关配置。详细的配置说明，参考[通过 Dashboard 启用](./audit-log.md#通过-dashboard-启用)。

## 监控

点击左侧配置中的**管理** -> **监控**进入监控集成的配置页面。该页面下包含两个标签页：

- **系统**：根据用户需要，针对[告警](./diagnose.md#告警)功能进行一定程度的设置调整，如告警阈值、检查间隔等。
- **监控集成**：提供了与第三方监控平台的集成配置。

### 系统

如当前告警触发阈值或告警监控检查间隔的默认值不符合用户的实际需要，可以在此页面进行设置调整。当前设置分为两个模块：**Erlang 虚拟机**和**操作系统**，各配置项的默认值和说明可查看[告警](https://docs.emqx.com/zh/emqx/latest/observability/alarms.html)。

<img src="./assets/monitoring-system.png" alt="image" style="zoom:67%;" />

### 监控集成

该页面主要提供了与第三方监控平台的集成配置，目前 EMQX 提供了与 Prometheus、OpenTelemetry，和 Datadog 的集成方式。

当使用 `Prometheus` 第三方监控服务时，您可以在该页面快速开启该配置，并配置推送数据地址与数据上报时间间隔等。我们可以直接使用 EMQX 提供的 API `/prometheus/stats` 来获取监控数据，使用该 API 时不需要认证信息，具体的 API 请参考 [Prometheus](../observability/prometheus.md)。

或者可以选择配置一个 `Pushgateway` 的服务地址，来将监控数据推送到 `Pushgateway`，然后再由 `Pushgateway` 推送到 `Prometheus` 服务。通常情况下我们不需要使用 `Pushgateway` 就能监控到 EMQX 的指标数据，点击查看[何时使用 Pushgateway](https://prometheus.io/docs/practices/pushing/)。

点击底部的**帮助**按钮，选择默认或使用 `Pushgateway` 的方式，根据提供的使用步骤，配置相关所需服务的地址或 API 信息，即可快速生成对应的 `Prometheus` 配置文件，最后再使用该配置文件来启动 `Prometheus` 服务即可。

启动 `Prometheus` 服务后，可以在帮助页面的最后，点击下载我们提供的 `Grafana` 默认的监控面板的配置文件，将该文件导入到 `Grafana` 中，我们就可以通过可视化面板来查看 EMQX 的监控数据，用户也可以根据需求在 `Grafana` 中对监控数据进行自定义修改。同时模版也可以在 [Grafana 官方网站](https://grafana.com/grafana/dashboards/17446-emqx/)中下载。

![emqx-grafana](./assets/emqx-grafana.jpg)

关于 OpenTelemetry 和 Datadog 集成的配置详情，参考[集成 OpenTelemetry](../observability/opentelemetry/opentelemetry.md) 和 [集成 Datadog](../observability/datadog.md)。

## 集群连接

集群连接功能可以将多个独立的 EMQX 集群连接在一起，因此通常地理位置分散的不同集群之间的客户端能够相互通信。用户可以在该页面中创建和配置集群连接。具体的创建和配置指导，参考 [EMQX 集群连接](../cluster-linking/introduction.md)。
