1. 5分钟搞定Docker单机部署
第一次接触EMQX的朋友,我强烈建议从Docker方式入手。就像搭积木一样简单,三行命令就能让MQTT服务跑起来。最近给客户做POC测试时,我习惯用这种方式快速验证功能。
先说说硬件要求。官方建议最小配置是2核CPU+4GB内存,但实测1核2GB的轻量云服务器也能流畅运行基础功能。不过如果客户端连接数超过5000,还是老老实实按推荐配置来。
拉取镜像的命令很简单:
docker pull emqx/emqx:5.3.2启动容器时要注意端口映射。有次我忘了映射18083端口,结果死活打不开Dashboard,排查了半天才发现问题。建议直接复制这段完整命令:
docker run -d --name emqx \ -p 1883:1883 \ -p 8083:8083 \ -p 8883:8883 \ -p 8084:8084 \ -p 18083:18083 \ emqx/emqx:5.3.2这几个端口的作用得记牢:
- 1883:标准MQTT协议端口
- 8083:WebSocket连接端口
- 8883:SSL加密的MQTT端口
- 8084:WebSocket+SSL端口
- 18083:管理控制台端口
启动后别急着操作,先用这个命令看看日志是否正常:
docker logs -f emqx当看到"EMQX 5.3.2 is running now!"的提示时,打开浏览器访问http://服务器IP:18083。默认账号是admin/public,记得第一时间改密码!上周还有客户因为用默认密码被黑了,所有设备消息都被监听。
2. 生产环境宿主机部署详解
Docker虽好,但真实生产环境我更推荐直接用RPM包部署。去年有个项目用Docker跑EMQX,突发流量时容器OOM崩溃,排查发现是Docker内存限制配置不当。宿主机部署性能更稳定,也方便做系统级调优。
以Rocky Linux 9为例,安装过程比想象中简单。EMQX提供了一键安装脚本,连依赖项都自动处理:
curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash sudo yum install emqx -y启动服务前有个小技巧:先修改内核参数。MQTT服务需要处理大量网络连接,建议调整以下参数:
echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf echo "net.core.somaxconn = 8192" >> /etc/sysctl.conf sysctl -p然后用systemd管理服务:
sudo systemctl start emqx sudo systemctl enable emqx遇到过最坑的问题是防火墙。有次部署完死活连不上,后来发现是firewalld没放行端口。建议直接配置永久规则:
sudo firewall-cmd --permanent --add-port=1883/tcp sudo firewall-cmd --permanent --add-port=18083/tcp sudo firewall-cmd --reload验证服务是否正常,除了看Dashboard,还可以用mosquitto客户端测试:
mosquitto_pub -h localhost -t test -m "hello" -p 18833. 集群部署的三大关键步骤
单节点扛不住高并发?集群部署才是王道。上个月刚给物流公司做了200+节点的EMQX集群,分享几个实战经验。
3.1 节点准备
每台主机先按前文方法完成单机部署。重点注意两点:
- 主机时间必须同步,否则集群会报错
- 主机名要能互相解析
建议每台机器都配置hosts文件:
192.168.149.210 emqx-node1 192.168.149.211 emqx-node23.2 关键配置
主配置文件/etc/emqx/emqx.conf需要修改三个地方:
node { name = "emqx@192.168.149.210" cookie = "emqxsecretcookie" } cluster { name = emqx discovery_strategy = manual }踩过的坑提醒:
- 所有节点的cluster.name必须相同
- cookie相当于集群密码,必须一致
- name格式必须是emqx@IP或emqx@主机名
3.3 节点加入
在第二个节点执行加入命令:
emqx ctl cluster join emqx@192.168.149.210成功后会显示:
Join the cluster successfully. Cluster status: #{running_nodes => ['emqx@192.168.149.210','emqx@192.168.149.211']}验证集群状态有个隐藏技巧:
emqx_ctl cluster status4. 集群管理实战技巧
建集群容易管集群难。下面这些命令能帮你省下80%的运维时间。
4.1 节点退出
正常退出用leave命令:
emqx ctl cluster leave节点宕机时用force-leave:
emqx ctl cluster force-leave emqx@192.168.149.2114.2 负载均衡
推荐用Nginx做TCP负载均衡,配置示例:
stream { upstream emqx_cluster { server 192.168.149.210:1883; server 192.168.149.211:1883; } server { listen 1883; proxy_pass emqx_cluster; } }4.3 监控告警
集成Prometheus监控的配置:
# emqx.conf prometheus { enable = true push_gateway_server = "http://prometheus:9091" }关键指标要关注:
- 连接数(emqx_connections_count)
- 消息速率(emqx_messages_received)
- CPU/内存使用率
最近遇到个典型case:某客户集群消息堆积,查监控发现是单个主题订阅者过多。后来通过设置主题分流解决了问题。