1. 阿里云ECS服务器选购与初始化配置
在开始部署EMQX MQTT服务器之前,我们需要先准备一台合适的云服务器。阿里云ECS作为国内主流云服务提供商,其稳定性和性价比都非常适合物联网项目的初期部署。
1.1 服务器规格选择要点
对于MQTT broker的服务器选型,需要重点考虑以下几个参数:
- CPU:建议至少2核,MQTT的消息转发对单核性能敏感
- 内存:4GB起步,每个连接约消耗10KB内存
- 带宽:按设备数×消息频率×消息大小计算,初期1Mbps可支持约100设备同时在线
- 系统盘:40GB SSD足够,日志文件需要定期清理
实测配置参考:
bash复制# 查看系统资源使用情况
top -c
free -h
df -h
1.2 安全组配置关键项
阿里云安全组相当于虚拟防火墙,必须开放以下端口:
- 1883:MQTT协议默认端口
- 8883:MQTT SSL加密端口
- 8083:WebSocket连接端口
- 18083:EMQX Dashboard管理端口
配置示例:
bash复制# 查看已开放端口
sudo iptables -L -n
# 临时开放端口(重启失效)
sudo iptables -I INPUT -p tcp --dport 18083 -j ACCEPT
重要提示:生产环境务必配置白名单IP访问规则,避免管理端口暴露在公网
2. Ubuntu系统环境准备
2.1 系统更新与依赖安装
新购服务器首先需要执行系统更新:
bash复制# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装常用工具
sudo apt install -y net-tools curl wget vim
# 检查防火墙状态
sudo ufw status
2.2 时区与时间同步配置
物联网设备对时间同步要求较高,建议配置NTP:
bash复制# 设置时区
sudo timedatectl set-timezone Asia/Shanghai
# 安装chrony时间服务
sudo apt install -y chrony
sudo systemctl enable chronyd
3. EMQX的两种安装方式对比
3.1 APT仓库安装(推荐)
这是最简便的安装方式,适合长期使用的生产环境:
bash复制# 添加EMQX官方源
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
# 安装最新稳定版
sudo apt-get install emqx -y
# 启动服务
sudo systemctl start emqx
优势:
- 自动处理依赖关系
- 支持一键升级
- 集成systemd管理
3.2 压缩包方式安装
适合无外网访问的内网环境:
bash复制# 下载指定版本
wget https://www.emqx.com/en/downloads/broker/5.0.4/emqx-5.0.4-ubuntu20.04-amd64.tar.gz
# 解压安装
mkdir -p /opt/emqx
tar -zxvf emqx-5.0.4-ubuntu20.04-amd64.tar.gz -C /opt/emqx
# 启动服务
/opt/emqx/bin/emqx start
特点:
- 无需root权限
- 可多版本并存
- 适合快速测试
4. EMQX基础配置与调优
4.1 服务状态检查
验证EMQX是否正常运行:
bash复制# 查看服务状态
emqx_ctl status
# 检查端口监听
netstat -tunlp | grep emqx
# 查看日志
tail -f /var/log/emqx/emqx.log
4.2 基础网络配置
修改配置文件/etc/emqx/emqx.conf关键参数:
conf复制# 监听地址修改为0.0.0.0
listeners.tcp.default.bind = 0.0.0.0:1883
# 增加WebSocket支持
listeners.ws.default.bind = 0.0.0.0:8083
# 集群节点名称
node.name = emqx@服务器IP
4.3 性能调优参数
根据服务器配置调整:
conf复制# 连接数相关
zone.external.max_connections = 100000
zone.external.max_packet_size = 10MB
# 消息吞吐
listener.tcp.external.max_conn_rate = 1000
zone.external.rate_limit = 100MB/s
5. Dashboard使用与安全加固
5.1 首次登录配置
- 访问
http://服务器IP:18083 - 默认账号:admin/public
- 立即修改默认密码
- 开启HTTPS访问(需准备SSL证书)
5.2 客户端认证配置
生产环境必须配置认证:
- 进入Dashboard -> 访问控制 -> 认证
- 创建Password-Based认证
- 选择内置数据库
- 添加测试用户
认证测试方法:
bash复制# 使用mosquitto客户端测试
mosquitto_sub -h 服务器IP -t test -u 用户名 -P 密码
6. 常见问题排查指南
6.1 连接失败排查步骤
- 检查服务状态:
systemctl status emqx - 验证端口开放:
telnet 服务器IP 1883 - 查看防火墙规则:
sudo ufw status - 检查阿里云安全组配置
6.2 性能问题优化
高并发场景建议:
- 调整Linux内核参数
bash复制# 增加文件描述符限制
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
sysctl -p
- 关闭IPv6(如不需要)
- 使用专业版EMQX Enterprise
6.3 日志分析技巧
关键日志位置:
/var/log/emqx/emqx.log:主日志/var/log/emqx/error.log:错误日志
常用grep命令:
bash复制# 筛选错误日志
grep -i error /var/log/emqx/emqx.log
# 统计连接数
grep -c "client connected" /var/log/emqx/emqx.log
7. 生产环境部署建议
经过基础部署后,还需要考虑:
- 高可用方案:部署多节点集群
- 数据持久化:配置MySQL/PostgreSQL后端
- 监控告警:集成Prometheus+Grafana
- 日志收集:使用ELK堆栈
- 备份策略:定期备份配置文件
集群部署示例命令:
bash复制# 节点1
emqx_ctl cluster join emqx@节点2IP
# 查看集群状态
emqx_ctl cluster status
在实际项目部署中,我发现阿里云ECS的突发性能实例(t5)不适合高并发MQTT场景,容易出现CPU积分耗尽的情况。建议选择计算型(c7)或通用型(g7)实例,并且要注意EMQX的Erlang虚拟机对CPU亲和性的优化配置
