RocketMQ部署
x86架构部署
提示
后面补齐在x86机器部署RocketMQ
Arm架构部署
RocketMQ镜像构建
- 首先需要构建RocketMQ镜像,需要下载官方RocketMQ构建脚本。
git clone https://github.com/apache/rocketmq-docker.gitgit clone https://mirror.ghproxy.com/https://github.com/apache/rocketmq-docker.git- 进入到刚刚git clone的目录下【rocketmq-docker目录】,再切换到
image-build目录下,执行以下命令:
# RMQ-VERSION:RocketMQ版本号,例如4.9.2
# BASE-IMAGE:镜像基础镜像,例如alpine、ubuntu
sh build-image.sh RMQ-VERSION BASE-IMAGE
# 示例
sh build-image.sh 4.9.2 alpine# RMQ-VERSION:RocketMQ版本号,例如4.9.2
# BASE-IMAGE:镜像基础镜像,例如alpine、ubuntu
sh build-image.sh RMQ-VERSION BASE-IMAGE
# 示例
sh build-image.sh 4.9.2 ubuntu关于 RocketMQ 镜像构建有哪些版本可以构建,可以参考官方文档。
构建完成后,可以使用 docker ps 命令查看构建的镜像。
docker ps
REPOSITORY TAG IMAGE ID CREATED SIZE
apache/rocketmq 4.9.8 c3f8c664f735 3 weeks ago 560MBRocketMQ Dashboard 镜像构建
- 构建rocketmq-dashboard镜像,将 rocketmq-dashboard 源码使用
git clone到本地。
git clone https://github.com/apache/rocketmq-dashboard.gitgit clone https://github.com/apache/rocketmq-dashboard.git- 切换到
rocketmq-dashboard目录下执行mvn构建命令获取到rocketmq-dashboard-1.0.1-SNAPSHOT.jar,该文件在构建好的target目录下。
mvn clean package -Dmaven.test.skip=true- 将
rocketmq-dashboard-1.0.1-SNAPSHOT.jar拷贝到docker目录下,需要将Dockerfile的FROM基础镜像改为eclipse-temurin:8-jdk才能支持ARM架构的机器运行,最后执行构建命令。
docker build -t apache/rocketmq-dashboard:1.0.1 .Docker 部署 RocketMQ
部署 NameServer
- 以下是启动 RocketMQ NameServer 的 docker 命令。
docker run -p 9876:9876 --name rmq-nameserver \
-d apache/rocketmq:4.9.8 \
sh mqnamesrv部署 Broker
- 以下是启动 RocketMQ Broker 的 docker 命令。
docker run -p 10909:10909 -p 10911:10911 -p 10912:10912 --name rmq-broker \
--link rmq-nameserver:nameserver \
-e "NAMESRV_ADDR=nameserver:9876" \
-d apache/rocketmq:4.9.8 \
sh mqbroker部署 RocketMQ Dashboard
- 构建RocketMQ Dashboard镜像。
- 启动 RocketMQ Dashboard。
docker run -p 8080:8080 --name rocketmq-dashboard \
--link rmq-nameserver:nameserver \
-e "JAVA_OPTS=-Drocketmq.config.namesrvAddrs=nameserver:9876 -Drocketmq.config.isVIPChannel=false" \
-d apache/rocketmq-dashboard:1.0.1然后访问 http://IP地址:8080

Docker Compose 部署
目录结构说明
rocketmq
├── broker
│ ├── broker.yaml
│ ├── conf
│ ├── logs
│ └── store
├── dashboard
│ └── dashboard.yaml
└── nameserver
├── logs
└── nameserver.yaml目录结构详细说明:
broker:RocketMQ Broker 文件目录。broker.yaml:Docker Compose 配置文件,用于启动 RocketMQ Broker 容器。conf:broker配置文件目录。logs:broker日志目录。store:broker存储目录。
dashboard:RocketMQ Dashboard 文件目录。dashboard.yaml:Docker Compose 配置文件,用于启动 RocketMQ Dashboard 容器。
nameserver: RocketMQ NameServer 文件目录。logs:NameServer日志目录。nameserver.yaml:Docker Compose 配置文件,用于启动 RocketMQ NameServer 容器。
部署 NameServer
创建 nameserver 目录,并切换到 nameserver 目录下。
mkdir nameserver && cd nameserver在 nameserver 目录下创建 logs 目录。
mkdir logs给 nameserver 目录下的 logs 目录添加权限。
chmod -R 777 logs在 nameserver 目录下创建 nameserver.yaml 文件,内容如下:
services:
# nameserver
nameserver:
image: apache/rocketmq:4.9.8
container_name: rmq-nameserver
restart: unless-stopped
ports:
- "9876:9876"
environment:
TZ: "Asia/Shanghai"
JAVA_OPT: "-server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
volumes:
- ./logs:/home/rocketmq/logs
command: sh mqnamesrv
# rocketmq network
networks:
default:
driver: bridge
name: rmq-net启动 RocketMQ NameServer 容器。
docker-compose -f nameserver.yaml up -d启动成功后,可以通过 docker ps 命令查看 NameServer 容器是否启动成功。
部署 Broker
创建 broker 目录,并切换到 broker 目录下。
mkdir broker && cd broker在 broker 目录下创建 logs、conf、store 目录。
mkdir logs conf store给 broker 目录下的 logs、conf、store 目录添加权限。
chmod -R 777 logs conf store在 conf 目录下创建 broker.conf 文件,内容如下:
# 所属集群名称,如果节点较多可以配置多个
brokerClusterName = RocketMQ-Cluster
# broker名称,master和slave使用相同的名称,表明他们的主从关系
brokerName = broker
# 0表示 Master,大于 0 表示不同的 slave
brokerId = 0
# 表示几点做消息删除动作,默认是凌晨4点
deleteWhen = 04
# 在磁盘上保留消息的时长,单位是小时
fileReservedTime = 48
# 有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;同步和异步表示 Master 和 Slave 之间同步数据的机制;
brokerRole = ASYNC_MASTER
# 刷盘策略,取值为:ASYNC_FLUSH、SYNC_FLUSH、MEMMAP、MMAP 表示同步刷盘和异步刷盘;
# ASYNC_FLUSH:异步刷新磁盘。这是默认的设置,性能较好,但可能会有数据丢失的风险。
# SYNC_FLUSH:同步刷新磁盘。这种方式能够保证数据的可靠性,但性能会较差,因为每次写入都需要等待磁盘完成。
# MEMMAP:内存映射刷新磁盘。这种方式将消息缓存在内存中,定期同步到磁盘,性能较好且数据可靠性较高。
# MMAP:内存映射刷新磁盘。这与 MEMMAP 类似,也是将消息缓存在内存中,定期同步到磁盘,但实现方式略有不同。
flushDiskType = ASYNC_FLUSH
# 设置 broker 节点所在服务器的 ip 地址、物理 ip,不能用127.0.0.1、localhost、docker内网ip
brokerIP1 = 192.168.0.100给 broker 目录下的 broker.conf 文件添加权限。
chmod 644 broker.conf在 broker 目录下创建 broker.yaml 文件,内容如下:
services:
broker:
image: apache/rocketmq:4.9.8
container_name: rmq-broker
restart: unless-stopped
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
TZ: "Asia/Shanghai"
NAMESRV_ADDR: "rmq-nameserver:9876"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn512m"
volumes:
- ./logs:/home/rocketmq/logs
- ./store:/home/rocketmq/store
- ./conf/broker.conf:/opt/rocketmq-4.9.8/conf/broker.conf
command: sh mqbroker -c /opt/rocketmq-4.9.8/conf/broker.conf
external_links:
- rmq-nameserver
networks:
- rmq-net
# rocketmq network
networks:
rmq-net:
external: true启动 RocketMQ Broker 容器。
docker-compose -f broker.yaml up -d启动成功后,可以通过 docker ps 命令查看 RocketMQ Broker 容器是否启动成功。
部署 Dashboard
创建 dashboard 目录,并切换到 dashboard 目录下。
mkdir dashboard && cd dashboard在 dashboard 目录下创建 dashboard.yaml 文件,内容如下:
services:
console:
# image: apache/rocketmq-console-ng:1.0.0
image: apache/rocketmq-dashboard:1.0.1
container_name: rmq-dashboard
restart: unless-stopped
ports:
- 8080:8080
environment:
TZ: "Asia/Shanghai"
JAVA_OPTS: "-Drocketmq.config.namesrvAddrs=rmq-nameserver:9876 -Drocketmq.config.isVIPChannel=false"
external_links:
- rmq-nameserver
networks:
- rmq-net
# 设置使用的网络
networks:
rmq-net:
external: true启动 RocketMQ Dashboard 容器。
docker-compose -f dashboard.yaml up -d启动成功后,可以通过 docker ps 命令查看 RocketMQ Dashboard 容器是否启动成功。