Docker之EMQX部署:高可用MQTT消息服务器
Docker之EMQX部署:高可用MQTT消息服务器
核心部署命令
# 创建并授权数据目录
mkdir -p /home/emqx/data /home/emqx/log
chown -R 1000:1000 /home/emqx/data /home/emqx/log
# 启动EMQX容器
docker run -d \
--restart=always \
--name emqx \
-v /home/emqx/data:/opt/emqx/data \
-v /home/emqx/log:/opt/emqx/log \
-p 1883:1883 \
-p 8083:8083 \
-p 8084:8084 \
-p 8883:8883 \
-p 18083:18083 \
emqx/emqx:5.10.0端口详解
| 端口 | 协议 | 用途说明 |
|---|---|---|
| 1883 | MQTT | TCP协议默认端口 |
| 8083 | MQTT | WebSocket协议端口 |
| 8084 | MQTT | SSL/TLS WebSocket端口 |
| 8883 | MQTT | SSL/TLS TCP协议端口 |
| 18083 | HTTP | 管理控制台端口 |
目录权限说明
# 关键权限配置
chown -R 1000:1000 /home/emqx/data /home/emqx/log- 1000:1000:EMQX容器默认用户UID:GUID
- 数据目录:存储运行状态、消息持久化数据
- 日志目录:存储运行日志、错误日志
生产环境优化配置
1. 资源限制与网络优化
docker run -d \
--restart=always \
--name emqx \
--memory=2g \
--cpus=2 \
--network=host \ # 高性能场景使用host模式
-v /home/emqx/data:/opt/emqx/data \
-v /home/emqx/log:/opt/emqx/log \
-v /home/emqx/etc:/opt/emqx/etc \ # 挂载配置文件
-p 1883:1883 \
-p 18083:18083 \
emqx/emqx:5.10.02. 自定义配置文件
# 创建配置目录
mkdir -p /home/emqx/etc
# 生成默认配置
docker run --rm emqx/emqx:5.10.0 cat /opt/emqx/etc/emqx.conf > /home/emqx/etc/emqx.conf
# 关键配置修改
echo "
# 允许匿名连接(生产环境建议关闭)
mqtt.allow_anonymous = true
# 最大连接数
mqtt.max_connections = 100000
# 消息大小限制(单位:字节)
mqtt.max_packet_size = 10MB
" >> /home/emqx/etc/emqx.conf访问验证
1. 控制台访问
- 地址:
http://服务器IP:18083 - 默认账号:
admin - 默认密码:
public
2. 服务健康检查
# 检查容器状态
docker ps | grep emqx
# 查看服务日志
docker logs -f emqx
# 测试MQTT连接
docker exec -it emqx emqx ctl status集群部署方案
1. 多节点集群配置
# 节点1
docker run -d --name emqx1 \
-e EMQX_NODE_NAME=emqx@node1 \
-e EMQX_CLUSTER__DISCOVERY_STRATEGY=static \
-e EMQX_CLUSTER__STATIC__SEEDS="[emqx@node1,emqx@node2]" \
emqx/emqx:5.10.0
# 节点2
docker run -d --name emqx2 \
-e EMQX_NODE_NAME=emqx@node2 \
-e EMQX_CLUSTER__DISCOVERY_STRATEGY=static \
-e EMQX_CLUSTER__STATIC__SEEDS="[emqx@node1,emqx@node2]" \
emqx/emqx:5.10.02. Kubernetes部署
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: emqx
spec:
serviceName: emqx
replicas: 3
template:
spec:
containers:
- name: emqx
image: emqx/emqx:5.10.0
env:
- name: EMQX_NODE_NAME
value: "emqx@$(POD_NAME).emqx"安全加固建议
1. 修改默认密码
# 进入容器修改
docker exec -it emqx emqx ctl admins passwd admin MyNewPassword123!2. 启用SSL/TLS加密
# 挂载SSL证书
-v /path/to/ssl:/opt/emqx/certs
-e EMQX_LISTENERS__SSL__EXTERNAL__KEYFILE=/opt/emqx/certs/server.key
-e EMQX_LISTENERS__SSL__EXTERNAL__CERTFILE=/opt/emqx/certs/server.crt3. 网络访问控制
# 只绑定内网IP
-p 192.168.1.100:1883:1883
-p 192.168.1.100:18083:18083监控与维护
1. 关键指标监控
# 查看集群状态
docker exec -it emqx emqx ctl cluster status
# 查看连接数
docker exec -it emqx emqx ctl clients list
# 查看主题统计
docker exec -it emqx emqx ctl topics list2. 日志管理
# 日志轮转配置
docker exec -it emqx vi /opt/emqx/etc/log.conf
# 查看实时日志
tail -f /home/emqx/log/emqx.log.13. 数据备份
# 备份数据和配置
tar -czvf emqx-backup-$(date +%Y%m%d).tar.gz /home/emqx/data /home/emqx/etc
# 恢复备份
tar -xzvf emqx-backup-20231201.tar.gz -C /home/emqx/故障排查指南
1. 常见问题解决
# 端口占用检查
netstat -tulnp | grep 1883
# 权限问题修复
chown -R 1000:1000 /home/emqx/
# 容器启动失败诊断
docker logs emqx2. 性能调优参数
# 调整系统参数
echo 'net.core.somaxconn = 1024' >> /etc/sysctl.conf
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl -p通过以上部署可实现:
- 企业级的MQTT消息服务器
- 高可用的集群架构
- 完善的安全控制机制
- 便捷的监控维护能力
版本提示:EMQX 5.x 版本相比 4.x 在性能和集群管理上有显著提升,建议新项目直接使用 5.x 系列。