1. 服务部署
1.1. 单节点
version: '3.8'
services:
namesrv:
image: apache/rocketmq:5.3.1
container_name: rmqnamesrv
ports:
- 9876:9876
networks:
- rocketmq
command: sh mqnamesrv
broker:
image: apache/rocketmq:5.3.1
container_name: rmqbroker
ports:
- 10909:10909
- 10911:10911
- 10912:10912
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
depends_on:
- namesrv
networks:
- rocketmq
command: sh mqbroker
proxy:
image: apache/rocketmq:5.3.1
container_name: rmqproxy
networks:
- rocketmq
depends_on:
- broker
- namesrv
ports:
- 8080:8080
- 8081:8081
restart: on-failure
environment:
- NAMESRV_ADDR=rmqnamesrv:9876
command: sh mqproxy
networks:
rocketmq:
driver: bridge
1.2. 单台多 master 集群
mkdir -p ./rocketmq/logs/nameserver-a
mkdir -p ./rocketmq/logs/nameserver-b
mkdir -p ./rocketmq/logs/broker-a
mkdir -p ./rocketmq/logs/broker-b
mkdir -p ./rocketmq/store/broker-a
mkdir -p ./rocketmq/store/broker-b
mkdir -p ./rocketmq/broker-a/
mkdir -p ./rocketmq/broker-b/
chmod 777 -R ./rocketmq/logs/*
chmod 777 -R ./rocketmq/store/*
修改第一个
nano ./rocketmq/broker-a/broker-a.conf
brokerClusterName = rocketmq-cluster
brokerName = broker-a
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1 = 192.168.0.106
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.0.106:9876;192.168.0.106:9877
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10911
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
修改第二个
nano ./rocketmq/broker-b/broker-b.conf
brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1 = 192.168.0.106
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.0.106:9876;192.168.0.106:9877
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10912
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
nano docker-compose.yaml
配置 docker-compose 文件
version: '3.5'
services:
rmqnamesrv-a:
image: apache/rocketmq:5.3.1
container_name: rmqnamesrv-a
ports:
- 9876:9876
volumes:
#- ./rocketmq/logs/nameserver-a:/home/rocketmq/logs
# - ./rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-a
rmqnamesrv-b:
image: apache/rocketmq:5.3.1
container_name: rmqnamesrv-b
ports:
- 9877:9876
volumes:
#- ./rocketmq/logs/nameserver-b:/home/rocketmq/logs
# - ./rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-b
rmqbroker-a:
image: apache/rocketmq:5.3.1
container_name: rmqbroker-a
ports:
- 10911:10911
volumes:
#- ./rocketmq/logs/broker-a/logs:/home/rocketmq/logs
#- ./rocketmq/store/broker-a/store:/home/rocketmq/store
- ./rocketmq/broker-a/broker-a.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-a:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-a
rmqbroker-b:
image: apache/rocketmq:5.3.1
container_name: rmqbroker-b
ports:
- 10912:10912
volumes:
#- ./rocketmq/logs/broker-b/logs:/home/rocketmq/logs
#- ./rocketmq/store/broker-b/store:/home/rocketmq/store
- ./rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-b:9877"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-b
rmqconsole:
image: apacherocketmq/rocketmq-dashboard
container_name: rmqconsole
ports:
- 8087:8080
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.accessKey=rocketmq2 -Drocketmq.config.secretKey=12345678
volumes:
- ./rocketmq/console-ng/data:/tmp/rocketmq-console/data
networks:
rmq:
aliases:
- rmqconsole
networks:
rmq:
name: rmq
driver: bridge
拉镜像
docker pull apache/rocketmq:5.3.1
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apacherocketmq/rocketmq-dashboard:latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apacherocketmq/rocketmq-dashboard:latest apacherocketmq/rocketmq-dashboard
1.2.1. 数据持久化
复制docker里面的文件
# docker cp rmqnamesrv-a:/home/rocketmq/logs ./rocketmq/logs/nameserver-a
# docker cp rmqnamesrv-b:/home/rocketmq/logs ./rocketmq/logs/nameserver-b
docker cp rmqbroker-a:/home/rocketmq/logs ./rocketmq/logs/broker-a
docker cp rmqbroker-a:/home/rocketmq/store ./rocketmq/store/broker-a
docker cp rmqbroker-b:/home/rocketmq/logs ./rocketmq/logs/broker-b
docker cp rmqbroker-b:/home/rocketmq/store ./rocketmq/store/broker-b
设置权限,否则会写入文件失败,造成启动失败。
chmod 777 -R ./rocketmq/logs/*
chmod 777 -R ./rocketmq/store/*
关闭相关docker进程
docker-compose down
修改docker-compose.yaml 取消注释,开启持久化配置
访问http://192.168.0.106:8087 可视化界面
1.3. 多台集群(同步/异步)
1.3.1. 第一台 (192.168.0.101 服务)
mkdir rmq_sync_clu
cd rmq_sync_clu/
# mkdir -p ./rocketmq/logs/rmqnamesrv-1
mkdir -p ./rocketmq/broker-1-m/conf
mkdir -p ./rocketmq/broker-1-m/logs
mkdir -p ./rocketmq/broker-1-m/store
mkdir -p ./rocketmq/broker-2-s/conf
mkdir -p ./rocketmq/broker-2-s/logs
mkdir -p ./rocketmq/broker-2-s/store
# chmod 777 -R ./rocketmq/logs/rmqnamesrv-1
chmod 777 -R ./rocketmq/broker-1-m/*
chmod 777 -R ./rocketmq/broker-2-s/*
修改主配置
nano ./rocketmq/broker-1-m/conf/broker.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称
brokerName=broker1
#brokerId master用0 slave用其他
brokerId=0
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
## 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.0.101:9876;192.168.0.106:9876
#主机ip
brokerIP1=192.168.0.101
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
#haService中使用 默认值为:listenPort + 1
#haListenPort=10912
#主要用于slave同步master listenPort - 2
#fastListenPort=10909
#是否能够自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
修改从配置
nano ./rocketmq/broker-2-s/conf/broker.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称
brokerName=broker2
#brokerId master用0 slave用其他
brokerId=1
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.101
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=11911
#haService中使用 默认值为:listenPort + 1
#haListenPort=11912
#主要用于slave同步master listenPort - 2
#fastListenPort=11909
#是否能够自动创建topic
autoCreateTopicEnable=true
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.0.101:9876;192.168.0.106:9876
编写 docker-compose 文件
nano docker-compose.yaml
version: "3"
services:
rmqnamesrv-1:
image: apache/rocketmq:5.3.1
container_name: rmqnamesrv-1
ports:
- 9876:9876
# volumes:
#- ./rocketmq/logs/rmqnamesrv-1:/home/rocketmq/logs
environment:
JAVA_OPT_EXT: "-Duser.home=/opt -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqnamesrv
networks:
- rmq
mqbroker-1-m:
image: apache/rocketmq:5.3.1
container_name: mqbroker-1-m
ports:
- 10911:10911
- 10909:10909
- 10912:10912
volumes:
- ./rocketmq/broker-1-m/conf/broker.conf:/home/rocketmq/conf/broker.conf
# - ./rocketmq/broker-1-m/logs:/home/rocketmq/logs
# - ./rocketmq/broker-1-m/store:/home/rocketmq/store
environment:
NAMESRV_ADDR: "rmqnamesrv-1:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv-1
networks:
- rmq
mqbroker-2-s:
image: apache/rocketmq:5.3.1
container_name: mqbroker-2-s
ports:
- 11911:11911
- 11909:11909
- 11912:11912
volumes:
- ./rocketmq/broker-2-s/conf/broker.conf:/home/rocketmq/conf/broker.conf
# - ./rocketmq/broker-2-s/logs:/home/rocketmq/logs
# - ./rocketmq/broker-2-s/store:/home/rocketmq/store
environment:
NAMESRV_ADDR: "rmqnamesrv-1:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv-1
networks:
- rmq
mqconsole:
image: apacherocketmq/rocketmq-dashboard
container_name: mqconsole
ports:
- 19876:8080
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
volumes:
- ./rocketmq/console-ng/data:/tmp/rocketmq-console/data
depends_on:
- rmqnamesrv-1
networks:
- rmq
networks:
rmq:
name: rmq
driver: bridge
运行
导出挂载数据
# 导出 rmqnamesrv-1 的日志
# docker cp rmqnamesrv-1:/home/rocketmq/logs/rocketmqlogs ./rocketmq/logs/rmqnamesrv-1
# 导出 mqbroker-1-m 的日志和存储数据
docker cp mqbroker-1-m:/home/rocketmq/logs ./rocketmq/broker-1-m/logs
docker cp mqbroker-1-m:/home/rocketmq/store ./rocketmq/broker-1-m/store
# 导出 mqbroker-2-s 的日志和存储数据
docker cp mqbroker-2-s:/home/rocketmq/logs ./rocketmq/broker-2-s/logs
docker cp mqbroker-2-s:/home/rocketmq/store ./rocketmq/broker-2-s/store
1.3.2. 第二台 (192.168.0.106 服务)
mkdir rmq_sync_clu
cd rmq_sync_clu/
mkdir -p ./rocketmq/logs/rmqnamesrv-2
mkdir -p ./rocketmq/broker-1-s/conf
mkdir -p ./rocketmq/broker-1-s/logs
mkdir -p ./rocketmq/broker-1-s/store
mkdir -p ./rocketmq/broker-2-m/conf
mkdir -p ./rocketmq/broker-2-m/logs
mkdir -p ./rocketmq/broker-2-m/store
chmod 777 -R ./rocketmq/logs/rmqnamesrv-2
chmod 777 -R ./rocketmq/broker-1-s/*
chmod 777 -R ./rocketmq/broker-2-m/*
修改主配置
nano ./rocketmq/broker-2-m/conf/broker.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称
brokerName=broker2
#brokerId master用0 slave用其他
brokerId=0
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SYNC_MASTER
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.106
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
#haService中使用 默认值为:listenPort + 1
#haListenPort=10912
#主要用于slave同步master listenPort - 2
#fastListenPort=10909
#是否能够自动创建topic
autoCreateTopicEnable=true
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.0.101:9876;192.168.0.106:9876
修改从配置
nano ./rocketmq/broker-1-s/conf/broker.conf
#集群名称
brokerClusterName=rocketmq-cluster
#broker名称
brokerName=broker1
#brokerId master用0 slave用其他
brokerId=1
#清理时机
deleteWhen=4
#文件保留时长 48小时
fileReservedTime=48
#broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
#刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#主机ip
brokerIP1=192.168.0.106
#对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=11911
#haService中使用 默认值为:listenPort + 1
#haListenPort=11912
#主要用于slave同步master listenPort - 2
#fastListenPort=11909
#是否能够自动创建topic
autoCreateTopicEnable=true
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.0.101:9876;192.168.0.106:9876
编写 docker-compose 文件
nano docker-compose.yaml
version: "3"
services:
rmqnamesrv-2:
image: apache/rocketmq:5.3.1
container_name: rmqnamesrv-2
ports:
- 9876:9876
# volumes:
#- ./rocketmq/logs/rmqnamesrv-2:/home/rocketmq/logs
environment:
JAVA_OPT_EXT: "-Duser.home=/opt -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqnamesrv
networks:
- rmq
mqbroker-2-m:
image: apache/rocketmq:5.3.1
container_name: mqbroker-2-m
ports:
- 10911:10911
- 10909:10909
- 10912:10912
volumes:
- ./rocketmq/broker-2-m/conf/broker.conf:/home/rocketmq/conf/broker.conf
# - ./rocketmq/broker-2-m/logs:/home/rocketmq/logs
# - ./rocketmq/broker-2-m/store:/home/rocketmq/store
environment:
NAMESRV_ADDR: "rmqnamesrv-2:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv-2
networks:
- rmq
mqbroker-1-s:
image: apache/rocketmq:5.3.1
container_name: mqbroker-1-s
ports:
- 11911:11911
- 11909:11909
- 11912:11912
volumes:
- ./rocketmq/broker-1-s/conf/broker.conf:/home/rocketmq/conf/broker.conf
# - ./rocketmq/broker-1-s/logs:/home/rocketmq/logs
# - ./rocketmq/broker-1-s/store:/home/rocketmq/store
environment:
NAMESRV_ADDR: "rmqnamesrv-2:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf
depends_on:
- rmqnamesrv-2
networks:
- rmq
networks:
rmq:
name: rmq
driver: bridge
运行
拷贝数据
# docker cp rmqnamesrv-2:/home/rocketmq/logs ./rocketmq/logs/rmqnamesrv-2
docker cp mqbroker-2-m:/home/rocketmq/logs ./rocketmq/broker-2-m/logs
docker cp mqbroker-2-m:/home/rocketmq/store ./rocketmq/broker-2-m/store
docker cp mqbroker-1-s:/home/rocketmq/logs ./rocketmq/broker-1-s/logs
docker cp mqbroker-1-s:/home/rocketmq/store ./rocketmq/broker-1-s/store
1.3.3. 检查与数据持久化
分别在docker-compose.yml文件所在目录运行docker-compose.yml
docker-compose up -d
docker-compose logs | grep error
访问 192.168.0.101:19876
成功展示
最后 , 我们解开 docker-compose
的注释实现数据持久化