之前在使用 RocketMQ 官方的包在搭建的时候,发现好多问题,什么修改内存大小,然后启动 broker 报错,类似 service not available now, maybe disk full
等等… 最后决定还是重新用 docker 搭建下,感觉这样子玩坏了,可以直接把容器干掉,重新启动一个新的容器,毕竟是在学习阶段,这样子快好多。
废话不多说,现在开始搭建。
具体搭建流程
前提说明,由于之前使用非 docker 搭建的时候会出现各种内存不足的情况(因为那个虚拟机上面还搭建了其他好多东西),所以这次我是新创建了一个虚拟机,专门用来搭建 RocketMQ。
第一步:下载官方镜像
可以去官网看下最新的镜像 apache/rocketmq Tags | Docker Hub, 我这里使用的是最新的。
docker pull apache/rocketmq
第二步:部署 NameServer
创建挂载文件夹
# 日志目录
mkdir /apps/rocketmq/nameserver/logs -p
# 保存路劲
mkdir /apps/rocketmq/nameserver/store -p
设置权限
# 777 文件所属者、文件所属组和其他人有读取 & 写入 & 执行全部权限。rwxrwxrwx
chmod 777 -R /apps/rocketmq/nameserver/*
启动 namesrv 容器
docker run -d \
--privileged=true \
--name rmqnamesrv \
-p 9876:9876 \
-v /apps/rocketmq/nameserver/logs:/home/rocketmq/logs \
-v /apps/rocketmq/nameserver/store:/root/store \
-e "MAX_HEAP_SIZE=256M" \
-e "HEAP_NEWSIZE=128M" \
-e "MAX_POSSIBLE_HEAP=100000000" \
apache/rocketmq sh mqnamesrv
第三步:部署 broker
创建挂载文件夹
# 创建需要的挂载目录
mkdir /apps/rocketmq/broker/logs -p \
mkdir /apps/rocketmq/broker/data -p \
mkdir /apps/rocketmq/broker/store -p \
mkdir /apps/rocketmq/broker/conf -p
设置权限
# 777 文件所属者、文件所属组和其他人有读取 & 写入 & 执行全部权限。rwxrwxrwx
chmod 777 -R /apps/rocketmq/broker/*
创建 broker.conf
vi /apps/rocketmq/broker/conf/broker.conf
添加以下配置信息到 broker.conf,这里不对参数做过多的说明,在下面Broker配置详解中有对Broker常用参数做详细介绍:
下面需要修改对应的 brokerIP1
地址!!!
# 集群名称
brokerClusterName=DefaultCluster
# 节点名称
brokerName=broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0
brokerId=0
# Broker服务地址 String 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1=192.168.148.129
# Broker角色
brokerRole=ASYNC_MASTER
# 刷盘方式
flushDiskType=ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen=04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime=72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# 磁盘使用达到95%之后,生产者再写入消息会报错 CODE: 14 DESC: service not available now, maybe disk full
diskMaxUsedSpaceRatio=95
启动 broker
docker run -d \
--name rmqbroker \
--link rmqnamesrv:namesrv \
-p 10911:10911 -p 10909:10909 \
--privileged=true \
-v /apps/rocketmq/broker/logs:/root/logs \
-v /apps/rocketmq/broker/store:/root/store \
-v /apps/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf \
-e "MAX_POSSIBLE_HEAP=200000000" \
-e "MAX_HEAP_SIZE=512M" \
-e "HEAP_NEWSIZE=256M" \
-e "NAMESRV_ADDR=namesrv:9876" \
apache/rocketmq \
sh mqbroker -c /home/rocketmq/broker.conf
最后一行参数说明
sh mqbroker -c /home/rocketmq/broker.conf
启动 broker 服务 使用自定义配置文件。
到此,RocketMQ 就算搭建完了,下面我们来打个搭建一个监控看看。
第四步:搭建监控
下载镜像
docker pull apacherocketmq/rocketmq-dashboard:latest
启动容器
这里地址是我们上面对应的 nameserver 所在机器的 IP
docker run -p 8087:8080 --name rocketmq-console -d \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.148.129:9876" \
-t apacherocketmq/rocketmq-dashboard
最后搞完的截图