【完整实战】Docker Swarm 部署 RocketMQ 5.3.0 集群|开启 ACL 权限控制(多 Broker+Dashboard)

发布时间:2026/10/27 12:00:45

【完整实战】Docker Swarm 部署 RocketMQ 5.3.0 集群|开启 ACL 权限控制(多 Broker+Dashboard) 文档版本V1.0 编写日期2026‑09‑05 部署环境Docker Swarm RocketMQ版本5.3.0 Dashboard版本1.0.1 集群架构1×NameServer 3×Broker节点 Dashboard控制台开启ACL权限控制说明本文所有 IP、AccessKey/SecretKey 均为演示示例切勿直接用于生产环境部署时请替换为自己服务器真实 IP并重新设置高强度账号密码。环境Docker Swarm 集群RocketMQ 版本5.3.0Dashboard 版本1.0.1 架构1×NameServer 3×Broker 节点 Dashboard开启 ACL 权限管控。⚠️重要坑点提醒Docker Swarm 的 config 是只读挂载mqadmin updateAclConfig热更新 ACL 不会生效修改 ACL 必须重建 config重新 deploy stack。一、环境概述本次部署采用Docker Swarm Stack方式部署RocketMQ5.3.0集群。部署节点主机名mq‑docker‑node主机IP192.168.10.38私有镜像仓库地址192.168.10.74:7080/library/集群组件清单NameServer1个实例RocketMQ注册中心Broker‑a / broker‑b / broker‑c3个Broker服务节点RocketMQ‑Dashboard可视化管理控制台安全特性开启ACL访问权限控制区分管理员账号、业务账号。⚠️重要提醒Docker Swarm的config配置为只读挂载不支持mqadmin工具热更新ACL配置。修改ACL配置必须重建config重新部署stack才能生效。 ✅提示本文所有IP、账号密码均为示例实际部署请自行修改为自己环境的信息。二、端口规划所有端口均为TCP协议防火墙需要放行宿主机对应端口。组件名称容器内部端口宿主机映射端口说明NameServer98769111MQ注册中心客户端连接地址Broker‑a91109110消息broker节点aBroker‑b91089108消息broker节点bBroker‑c91099109消息broker节点cDashboard控制台80809114web管理页面访问端口三、部署前置条件Docker Swarm集群已经完成初始化mq‑docker‑node节点已经加入swarm集群。部署节点可以正常访问私有镜像仓库192.168.10.74:7080能够拉取镜像。服务器防火墙/安全组开放端口9111、9110、9108、9109、9114。服务器时间同步容器挂载/etc/localtime保证容器与宿主机时间一致。四、前期准备工作4.1 创建Docker外部存储卷本方案全部使用external外部存储卷数据独立于容器删除服务不会丢失业务数据。执行下面命令创建存储卷docker volume create rmqnamesrv_logs docker volume create rmqbroker_a_store docker volume create rmqbroker_a_logs docker volume create rmqbroker_b_store docker volume create rmqbroker_b_logs docker volume create rmqbroker_c_store docker volume create rmqbroker_c_logs docker volume create dashboard_data4.2 准备配置文件在宿主机新建工作目录将下面5个文件保存到此目录文件名严格保持一致。4.2.1 plain_acl.yml ACL权限配置文件文件名plain_acl.ymlglobalWhiteRemoteAddresses: - 127.0.0.1 - 192.168.10.* accounts: #管理帐号 - accessKey: mq_admin secretKey: Admin123456 admin: true whiteRemoteAddress: # 业务帐号 mq_biz - accessKey: mq_biz secretKey: Biz654321 whiteRemoteAddress: admin: false defaultTopicPerm: SUB defaultGroupPerm: SUB topicPerms: - BIZ_TOPICPUB|SUB groupPerms: - BIZ_TOPICPUB|SUB账号说明mq_admin管理员账号用于Dashboard登录、mqadmin运维命令。mq_biz业务账号仅对BIZ_TOPIC主题具备发布、订阅权限。⚠️生产环境务必修改AccessKey、SecretKey不要直接使用示例密码。4.2.2 mq53broker‑a.conf broker‑a配置文件名mq53broker‑a.conf# 集群与节点名称 brokerClusterName DefaultCluster brokerName broker-a # 改成你的服务器实际IP brokerIP1 192.168.10.38 brokerVipEnablefalse namesrvAddr rmqnamesrv:9876 listenPort 9110 aclEnabletrue #此处配置项只需要一个就行配置两个是为了兼容不同的版本 aclFile/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml aclPlainConfigFile/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml4.2.3 mq53broker‑b.conf broker‑b配置文件名mq53broker‑b.conf# 集群与节点名称 brokerClusterName DefaultCluster brokerName broker-b # 改成你的服务器实际IP brokerIP1 192.168.10.38 brokerVipEnablefalse namesrvAddr rmqnamesrv:9876 listenPort 9108 aclEnabletrue #此处配置项只需要一个就行配置两个是为了兼容不同的版本 aclFile/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml aclPlainConfigFile/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml4.2.4 mq53broker‑c.conf broker‑c配置文件名mq53broker‑c.conf# 集群与节点名称 brokerClusterName DefaultCluster brokerName broker-c # 改成你的服务器实际IP brokerIP1 192.168.10.38 brokerVipEnablefalse namesrvAddr rmqnamesrv:9876 listenPort 9109 aclEnabletrue #此处配置项只需要一个就行配置两个是为了兼容不同的版本 aclFile/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml aclPlainConfigFile/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml4.2.5 mq53topics.txt Topic脚本文件文件名mq53topics.txt可以为空文件用于shell脚本批量创建topic如果不需要脚本创建topic直接新建空白文件即可。4.3 创建Docker Swarm Config配置对象进入配置文件存放目录执行命令将本地文件上传为swarm外部config对象docker config create plain_acl.yml plain_acl.yml docker config create mq53broker-a.conf mq53broker‑a.conf docker config create mq53broker-b.conf mq53broker‑b.conf docker config create mq53broker-c.conf mq53broker‑c.conf docker config create mq53topics.txt mq53topics.txt修改配置文件通用流程修改宿主机本地配置文件删除旧config对象docker config rm 配置名使用docker config create重新创建重新执行docker stack deploy更新服务。五、Docker‑Compose Stack编排文件文件名docker‑compose‑rmq53.ymlversion: 3.4 services: rmqnamesrv: image: 192.168.10.74:7080/library/rocketmq:5.3.0 command: sh mqnamesrv environment: - JAVA_OPT_EXT-Xms256M -Xmx256M -Xmn128M deploy: replicas: 1 # 改为 any进程无论何种退出码都拉起长期自愈 restart_policy: condition: any delay: 16s placement: constraints: - node.hostname mq‑docker‑node ports: - published: 9111 target: 9876 protocol: tcp mode: host volumes: - rmqnamesrv_logs:/home/rocketmq/rocketmq-5.3.0/logs - /etc/localtime:/etc/localtime:ro networks: - rocketmq rmqbroker-a: image: 192.168.10.74:7080/library/rocketmq:5.3.0 deploy: replicas: 1 restart_policy: condition: any delay: 16s placement: constraints: - node.hostname mq‑docker‑node ports: - published: 9110 target: 9110 protocol: tcp mode: host configs: - source: mq53broker-a.conf target: /home/rocketmq/rocketmq-5.3.0/conf/mq53broker-a.conf # 注意swarm config 只读挂载mqadmin updateAclConfig 热更新会失败 # 改 ACL 只能 docker config create 新版本后重新 deploy - source: plain_acl.yml target: /home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml - source: mq53topics.txt target: /home/rocketmq/rocketmq-5.3.0/bin/mq53topics.txt command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.0/conf/mq53broker-a.conf environment: - NAMESRV_ADDRrmqnamesrv:9876 - JAVA_OPT_EXT-Xms512M -Xmx512M -Xmn192M # swarm stack deploy 会忽略 depends_onbroker 自行重连 namesrv保留仅为可读性 depends_on: - rmqnamesrv volumes: - rmqbroker_a_store:/home/rocketmq/rocketmq-5.3.0/store - rmqbroker_a_logs:/home/rocketmq/rocketmq-5.3.0/logs - /etc/localtime:/etc/localtime:ro networks: - rocketmq rmqbroker-b: image: 192.168.10.74:7080/library/rocketmq:5.3.0 deploy: replicas: 1 restart_policy: condition: any delay: 16s placement: constraints: - node.hostname mq‑docker‑node ports: - published: 9108 target: 9108 protocol: tcp mode: host configs: - source: mq53broker-b.conf target: /home/rocketmq/rocketmq-5.3.0/conf/mq53broker-b.conf - source: plain_acl.yml target: /home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.0/conf/mq53broker-b.conf environment: - NAMESRV_ADDRrmqnamesrv:9876 - JAVA_OPT_EXT-Xms512M -Xmx512M -Xmn192M depends_on: - rmqnamesrv volumes: - rmqbroker_b_store:/home/rocketmq/rocketmq-5.3.0/store - rmqbroker_b_logs:/home/rocketmq/rocketmq-5.3.0/logs - /etc/localtime:/etc/localtime:ro networks: - rocketmq rmqbroker-c: image: 192.168.10.74:7080/library/rocketmq:5.3.0 deploy: replicas: 1 restart_policy: condition: any delay: 16s placement: constraints: - node.hostname mq‑docker‑node ports: - published: 9109 target: 9109 protocol: tcp mode: host configs: - source: mq53broker-c.conf target: /home/rocketmq/rocketmq-5.3.0/conf/mq53broker-c.conf - source: plain_acl.yml target: /home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.0/conf/mq53broker-c.conf environment: - NAMESRV_ADDRrmqnamesrv:9876 - JAVA_OPT_EXT-Xms512M -Xmx512M -Xmn192M depends_on: - rmqnamesrv volumes: - rmqbroker_c_store:/home/rocketmq/rocketmq-5.3.0/store - rmqbroker_c_logs:/home/rocketmq/rocketmq-5.3.0/logs - /etc/localtime:/etc/localtime:ro networks: - rocketmq dashboard: image: 192.168.10.74:7080/library/rocketmq-dashboard:1.0.1 deploy: replicas: 1 restart_policy: condition: any delay: 16s placement: constraints: - node.hostname mq‑docker‑node networks: - rocketmq depends_on: - rmqnamesrv ports: - published: 9114 target: 8080 protocol: tcp mode: host environment: - JAVA_OPTS-Drocketmq.namesrv.addrrmqnamesrv:9876 - JAVA_OPT_EXT-Xms256M -Xmx256M -Xmn128M - rocketmq.config.accessKeymq_admin - rocketmq.config.secretKeyAdmin123456 - rocketmq.config.isVIPChannelfalse - rocketmq.config.loginRequiredtrue # 登录用户loginRequiredtrue默认存在容器内文件重建容器即丢失 # 若在页面上维护过用户/角色建议按实际 dataPath 挂卷持久化 volumes: - dashboard_data:/tmp/rocketmq-console/data - /etc/localtime:/etc/localtime:ro networks: rocketmq: volumes: rmqnamesrv_logs: external: true rmqbroker_a_store: external: true rmqbroker_a_logs: external: true rmqbroker_b_store: external: true rmqbroker_b_logs: external: true rmqbroker_c_store: external: true rmqbroker_c_logs: external: true dashboard_data: external: true configs: plain_acl.yml: external: true mq53broker-a.conf: external: true mq53broker-b.conf: external: true mq53broker-c.conf: external: true mq53topics.txt: external: true六、集群部署启动6.1 执行部署命令将上面docker‑compose‑rmq53.yml放到工作目录执行部署栈命名为rmq53docker stack deploy -c docker‑compose‑rmq53.yml rmq536.2 查看集群服务状态docker stack services rmq53输出列表中所有服务的REPLICAS列显示1/1代表实例启动成功。如果状态不为1/1使用docker service logs 服务名查看服务日志排查启动异常。七、Dashboard控制台访问访问地址http://192.168.10.38:9114项目参数值AccessKeymq_adminSecretKeyAdmin123456说明dashboard开启登录鉴权使用ACL管理员账号登录页面上创建的用户角色数据保存在dashboard_data外部卷实现持久化。 ⚠️实际部署替换为自己服务器IP同时修改账号密码。八、业务客户端接入配置客户端连接NameServer地址192.168.10.38:9111业务账号mq_biz参数accessKeymq_biz secretKeyBiz654321权限说明业务账号仅允许对BIZ_TOPIC主题进行消息发布PUB、消息订阅SUB。九、日常运维操作手册9.1 修改ACL权限配置流程❗重要swarm config只读挂载mqadmin updateAclConfig热更新命令不会生效。 完整修改步骤修改宿主机本地plain_acl.yml配置删除旧config对象docker config rm plain_acl.yml重新创建configdocker config create plain_acl.yml plain_acl.yml更新stack使配置生效docker stack deploy -c docker‑compose‑rmq53.yml rmq539.2 JVM内存参数调整说明组件默认JVM参数NameServer-Xms256M -Xmx256M -Xmn128MBroker-Xms512M -Xmx512M -Xmn192MDashboard-Xms256M -Xmx256M -Xmn128M修改方式修改docker‑compose‑rmq53.yml文件中JAVA_OPT_EXT环境变量重新执行docker stack deploy即可更新JVM参数。9.3 集群停止、重启操作停止集群数据卷、config配置全部保留业务数据不会丢失docker stack rm rmq53停止后重新启动集群直接再次执行部署命令即可docker stack deploy -c docker‑compose‑rmq53.yml rmq539.4 资源清理命令谨慎执行执行后数据丢失清理config配置对象docker config rm plain_acl.yml mq53broker-a.conf mq53broker-b.conf mq53broker-c.conf mq53topics.txt⚠️清理存储卷消息、日志全部删除生产环境严禁随意执行docker volume rm rmqnamesrv_logs rmqbroker_a_store rmqbroker_a_logs rmqbroker_b_store rmqbroker_b_logs rmqbroker_c_store rmqbroker_c_logs dashboard_data十、常见问题与注意事项depends_on不生效问题Docker Swarm stack会忽略yaml中的depends_on依赖配置。Broker服务内部会自动循环重试连接NameServer不需要等待nameServer完全启动。ACL权限不生效确认broker.conf配置中aclEnabletrue确认plain_acl.yml已经通过docker config重新创建并且stack已经重新deploy确认客户端传入accessKey、secretKey正确。客户端连接失败检查防火墙端口放行确认brokerIP1配置为宿主机真实IP不要使用127.0.0.1确认NameServer连接地址填写宿主机9111端口。数据持久化说明所有消息存储、日志、dashboard用户数据全部使用external外部volume执行docker stack rm rmq53不会删除volume只有手动执行docker volume rm才会删除数据。安全风险提示本文档中AccessKey、SecretKey、IP均为演示示例生产环境部署务必修改账号密码、修改为实际服务器IP不要直接复制示例配置直接上线。总结本方案使用 Docker Swarm 外部 config 存放配置文件外部 volume 持久化消息与日志删除 stack 不会丢失业务数据swarm config 只读特性ACL 无法热更新修改权限配置需要重建 config生产环境务必修改示例 IP、accessKey、secretKey做好防火墙端口管控可根据服务器内存调整 JVM 的JAVA_OPT_EXT参数优化性能。具体实施操作步骤另外附带批量topic创建脚本【中间件部署】基于DockerSwarm的RocketMQ5.3.0集群部署含ACL权限控制与Dashboard监控的微服务消息队列实施方案资源-CSDN下载https://download.csdn.net/download/zhaojun917/93394051
延伸阅读

更多相关文章

2026/10/25 22:09:00

全栈开发项目实战:从环境搭建到云部署的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 6:54:53

把游戏美术做成自动驾驶:AI美术自动化全流程实战拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 11:55:52

数据库系统概论复习指南:从物理独立性到事务并发的知识地图

简介:这份资源是面向高校计算机专业学生的《数据库系统概论》期末复习试题文档,适用于课程备考、知识点自测与查漏补缺。内容覆盖数据库系统基础知识、关系数据库与关系代数、SQL语言、数据库设计流程、DBMS功能组成、数据安全与事务处理、并发控制及数据…

2026/10/27 11:55:52

Redis内存暴增问题排查与优化实践

1. Redis内存暴增问题概述Redis作为高性能的内存数据库,其内存使用情况直接影响服务稳定性。当发现Redis实例内存突然暴增时,通常表现为以下现象:监控图表显示内存曲线呈陡峭上升INFO memory命令显示used_memory指标异常增长客户端开始出现OO…

2026/10/27 11:55:52

栈与队列数据结构解析及LeetCode经典题目实战

1. 栈与队列基础概念回顾在正式解题之前,我们需要先明确几个核心概念。栈(Stack)是一种后进先出(LIFO)的数据结构,只允许在一端(称为栈顶)进行插入和删除操作。想象一下餐厅里叠放的…

2026/10/27 11:55:52

数据库系统概论复习指南:三级模式、SQL与事务并发核心考点

简介:这份完整Word版数据库系统概论期末考试试题,面向高校计算机专业学生及备考数据库原理类课程的读者,用于期末复习自测与知识点查漏补缺。压缩包内共1个doc文档,约170KB,内容按章节组织,覆盖数据库系统基…

2026/10/27 11:55:52

移动端SEO优化策略与实战指南

1. 移动端SEO优化的必要性解析 在2023年全球互联网流量统计中,移动设备访问量占比已突破63%,这个数字在电商领域更是高达72%。作为从业十年的SEO老兵,我亲眼见证了从PC端到移动端的流量迁移过程。现在不做移动端优化,就等于主动放…

2026/10/27 11:50:47

MATLAB块匹配全景拼接:从原理到工程实现与避坑指南

简介:MATLAB块匹配全景图像拼接源码包,面向图像处理学习者、计算机视觉初学者及需要完成课程设计或毕业设计的学生,解决多张图像融合为宽视野全景图时的配准与拼接难题。包内采用模块化设计,提供灰度与RGB双处理流程的主程序、特征…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑