Skip to content

集群部署

本文介绍如何使用 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.deb

RHEL/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"

[meta.deploy]
on = "all"
package = "flowmq-meta_7.4.5-1_amd64.deb"
processes-per-machine = 1
replication-mode = "double"
storage-engine = "ssd-redwood-1"

[meta.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 端口。
  • [meta.deploy]:指定 Meta 的部署配置。
  • [meta.config]:指定 Meta 的启动和运行配置。
  • [flowmq.deploy]:指定 FlowMQ 部署配置。
  • [flowmq.config]:指定 FlowMQ 的启动和运行配置。

步骤 3:部署并启动 Meta

在控制机执行:

bash
dm -c deploy.toml meta install
dm -c deploy.toml meta start

验证 Meta 集群状态:

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 meta stop

卸载/移除服务

WARNING

注意该操作会清除数据,请勿在生产环境直接操作

bash
dm -c deploy.toml flowmq remove
dm -c deploy.toml meta remove

配置参考

[meta.deploy]

配置项说明默认值
on目标节点范围(如 all 或指定节点集合)-
packageflowmq-meta 安装包路径(.deb.rpm必填
processes-per-machine每台机器启动的 fdbserver 进程数1
replication-mode复制模式:single / double / tripledouble
storage-engine存储引擎:ssd-2 / ssd-redwood-1 / memoryssd-redwood-1
grv-proxiesGRV proxy 进程数1
commit-proxiesCommit proxy 进程数1
resolversResolver 进程数1
clean-data设为 true 在停止时清除数据目录false

[meta.config]

配置项说明默认值
datadir数据目录($ID 表示进程 ID)/var/lib/foundationdb/data/$ID
logdir日志目录/var/log/foundationdb
memory内存限制(例如:8GiB-

[flowmq.deploy]

配置项说明默认值
on目标节点范围(如 all 或指定节点集合)-
packageFlowMQ 安装包路径(.deb.rpm/root/flowmq.deb
num每台机器的 FlowMQ 实例数(与 mqtt-num/kafka-num 二选一)1
mqtt-num每台机器的 FlowMQ 实例数(class = mqtt-
kafka-num每台机器的 FlowMQ 实例数(class = kafka-
dashboard-portDashboard 监听端口5177

注意:nummqtt-num/kafka-num 不可同时使用。

混合角色示例:

toml
[flowmq.deploy]
on = "all"
package = "/root/flowmq.deb"
mqtt-num = 2
kafka-num = 1

[flowmq.config]

配置项说明默认值
cluster-idFlowMQ 集群标识符必填
cluster-fileFDB fdb.cluster 文件路径/etc/foundationdb/fdb.cluster
class节点角色(如 mqttkafka 等), 如果在 [flowmq.deploy] 里配置了 mqtt-numkafka-num 会自动设置对应角色,无需填写-
memory内存限制(例如:8GiB-

以下配置项在开启 Kafka 功能时需要配置:

提示

可以使用 fmqs3 init 根据命令行提示填写信息生成如下参数。

配置项说明默认值
knob-kafka-s3-hostS3 端点地址。path 风格填纯端点(如 s3.us-east-1.amazonaws.com);virtualhost 风格需带 bucket 前缀(如 mybucket.s3.us-east-1.amazonaws.com必填
knob-kafka-s3-portS3 服务端口HTTPS 时通常为 443,HTTP 时如 MinIO 常用 9000
knob-kafka-s3-regionS3 存储区域(如 us-east-1cn-hangzhou-
knob-kafka-s3-bucketS3 存储桶名称必填
knob-kafka-s3-bucket-prefix存储桶内的对象前缀默认为 cluster-id
knob-kafka-s3-host-url-styleURL 风格:pathendpoint/bucket/key)或 virtualhostbucket.endpoint/keypath
knob-kafka-s3-disable-https设为 true 禁用 HTTPS,使用 HTTP 明文传输false
tls-ca-file使用 HTTPS 访问 S3 时必须设置,指向系统 CA 证书包路径-
knob-kafka-s3-auth-type认证方式:aksk(静态 Access Key / Secret Key)aksk
knob-kafka-s3-access-keyS3 Access Key(aksk 认证时必填)-
knob-kafka-s3-secret-keyS3 Secret Key(aksk 认证时必填)-

常见 CA 证书包路径:

  • Debian / Ubuntu:/etc/ssl/certs/ca-certificates.crt
  • RHEL / CentOS:/etc/pki/tls/certs/ca-bundle.crt

各存储服务对 URL 风格的支持情况:

存储服务pathvirtualhost
AWS S3支持支持
阿里云 OSS不支持支持(唯一方式)
MinIO / 自建存储支持需 DNS 支持

注意

knob-kafka-s3-bucket 始终为必填项。使用 virtualhost 风格时,knob-kafka-s3-host 必须以 <bucket>. 为前缀;使用 path 风格时则不能包含 bucket 前缀。