Appearance
FreeMQTT plus 快速部署
很多用户会对部署集群服务感到有点怵,其实没那么难,很容易,甚至比单机版部署还容易。
FreeMQTT plus的易用性借助于 Docker Swarm 的强大。
本指南假设在一台主机上进行部署。
关于跨多主机部署,请参考 Docker Swarm 相应的文档教程,极其容易。
环境
- Linux OS / x86_64
- Docker 28.0.4+
实操
- 拉取 FreeMQTT plus Docker Image
bash
$ docker pull registry.freemqtt.cn/freemqttplus:v260519- 拉取 Nginx Docker Image (可选)
bash
$ docker pull nginx:latest- 克隆 FreeMQTT plus docker stack YAML 脚本
bash
$ git clone git@gitee.com:ningchenglin/freemqtt-swarm-compose.git- 创建 Docker Swarm 集群
bash
# 把 192.168.1.100 替换为你的管理节点内网IP
$ docker swarm init --advertise-addr 192.168.1.100- 创建FreeMQTT plus Docker Swarm 配置
bash
$ cd ./freemqtt-swarm-compose
$ ./create-config.sh- 启动 freemqttplus 集群
直接暴露 docker swarm 集群服务端口 1883、8883 给外网
bash
$ docker stack deploy -c docker-swarm-compose.yml freemqtt或用nginx 作为反向代理对外网提供 MQTT 服务
bash
$ docker stack deploy -c docker-swarm-compose-with-nginx.yml freemqtt注意:上面两个命令只能二选一。
- 查看FreeMQTT plus 集群服务状况
bash
$ docker stack services freemqtt
# 屏幕输出如下:
ID NAME MODE REPLICAS IMAGE PORTS
e32nijw41cuy freemqtt_anode replicated 3/3 registry.freemqtt.cn/freemqttplus:v260519 *:1883->1883/tcp, *:8080->80/tcp, *:8443->443/tcp, *:8883->8883/tcp
j61g4chdwtjc freemqtt_bnode replicated 2/2 registry.freemqtt.cn/freemqttplus:v260519- 查看全部A节点运行状况
bash
$ docker service ps freemqtt_anode
# 屏幕输出如下:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
yqr2al6t6ila freemqtt_anode.1 registry.freemqtt.cn/freemqttplus:v260519 lavm-8td4x375v6 Running Running 4 hours ago
vc1yjcf60a5m freemqtt_anode.2 registry.freemqtt.cn/freemqttplus:v260519 lavm-8td4x375v6 Running Running 4 hours ago
tdw3zql8m1zb freemqtt_anode.3 registry.freemqtt.cn/freemqttplus:v260519 lavm-8td4x375v6 Running Running 4 hours ago- 查看全部B节点运行状况
bash
$ docker service ps freemqtt_bnode
# 屏幕输出如下:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vy1qm3n0m6c8 freemqtt_bnode.1 registry.freemqtt.cn/freemqttplus:v260519 lavm-8td4x375v6 Running Running 4 hours ago
91evrko76n5j freemqtt_bnode.2 registry.freemqtt.cn/freemqttplus:v260519 lavm-8td4x375v6 Running Running 4 hours ago客户端密码
FreeMQTT plus 既考虑到用户项目实施的方便性,又要兼顾系统的安全性,从而采用应用 App token 作为 MQTT 客户端连接的密码进行身份验证。 为此 FreeMQTT plus 在docker 容器内提供了 freemqtt_token 这个命令行工具。
按如下步骤为一个应用(App)生成 token:
- 获取一个B节点容器 ID
bash
$ docker ps | grep freemqtt_bnode
# 屏幕输出如下, 第一列即为对应的 B 节点容器 ID
91a1eabf896e registry.freemqtt.cn/freemqttplus:v260519 "/freemqttd/freemqtt…" 8 hours ago Up 8 hours freemqtt_bnode.2.91evrko76n5j4bfr09b190u4a
c263bdb336dc registry.freemqtt.cn/freemqttplus:v260519 "/freemqttd/freemqtt…" 8 hours ago Up 8 hours freemqtt_bnode.1.vy1qm3n0m6c8t68o1ts5qiies- 利用上面得到的一个B节点 ID 进入相应的容器生成 token
bash
$ docker exec -it 91a1eabf896e /freemqttd/freemqtt_token myapp
# 输出如下:
AppID: myapp
Token: lspO0sxHe+Nhei2v1QBUr+e/9pvn7J+NYe5CPn+cZf0=用上面输出的Token作为 MQTT 客户端连接 FreeMQTT plus 服务的密码就可进行连接测试。
请参照 FreeMQTT指南 > 快速上手中的连接测试,这里不再赘述。
Metrics 信息
- 查看FreeMQTT plus Metrics
bash
$ docker exec -it 91a1eabf896e /freemqttd/cluster_view
# 输出如下:
B-Node List:
B1 host: freemqtt_bnode-1 port: 9200 running uptime 0 days, 08:59:14
B2 host: freemqtt_bnode-2 port: 9200 running uptime 0 days, 08:59:15
A-Node List:
A1 host: freemqtt_anode-1 running uptime 0 days, 08:59:14
A2 host: freemqtt_anode-2 running uptime 0 days, 08:59:14
A3 host: freemqtt_anode-3 running uptime 0 days, 08:59:14
A-Node Metrics:
A1: apps = 2 clients = 2 received = 5 sent = 289 retains = 0 subs = 1 share_subs = 0 timestamp = 1779464062
A2: apps = 2 clients = 2 received = 6 sent = 282 retains = 0 subs = 1 share_subs = 0 timestamp = 1779464062
A3: apps = 2 clients = 2 received = 5 sent = 288 retains = 0 subs = 1 share_subs = 0 timestamp = 1779464062