Docker RocketMQ 安装

作者: gavin 分类: Docker 发布时间: 2024-09-24 16:48

1 拉取最新镜像

docker pull apache/rocketmq:5.3.0

2 创建挂载目录

# nameserver 挂载目录 分别是 日志、启动脚本
mkdir -p /root/app/rocketmq/nameserver/logs
mkdir -p /root/app/rocketmq/nameserver/bin

# broker 挂载目录 分别是 日志,数据,配置文件,启动脚本
mkdir -p /root/app/rocketmq/broker/logs
mkdir -p /root/app/rocketmq/broker/store
mkdir -p /root/app/rocketmq/broker/conf
mkdir -p /root/app/rocketmq/broker/bin

# 对rocketmq目录下所有目录、文件进行授权,一定要授权,不然挂载日志 数据的时候会报错
# 一定要授权
# 一定要授权
chmod -R 777 /root/app/rocketmq/

3 创建网络

docker network create rocketmq


Nameserver


1、简单启动一下,目的是为了将启动脚本复制出来

docker run -d \
--privileged=true \
--name rmqnamesrv \
apache/rocketmq:5.3.0 sh mqnamesrv
  1. 将启动脚本复制回到宿主机中并进行修改

目的:原始脚本申请的堆内存过大,需要控制一下,JVM内存参数手动传入

docker cp \
rmqnamesrv:/home/rocketmq/rocketmq-5.3.0/bin/runserver.sh \
/root/app/rocketmq/nameserver/bin/runserver.sh
# 在runserver.sh脚本中找到 calculate_heap_sizes 并注释掉就可以了
# calculate_heap_sizes
#脚本修完完毕,简单启动的容器就可以不要了
docker stop rmqnamesrv
docker rm rmqnamesrv

3、正式启动RocketMQ NameServer

docker run -d \
--name rmqnamesrv \
--network rocketmq \
--restart=always \
-p 9876:9876  \
-e "MAX_HEAP_SIZE=512M" \
-e "HEAP_NEWSIZE=128M" \
-v /root/app/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.3.0/bin/runserver.sh \
-v /root/app/rocketmq/nameserver/logs:/home/rocketmq/logs/rocketmqlogs \
apache/rocketmq:5.3.0 sh mqnamesrv

Broker

1、简单启动,将启动脚本复制出来

docker run -d \
--name rmqbroker \
--privileged=true \
apache/rocketmq:5.3.0 \
sh mqbroker
  1. 将启动脚本复制回到宿主机中并进行修改

目的:原始脚本申请的堆内存过大,需要控制一下,JVM内存参数手动传入

docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.0/bin/runbroker.sh \
/root/app/rocketmq/broker/bin/runbroker.sh
# 在runbroker.sh脚本中找到 calculate_heap_sizes 并注释掉就可以了
# calculate_heap_sizes
#脚本修完完毕,简单启动的容器就可以不要了
docker stop rmqbroker
docker rm rmqbroker

/root/app/rocketmq/broker/conf下创建配置文件 broker.conf

# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = DefaultCluster
#broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker-a
#0表示Master,大于0表示不同的slave
brokerId = 0
#表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
#在磁盘上保留消息的时长,单位是小时
fileReservedTime = 72
#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示Master和Slave之间同步数据的机制;
brokerRole = ASYNC_MASTER
#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后才返回成功
状态,ASYNC_FLUSH不需要;
flushDiskType = ASYNC_FLUSH
# 设置broker节点所在服务器(宿主机)的ip地址、物理ip,不能用127.0.0.1、localhost、docker内网ip
brokerIP1 = 宿主机地址
  1. 配置密码
  • 将acl配置文件复制回宿主机进行修改
docker cp rmqbroker:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml \
/root/app/rocketmq/broker/conf/plain_acl.yml

5、正式启动broker

docker run -d \
--name rmqbroker \
--network rocketmq \
--restart=always \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 18080:8080 -p 18081:8081 \
-e "NAMESRV_ADDR=宿主机地址:9876" \
-e "MAX_HEAP_SIZE=2048M" \
-e "HEAP_NEWSIZE=512M" \
-v /root/app/rocketmq/broker/logs:/home/rocketmq/logs \
-v /root/app/rocketmq/broker/store:/home/rocketmq/store \
# 密码配置
-v /root/app/rocketmq/broker/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.3.0/conf/plain_acl.yml \
-v /root/app/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-5.3.0/conf/broker.conf \
-v /root/app/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.3.0/bin/runbroker.sh \
apache/rocketmq:5.3.0 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf

安装 管理面板 dashboard

拉取镜像

docker pull apacherocketmq/rocketmq-dashboard:latest
  • 配置dashboard 连接 带密码的broker

简单启动一下容器,将容器中根目录的rocketmq-dashboard.jar复制出来

docker cp rocketmq-dashboard:/rocketmq-dashboard.jar /root/app/rocketmq/dashboard/rocketmq-dashboard.jar


解压缩rocketmq-dashboard.jar,编辑其中的application.properties,改好后将该配置文件重新放回jar中替换旧配置。

#需要配置的信息
rocketmq.config.accessKey=管理员名称
rocketmq.config.secretKey=管理员密码


启动容器

docker run -d \
--name rocketmq-dashboard \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=宿主机地址:9876" \
-v /root/app/rocketmq/dashboard/rocketmq-dashboard.jar:/rocketmq-dashboard.jar \
-p 8888:8080 \
apacherocketmq/rocketmq-dashboard:latest

参考:https://www.yuque.com/woruochengfeng-mm5ow/bg71qs/yx6d87a7zlmri0cq