开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
最新镜像
目前官方最新的RocketMQ镜像版本是4.9.4,小伙伴可前往docker官网查看:hub.docker.com/r/apache/ro…。
NameServer服务与Broker服务的启动都是同一个镜像,只不过启动命令不同。
编写docker-compose文件
根据上面找到的最新镜像,我们可以开始编写docker-compose.yaml文件。
- NameServer配置
version: "3.1"
services:
namesrv:
image: apache/rocketmq:4.9.4
container_name: mqnamesrv
ports:
- "9876:9876"
environment:
JAVA_OPT: -server -Xms512m -Xmx512m
command: sh mqnamesrv
volumes:
- "./rocketmq/namesrv/logs/rocketmqlogs:/home/rocketmq/logs/rocketmqlogs"
上面的这个配置NameServer的配置,主要是设置了开放端口、配置JVM启动参数以及映射对应的日志文件。NameServer实例的启动命令是sh mqnamesrv;因为NameServer比较简单,所以配置项不是很多。
- Broker配置
version: "3.1"
services:
mqbroker1:
image: apache/rocketmq:4.9.4
container_name: mqbroker1
ports:
- "10911:10911"
- "10909:10909"
- "10912:10912"
environment:
JAVA_OPT_EXT: -server -Xms512M -Xmx512M -Xmn256m
command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
depends_on:
- namesrv
volumes:
- "./rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf"
- "./rocketmq/broker/logs/rocketmqlogs:/home/rocketmq/logs/rocketmqlogs"
- "./rocketmq/broker/store:/home/rocketmq/store"
broker服务需要开放三个端口,10911是处理消费者请求的,10909处理生产者请求,10912用于broker之间的主从同步;启动命令一定要指定配置文件broker.conf,前提是该配置文件通过volumes挂载到容器中;另外需要注意的是需要额外把存储文件也挂载出来,否则容器被删后,数据文件就丢失了。
部署过程中,比较重要的就是配置文件broker.conf:
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
brokerIP1 = 注册到nameserver的ip
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = nameserver的ip:9876
autoCreateTopicEnable = false
storePathRootDir = /home/rocketmq/store
storePathCommitLog = /home/rocketmq/store/commitlog
storePathConsumeQueue = /home/rocketmq/store/consumequeue
storePathIndex = /home/rocketmq/store/index
storeCheckpoint = /home/rocketmq/store/checkpoint
abortFile = /home/rocketmq/store/abort
上面配置中,需要修改的就是brokerIP1和namesrvAddr两个参数,需要根据实际情况来做调整。如果不设置
brokerIP1,那么注册到NameServer上面的broker就是容器内的ip,那么很可能应用服务是无法访问的,所以这个ip地址一定要应用服务能够访问。namesrvAddr指定的是NameServer服务所在机器的ip和端口。
注意
启动后可能broker服务会启动失败,很有可能是因为挂载的文件夹权限不够造成的,因为broker服务需要对/home/rocketmq/store文件夹有写的权限。