部署架构

Docker部署RocketMQ5.2.0集群_cluster

说明

(1)Producer:生产者

(2)Consumer:消费者

(3)NameServer:RockerMQ的注册中心,多个实例组成集群,但相互独立,没有信息交换。每个Broker都向所有NameServer实例注册。

(4)Broker:负责存储消息、转发消息。

部署模式

RocketMQ作为消息中间件,其主要功能为消息的Publish/Subscribe。而Broker担任的消息转发和存储功能,其部署方式有很多种:

模式优点缺点说明
单Master配置简单不可靠,该机器重启或宕机,将导致整个服务不可用
多Master配置简单,性能最高可能会有少量消息丢失,单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
异步多Master多Slave性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预Master宕机或磁盘损坏时会有少量消息丢失每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级
同步多Master多Slave服务可用性与数据可用性非常高性能比异步集群略低,当前版本主宕备不能自动切换为主每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功

部署环境

共三台机器,每台上分别布有一台主从。

主机IP角色备注
192.168.5.152nameserver、broker-a-master、broker-b-slaveprod-MQ-01
192.168.3.20nameserver、broker-b-master、broker-c-slaveprod-MQ-02
192.168.5.207nameserver、broker-c-master、broker-a-slaveprod-MQ-03

部署流程

第一台 prod-MQ-01

上面部署四个容器服务,分别是:nameserver、broker-a-master、broker-b-slave和rocketmq-console。

部署 rmqnamesrv

创建目录:

mkdir -p /app/rocketmq/rmqnamesrv/logs
  • 1.

创建mqnamesrv服务启动脚本:

## cat /app/rocketmq/rmqnamesrv/start-rmqnamesrv.sh
docker run -d --name rmqnamesrv \
 -v /app/rocketmq/rmqnamesrv/logs:/home/rocketmq/logs \
 -p 9876:9876 \
 --restart=always \
 apache/rocketmq:5.2.0 sh mqnamesrv -n 192.168.5.152:9876
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
部署 broker-a

创建目录:

mkdir -p /app/rocketmq/broker-a/{consumequeue,commitlog,store,index,checkpoint,abort}
  • 1.

创建broker-a服务启动脚本:

## cat /app/rocketmq/broker-a/start-broker-a.sh
docker run -d --name broker-a        \
 -v /app/rocketmq/broker-a/consumequeue/:/home/rocketmq/data/rocketmq/store/consumequeue/ \
 -v /app/rocketmq/broker-a/commitlog/:/home/rocketmq/data/rocketmq/store/broker-a/commitlog/   \
 -v /app/rocketmq/conf/:/home/rocketmq/rocketmq-5.2.0/conf/     \
 -v /app/rocketmq/broker-a/store/:/home/rocketmq/data/rocketmq/store/broker-a/   \
 -v /app/rocketmq/broker-a/index/:/home/rocketmq/data/rocketmq/store/index/   \
 -v /app/rocketmq/broker-a/checkpoint/:/home/rocketmq/data/rocketmq/store/checkpoint/   \
 -v /app/rocketmq/broker-a/abort/:/home/rocketmq/data/rocketmq/store/abort/   \
 -p 10911:10911    \
 -p 10912:10912    \
 --restart=always  \
 --privileged=true \
 apache/rocketmq:5.2.0 sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/3m-3s-sync/broker-a.properties
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

注意conf文件在本文档同级目录下存放。

部署 broker-b-s

创建目录:

mkdir -p /app/rocketmq/broker-b-s/{commitlog,store}
  • 1.

创建broker-b-s服务启动脚本:

## cat /app/rocketmq/broker-b-s/start-broker-b-s.sh
docker run -d --name broker-b-s        \
 -v /app/rocketmq/broker-b-s/commitlog/:/home/rocketmq/data/rocketmq/store/broker-b-s/commitlog/   \
 -v /app/rocketmq/conf/:/home/rocketmq/rocketmq-5.2.0/conf/     \
 -v /app/rocketmq/broker-b-s/store/:/home/rocketmq/data/rocketmq/store/broker-b-s/   \
 -p 10900:10900    \
 --restart=always  \
 --privileged=true \
 apache/rocketmq:5.2.0 sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/3m-3s-sync/broker-b-s.properties
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

注意conf文件在本文档同级目录下存放。

部署 Dashboard

创建目录:

mkdir -p /app/rocketmq/dashboard
  • 1.

创建 dashboard服务启动脚本:

## cat /app/rocketmq/dashboard/start-dashboard.sh
docker run -d \
-p 8080:8080 \
--name rocketmq-console-ng \
--restart=always \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.5.152:9876;192.168.3.20:9876;192.168.5.207:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
styletang/rocketmq-console-ng
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

第二台 prod-MQ-02

上面部署四个容器服务,分别是:nameserver、broker-b-master、broker-c-slave。

部署 rmqnamesrv

创建目录:

mkdir -p /app/rocketmq/rmqnamesrv/logs
  • 1.

创建mqnamesrv服务启动脚本:

## cat /app/rocketmq/rmqnamesrv/start-rmqnamesrv.sh
docker run -d --name rmqnamesrv \
 -v /app/rocketmq/rmqnamesrv/logs:/home/rocketmq/logs \
 -p 9876:9876 \
 --restart=always \
 apache/rocketmq:5.2.0 sh mqnamesrv -n 192.168.3.20:9876
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
部署 broker-b

创建目录:

mkdir -p /app/rocketmq/broker-b/{consumequeue,commitlog,store,index,checkpoint,abort}
  • 1.

创建broker-b服务启动脚本:

## cat /app/rocketmq/broker-b/start-broker-b.sh
docker run -d --name broker-b        \
 -v /app/rocketmq/broker-b/consumequeue/:/home/rocketmq/data/rocketmq/store/consumequeue/ \
 -v /app/rocketmq/broker-b/commitlog/:/home/rocketmq/data/rocketmq/store/broker-b/commitlog/   \
 -v /app/rocketmq/conf/:/home/rocketmq/rocketmq-5.2.0/conf/     \
 -v /app/rocketmq/broker-b/store/:/home/rocketmq/data/rocketmq/store/broker-b/   \
 -v /app/rocketmq/broker-b/index/:/home/rocketmq/data/rocketmq/store/index/   \
 -v /app/rocketmq/broker-b/checkpoint/:/home/rocketmq/data/rocketmq/store/checkpoint/   \
 -v /app/rocketmq/broker-b/abort/:/home/rocketmq/data/rocketmq/store/abort/   \
 -p 10911:10911    \
 -p 10912:10912    \
 --restart=always  \
 --privileged=true \
 apache/rocketmq:5.2.0 sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/3m-3s-sync/broker-b.properties
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

注意conf文件在本文档同级目录下存放。

部署 broker-c-s

创建目录:

mkdir -p /app/rocketmq/broker-c-s/{commitlog,store}
  • 1.

创建broker-c-s服务启动脚本:

## cat /app/rocketmq/broker-c-s/start-broker-c-s.sh
docker run -d --name broker-c-s        \
 -v /app/rocketmq/broker-c-s/commitlog/:/home/rocketmq/data/rocketmq/store/broker-c-s/commitlog/   \
 -v /app/rocketmq/conf/:/home/rocketmq/rocketmq-5.2.0/conf/     \
 -v /app/rocketmq/broker-c-s/store/:/home/rocketmq/data/rocketmq/store/broker-c-s/   \
 -p 10900:10900    \
 --restart=always  \
 --privileged=true \
 apache/rocketmq:5.2.0 sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/3m-3s-sync/broker-c-s.properties
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

注意conf文件在本文档同级目录下存放。

第三台 prod-MQ-03

上面部署四个容器服务,分别是:nameserver、broker-c-master、broker-a-slave。

部署 rmqnamesrv

创建目录:

mkdir -p /app/rocketmq/rmqnamesrv/logs
  • 1.

创建mqnamesrv服务启动脚本:

## cat /app/rocketmq/rmqnamesrv/start-rmqnamesrv.sh
docker run -d --name rmqnamesrv \
 -v /app/rocketmq/rmqnamesrv/logs:/home/rocketmq/logs \
 -p 9876:9876 \
 --restart=always \
 apache/rocketmq:5.2.0 sh mqnamesrv -n 192.168.5.207:9876
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
部署 broker-c

创建目录:

mkdir -p /app/rocketmq/broker-c/{consumequeue,commitlog,store,index,checkpoint,abort}
  • 1.

创建broker-c服务启动脚本:

## cat /app/rocketmq/broker-c/start-broker-c.sh
docker run -d --name broker-c      \
 -v /app/rocketmq/broker-c/consumequeue/:/home/rocketmq/data/rocketmq/store/consumequeue/ \
 -v /app/rocketmq/broker-c/commitlog/:/home/rocketmq/data/rocketmq/store/broker-c/commitlog/   \
 -v /app/rocketmq/conf/:/home/rocketmq/rocketmq-5.2.0/conf/     \
 -v /app/rocketmq/broker-c/store/:/home/rocketmq/data/rocketmq/store/broker-c/   \
 -v /app/rocketmq/broker-c/index/:/home/rocketmq/data/rocketmq/store/index/   \
 -v /app/rocketmq/broker-c/checkpoint/:/home/rocketmq/data/rocketmq/store/checkpoint/   \
 -v /app/rocketmq/broker-c/abort/:/home/rocketmq/data/rocketmq/store/abort/   \
 -p 10911:10911    \
 -p 10912:10912    \
 --restart=always  \
 --privileged=true \
 apache/rocketmq:5.2.0 sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/3m-3s-sync/broker-c.properties
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

注意conf文件在本文档同级目录下存放。

部署 broker-a-s

创建目录:

mkdir -p /app/rocketmq/broker-a-s/{commitlog,store}
  • 1.

创建broker-a-s服务启动脚本:

## cat /app/rocketmq/broker-a-s/start-broker-a-s.sh
docker run -d --name broker-a-s     \
 -v /app/rocketmq/broker-a-s/commitlog/:/home/rocketmq/data/rocketmq/store/broker-a-s/commitlog/   \
 -v /app/rocketmq/conf/:/home/rocketmq/rocketmq-5.2.0/conf/     \
 -v /app/rocketmq/broker-a-s/store/:/home/rocketmq/data/rocketmq/store/broker-a-s/   \
 -p 10900:10900    \
 --restart=always  \
 --privileged=true \
 apache/rocketmq:5.2.0 sh mqbroker -c /home/rocketmq/rocketmq-5.2.0/conf/3m-3s-sync/broker-a-s.properties
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

注意conf文件在本文档同级目录下存放。

启动服务

首先切到对应的服务目录,执行对应服务shell脚本即可。

## 启动看板管理台
sh start-dashboard.sh
## 启动主本a
sh start-broker-a.sh
## 启动副本b
sh start-broker-b-s.sh
## 启动主本b
sh start-broker-b.sh
## 启动副本c
sh start-broker-c-s.sh
## 启动主本c
sh start-broker-c.sh
## 启动副本a
sh start-broker-a-s.sh
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

参考文档