1. 5分钟搞定Docker单机部署第一次接触EMQX的朋友我强烈建议从Docker方式入手。就像搭积木一样简单三行命令就能让MQTT服务跑起来。最近给客户做POC测试时我习惯用这种方式快速验证功能。先说说硬件要求。官方建议最小配置是2核CPU4GB内存但实测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协议端口8083WebSocket连接端口8883SSL加密的MQTT端口8084WebSocketSSL端口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-port1883/tcp sudo firewall-cmd --permanent --add-port18083/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 emqx192.168.149.210 cookie emqxsecretcookie } cluster { name emqx discovery_strategy manual }踩过的坑提醒所有节点的cluster.name必须相同cookie相当于集群密码必须一致name格式必须是emqxIP或emqx主机名3.3 节点加入在第二个节点执行加入命令emqx ctl cluster join emqx192.168.149.210成功后会显示Join the cluster successfully. Cluster status: #{running_nodes [emqx192.168.149.210,emqx192.168.149.211]}验证集群状态有个隐藏技巧emqx_ctl cluster status4. 集群管理实战技巧建集群容易管集群难。下面这些命令能帮你省下80%的运维时间。4.1 节点退出正常退出用leave命令emqx ctl cluster leave节点宕机时用force-leaveemqx ctl cluster force-leave emqx192.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某客户集群消息堆积查监控发现是单个主题订阅者过多。后来通过设置主题分流解决了问题。