集群部署
本文介绍如何使用 FlowMQ 的集群部署工具 dm 在多台 Linux 节点上自动化部署 FlowMQ 集群。
说明
本文示例以 3 台节点为例(node1~node3),实际请按你的拓扑进行调整。
前置条件
- 目标节点为 Linux(Debian/Ubuntu 或 RHEL/CentOS 系)。
- 节点之间的网络互通。
- 已准备好 FlowMQ 的安装包(需要与节点的操作系统,CPU 架构相匹配)并分发到了各节点上。
步骤 1:安装 dm 与 dm-agent
解压 FlowMQ 的安装包并安装 dm (在所有目标节点均需要安装)。
Debian/Ubuntu
bash
sudo dpkg -i dm-<version>-amd64.debRHEL/CentOS
bash
sudo rpm -i dm-<version>-amd64.rpm在目标节点启动 dm-agent
在每台目标节点安装完成后,启动 dm-agent :
bash
sudo systemctl enable --now dm-agent验证 dm-agent 状态:
bash
systemctl status dm-agent步骤 2:创建部署配置文件
选定任一目标节点为控制节点,创建部署配置文件 deploy.toml。
示例:
toml
[agents]
node1 = "192.168.1.10:14159"
node2 = "192.168.1.11:14159"
node3 = "192.168.1.12:14159"
[fdb.deploy]
on = "all"
client-package = "foundationdb-clients_7.4.5-1_amd64.deb"
server-package = "foundationdb-server_7.4.5-1_amd64.deb"
processes-per-machine = 1
replication-mode = "double"
storage-engine = "ssd-redwood-1"
[fdb.config]
datadir = "/var/lib/foundationdb/data/$ID"
logdir = "/var/log/foundationdb"
[flowmq.deploy]
on = "all"
package = "flowmq.deb"
num = 4
[flowmq.config]
cluster-id = "flowmq-cluster-1"
cluster-file = "/etc/foundationdb/fdb.cluster"
class = "mqtt"配置说明:
[agents]:填写目标节点 dm-agent 的监听地址(IP:PORT), dm-agent 默认监听14159端口。[fdb.deploy]:指定 FDB 的部署配置。[fdb.config]:指定 FDB 的启动和运行配置。[flowmq.deploy]:指定 FlowMQ 部署配置。[flowmq.config]:指定 FlowMQ 的启动和运行配置。
步骤 3:部署并启动 FDB
在控制机执行:
bash
dm -c deploy.toml fdb install
dm -c deploy.toml fdb start验证 FDB 集群状态:
bash
fdbcli --exec "status"当输出显示集群可用后,再进行下一步部署 FlowMQ 。
步骤 4:部署并启动 FlowMQ
在控制机执行:
bash
dm -c deploy.toml flowmq install
dm -c deploy.toml flowmq start验证 FlowMQ 集群成员(在任意已安装 FlowMQ 的节点执行):
bash
fmqcli cluster list-cluster-members若返回成员列表且节点状态正常,则部署完成。
安装卸载
停止服务:
bash
# Stop services
dm -c deploy.toml flowmq stop
dm -c deploy.toml fdb stop卸载/移除服务
WARNING
注意该操作会清除数据,请勿在生产环境直接操作
bash
dm -c deploy.toml flowmq remove
dm -c deploy.toml fdb remove配置参考
[fdb.deploy]
| 配置项 | 说明 | 默认值 |
|---|---|---|
on | 目标节点范围(如 all 或指定节点集合) | - |
client-package | FDB client 安装包路径 | 必填 |
server-package | FDB server 安装包路径 | 必填 |
processes-per-machine | 每台机器启动的 fdbserver 进程数 | 1 |
replication-mode | 复制模式:single / double / triple | double |
storage-engine | 存储引擎:ssd-2 / ssd-redwood-1 / memory | ssd-redwood-1 |
[fdb.config]
| 配置项 | 说明 |
|---|---|
datadir | 数据目录($ID 表示进程 ID) |
logdir | 日志目录 |
memory | 内存限制(例如:8GiB) |
[flowmq.deploy]
| 配置项 | 说明 | 默认值 |
|---|---|---|
on | 目标节点范围(如 all 或指定节点集合) | - |
package | FlowMQ 安装包路径(.deb 或 .rpm) | /root/flowmq.deb |
num | 每台机器的 FlowMQ 实例数(与 mqtt-num/kafka-num 二选一) | 1 |
mqtt-num | 每台机器的 FlowMQ 实例数(class = mqtt) | - |
kafka-num | 每台机器的 FlowMQ 实例数(class = kafka) | - |
注意:num 与 mqtt-num/kafka-num 不可同时使用。
混合角色示例:
toml
[flowmq.deploy]
on = "all"
package = "/root/flowmq.deb"
mqtt-num = 2
kafka-num = 1[flowmq.config]
| 配置项 | 说明 |
|---|---|
cluster-id | FlowMQ 集群标识符 |
cluster-file | FDB fdb.cluster 文件路径 |
class | 节点角色(如 mqtt、kafka 等), 如果在 [flowmq.deploy] 里配置了 mqtt-num 或 kafka-num 会自动设置对应角色,无需填写 |
memory | 内存限制(例如:8GiB) |
以下配置项在开启 Kafka 功能时需要配置:
| 配置项 | 说明 |
|---|---|
knob-kafka-s3-host | S3 存储服务地址,或者 S3 bucket 的 URL(具体见 knob-kafka-s3-host-url-style) |
knob-kafka-s3-host-url-style | S3 URL 风格:path 表示路径风格(http://endpoint/bucket/key);virtualhost 表示虚拟主机风格(http://bucket.endpoint/key) , 默认值是 path |
knob-kafka-s3-service | S3 服务端口 |
knob-kafka-s3-disable-https | 是否禁用 HTTPS(true / false), 默认是 false |
knob-kafka-s3-region | S3 存储区域 |
knob-kafka-s3-bucket | S3 存储桶名称 |
knob-kafka-s3-bucket-prefix | S3 存储桶内的路径前缀, 默认是 cluster-id |
knob-kafka-s3-auth-type | S3 认证方式,默认aksk |
knob-kafka-s3-access-key | S3 Access Key |
knob-kafka-s3-secret-key | S3 Secret Key |
各存储服务对 S3 URL 风格的支持情况:
| 存储服务 | path | virtualhost |
|---|---|---|
| AWS S3 | 支持 | 支持 |
| 阿里云 OSS | 不支持 | 支持(唯一方式) |
| MinIO / 自建存储 | 支持 | 需 DNS 支持 |
注意
无论 knob-kafka-s3-host-url-style 使用哪种风格,即使 knob-kafka-s3-host 的 URL 中已包含 bucket 和 prefix 信息,knob-kafka-s3-bucket 仍为必填项,且其值必须与 URL 中的 bucket 名称一致,系统会用它来校验 URL 的正确性。