张建平 9adaacb84d feat: 初始化项目结构
添加 README.MD、images目录、single_node目录及其配置文件,multi_node目录及各节点配置。
2025-02-22 18:03:33 +08:00

105 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EMQX 集群配置指南
该目录用于模拟 EMQX 集群环境。每个子文件夹代表集群中的一个服务器节点,节点文件夹包括:
- **node20.220/**
- **node20.50/**
- **node22.85/**
## 主要功能
各节点将使用独立的配置文件(例如各节点下的 `api_key.conf``docker-compose.yaml`),通过 Docker Compose 方式启动 EMQX 服务,并构建一个集群环境以实现消息同步与负载均衡。
## nginx 负载均衡配置
新增的 nginx.conf 文件用于配置负载均衡,支持 TCP、TLS 以及 WebSocket 协议转发。请根据实际部署环境调整证书路径与后端服务配置。
## DNS 负载均衡配置
除了nginx方案另一种常见方案是采用DNS服务器进行负载均衡。DNS负载均衡通过在DNS解析记录中配置多个后端节点实现流量的轮询分发。此方案配置简单无需额外的反向代理软件但在健康检查和故障切换方面存在不足并且受DNS缓存影响更新较慢。
## 端口要求
确保你的服务器或虚拟机开放以下端口,以便 EMQX 正常运行及集群节点间的通信:
- **EMQX 客户端端口**(用于 MQTT/WS/HTTPS 协议接入):
- 1883
- 8083
- 8084
- 8883
- 18083
- **集群同步端口**(用于节点间状态同步与集群通信):
- 4370
- 5369
- 5370
## 发布订阅测试
使用 MQTTX 工具,可以分别从不同节点发起发布和订阅请求,验证不同节点之间的消息传递。测试结果显示,三个节点均能实现消息的成功发布与订阅,证明集群内的消息同步功能正常。
## 控制台访问
任意节点均可通过管理端口(例如,访问 `http://<节点IP>:18083`)进入 EMQX 控制台。通过控制台可以监控集群状态、管理配置及进行其他操作,不必限定于单一节点。
![集群概览](../images/集群概览.png)
## 启动集群
1. 分别进入各节点目录,例如 `node20.220/``node20.50/``node22.85/`
2. 检查并配置各节点下的 `api_key.conf` 文件,确保各节点使用正确的认证信息。
3. 启动 Docker Compose 服务:
```bash
docker-compose up -d
```
4. 各节点将自动相互发现并建立集群,完成后即可通过任意节点的管理端口(如 18083访问 EMQX 管理界面。
## 注意事项
- 请确保所有要求的端口在宿主机或虚拟机中均已开放,避免防火墙阻止集群内部通信。
- 集群节点配置应保持一致,某些配置如集群名称和共享认证方式应统一设置。
- 若在启动过程中遇到问题,请检查各节点日志信息以定位问题。
## 负载均衡方案对比及推荐
### nginx 负载均衡方案
优势:
- 支持TCP、TLS及WebSocket协议
- 支持健康检测和故障转移;
- 可灵活配置转发规则;
- 高性能且成熟稳定。
劣势:
- 需要额外配置nginx服务及证书管理
- 配置较复杂,需针对不同协议单独调优;
### DNS 负载均衡方案
优势:
- 配置简单,无需额外软件安装;
- 实现多节点轮询较为容易;
劣势:
- 缺乏实时健康检查能力;
- 更新较慢受DNS缓存影响故障切换不够及时
### 推荐方案
综合对比推荐采用nginx负载均衡方案以实现更高效、稳定的负载分发和故障切换适合对性能和可靠性要求较高的生产环境。
按照以上说明配置后,即可启动并运行一个基于 Docker 的 EMQX 集群。
---
## EMQX测试
### 多节点链接
![多节点链接](../images/多节点链接.png)
### 单节点发布订阅
![单节点发布订阅](../images/单节点发布订阅.png)
### 多节点发布订阅
![1节点发布2节点订阅](../images/1节点发布2节点订阅.png)