Docker部署rocketmq5.3.0最强教程(docker-compose.yml)--上篇
本文介绍了如何通过Docker部署RocketMQ 5.3.0单机版,避开云平台高额费用。主要内容包括:1)使用宝塔面板安装Docker环境;2)拉取RocketMQ官方镜像;3)编写docker-compose.yml文件,配置NameServer、Broker和Dashboard服务;4)创建挂载目录并设置权限;5)准备broker.conf和plain_acl.yml配置文件。重点说明了服务
这段时间上IM,各大云平台的rocketmq价格最低配置部署一个月也要1200个大洋,只能自己部署了,经过各种踩坑之后,写了这篇文章,费话少说上干货!
1. Docker准备
这部分准备简化,不可能你准备Docker部署了连环境都没有安装,最简单的办法是通过宝塔面析进行安装。如需使用请前往【宝塔面板->Docker】

2. 单机版部署
2.1 镜像准备
我这里准备的是rocke程适用于所有的rocketmq5.X版本,因为拉镜像很慢,我们可以事先把镜像拉到本地:
docker pull apache/rocketmq:5.3.0
一直等到显示拉取结束

这时我们在宝塔的docker面板就可以找到这个镜像了
2.2 编写docker-compose.yml文件
首先我们准备docker-compose.yml文件
version: '3.8'
services:
# RocketMQ NameServer
nameserver:
image: apache/rocketmq:5.3.0
container_name: rmqnameserver
command: sh mqnamesrv
ports:
- "9876:9876"
volumes:
- ./data/namesrv/logs:/home/rocketmq/rocketmq-5.1.4/logs
- ./data/namesrv/store:/home/rocketmq/rocketmq-5.1.4/store
environment:
- JAVA_OPT_EXT=-Xms1g -Xmx1g -Xmn512m
restart: unless-stopped
networks:
rmq:
ipv4_address: 172.30.0.3
# RocketMQ Broker Master
broker:
image: apache/rocketmq:5.3.0
container_name: rmqbrokerm
# 修复NameServer地址分隔符,使用逗号而非分号
command: sh mqbroker -n nameserver:9876 -c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
volumes:
- ./data/broker/logs:/home/rocketmq/rocketmq-5.3.0/logs
- ./data/broker/store:/home/rocketmq/rocketmq-5.3.0/store
- ./conf/broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf
- ./conf/plain_acl.yml:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml
environment:
- JAVA_OPT=-Xms1g -Xmx1g
- JAVA_OPT_EXT=-Drocketmq.log.dir=/home/rocketmq/rocketmq-5.3.0/logs -Drocketmq.log.file.size=1073741824
# 修复NameServer地址,使用服务名而非localhost,并包含所有NameServer
- NAMESRV_ADDR=nameserver:9876
depends_on:
- nameserver
restart: unless-stopped
networks:
rmq:
ipv4_address: 172.30.0.10
# RocketMQ Dashboard (可选)
dashboard:
image: apacherocketmq/rocketmq-dashboard:latest
container_name: rmqdashboard
ports:
- "8099:8080"
environment:
- NAMESRV_ADDR=nameserver:9876
- ACL_ENABLE=true # 必须与Broker一致
- ACCESS_KEY=admin
- SECRET_KEY=adminpass
- LOGIN_REQUIRED=true # 5.x新增登录拦截
depends_on:
- nameserver
restart: unless-stopped
networks:
rmq:
ipv4_address: 172.30.0.2
networks:
rmq:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
这里有几个地方需要说明,不然会出错:
一是nameserver是服务名,可自定义,用于标识当前服务(后续其他服务可通过此名称访问该服务),也就是需要指定服务名的时候必须使用这个。
二是container_name: rmqnameserver是指定容器的名称为rmqnameserver,需要访问或是配置容器名的时候用到。
三是command: sh mqbroker -n nameserver:9876 -c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf是启动后执行的命令,这里我们可以看到nameserver:9876使用的就是服务名和服务使用的端口,-c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf是指定启动服务使用的配置文件,注意,这个配置文件的地址是指容器中的地址,而不是宿主机中的配置文件地址,这里如果不设置的话会自动使用容器中的broker.conf,同时/home/rocketmq/rocketmq-5.3.0/这个地址是docker镜像自动生成的,如果你使用的是5.X其他版本请对应修改
如5.1.4请修改为对应版本/home/rocketmq/rocketmq-5.1.4/
四是在配置文件中指定了docker网络和网段,如果这个网段被占用了请进行修改,我使用了172.30这样不常用的网段,是为了方便以后进行配置。
特别提醒:
1.使用一般的编辑器编辑.yml文件,容易在内容中加上多余的空格符,这样会造成启动失败
2.挂载的目录必须先创建,并给777权限,不然docker在创建的时候容易因为权限问题不停重启!
我当前目录为/home/rocketmq,使用命令进行创建和修改权限
mkdir -p /home/rocketmq/conf
mkdir -p /home/rocketmq/data/broker/logs
mkdir -p /home/rocketmq/data/broker/store
chmod -R 777 /home/rocketmq/data
2.3 其他配置文件
接下来是准备broker的配置文件broker.conf和5.X的细粒度权限文件plain_acl.yml,需要注意的是要把这2个文件放入到conf目录中,与docker-compose.yml的挂载配置一致
2.3.1 broker.conf
每个地方我都加了注释,请对应你的情况进行修改
# 集群名称(同一集群内一致)
brokerClusterName = DefaultCluster
# 节点唯一标识
brokerName = broker-a
# 0=Master, >0=Slave
brokerId = 0
# 5.x推荐同步双写
brokerRole = SYNC_MASTER
# 传统模式(true启用新控制器模式)
enableControllerMode = false
# 客户端通信端口
listenPort = 10911
# 主从同步端口
haListenPort = 10912
# 外网访问IP(容器部署需显式指定)请修改为你的IP地址
brokerIP1 = 110.42.*.*
# 主从切换IP
brokerIP2 = 172.30.0.10
# NameServer集群地址
namesrvAddr = nameserver:9876
# 存储路径(容器部署需挂载)
storePathRootDir = /home/rocketmq/rocketmq-5.3.0/store
# CommitLog文件大小
mapedFileSizeCommitLog = 1GB
# 刷盘策略
flushDiskType = SYNC_FLUSH
# 金融级场景使用
flushInterval = 500
# 异步刷盘间隔(ms)
# 流控阈值
maxMessageSize = 8MB
# 单条消息最大尺寸
pullThresholdForQueue = 1000
# 单队列堆积条数阈值
pullThresholdSizeForQueue = 100MB
# 单队列堆积容量阈值
# ACL权限(5.x增强)
aclEnable = true
# 细粒度权限文件路径
aclConfigFile = /home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml
# Prometheus指标暴露
#metricsExporterType = prometheus
#metricsExporterPort = 5557
#metricsExporterLabels = env=production,zone=shanghai
# 弹性队列(动态扩容)
enableAutoExpandQueue = true
# 每次扩容增加队列数
autoExpandQueueNums = 4
# 消息轨迹(全链路追踪)
traceTopicEnable = true
traceTopicName = RMQ_SYS_TRACE_TOPIC
# 内存映射优化(生产环境建议开启)
mappedFileSizeConsumeQueue = 6000000
enableConsumeQueueExt = true
# 增加发送线程池大小
sendMessageThreadPoolNums=16
# 增加请求在队列中的等待时间
waitTimeMillsInSendQueue=2000
需要注意的地方为:
一是brokerIP1为你当前服务器的外网IP,同时防火墙要把10909-10912全部打开,否则会访问出错。
二是storePathRootDir = /home/rocketmq/rocketmq-5.3.0/store这个目录对应的挂载目录一定要777权限,因为要生成对应的文件,没有权限就会失败
2.3.2 细粒度权限文件plain_acl.yml
globalWhiteRemoteAddresses:
- 10.10.103.*
- 192.168.0.*
- 172.30.0.*
accounts:
- accessKey: admin
secretKey: adminpass
whiteRemoteAddress:
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- topicA=DENY
- topicB=PUB|SUB
- topicC=SUB
groupPerms:
# the group should convert to retry topic
- groupA=DENY
- topicB=PUB|SUB
- groupC=SUB
- accessKey: rocketmq2
secretKey: 12345678
whiteRemoteAddress: 192.168.1.*
# if it is admin, it could access all resources
admin: true
这里注意几个地方:
一是用户名和密码要和你在yml中配置的一样
二是在配置topic和group的权限时,要设置好你对应的权限,比如topicB的权限是订阅和发布都有PUB|SUB,DENY是无权限
三是没有设置白名单的话,最好不要把admin: true打开,设置为false就可以了
2.4.创建并启动容器
在docker-compose.yml文件所在的目录,也就是/home/rocketmq目录中运行启动命令
docker-compose up -d

全部启动成功就基本大功告成了,我们可以在宝塔的docker管理面板的容器里看到已经成功启动的容器
这里要注意的是,rmqdashboard和rmqnameserver基本上都是正常启动的,最容易出问题的就是rmqbrokerm,容易因为权限或是配置出错不停重启,我们可以查看容器的日志来查看是否正常启动
正常的启动会显示
The broker[broker-a, 43.225.157.91:10911] boot success. serializeType=JSON and name server is nameserver:9876
如果显示的不是这个内容就表示配置有错,需要查找出对应的错误!
2.5 rmqdashboard监控和维护管理
由于我们使用的是最新版本,所以可以直接对接5.X版本,我们在docker-compose.yml中配置了端口,正常是使用8080,我是因为8080被其他服务占用了,所以改成了8099,改成什么都可以,只要端口没被占用就可以了,注意要打开防火墙,云主机还要打开安全组的对应端口
ports:
- "8099:8080"
我们在浏览器中输入网址和端口打开,默认是英文,我们可以切换语言和版本,这个是支持中文的
我们主要是查看集群这里,我们建立的broker-a是否存在,正常应该是分片为我们设置的broker-a,编号为0,而且是master,地址是我们设置的外网地址,版本是5.3.0
单机版不容易出错,也比较简单,至于rmqdashboard的具体使用我们可以去搜索相应的教程,我就不过多讲述了。
更多推荐


所有评论(0)