部署架构
说明:
(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.152 | nameserver、broker-a-master、broker-b-slave | prod-MQ-01 |
192.168.3.20 | nameserver、broker-b-master、broker-c-slave | prod-MQ-02 |
192.168.5.207 | nameserver、broker-c-master、broker-a-slave | prod-MQ-03 |
部署流程
第一台 prod-MQ-01
上面部署四个容器服务,分别是:nameserver、broker-a-master、broker-b-slave和rocketmq-console。
部署 rmqnamesrv
创建目录:
mkdir -p /app/rocketmq/rmqnamesrv/logs
创建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
部署 broker-a
创建目录:
mkdir -p /app/rocketmq/broker-a/{consumequeue,commitlog,store,index,checkpoint,abort}
创建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
注意:conf
文件在本文档同级目录下存放。
部署 broker-b-s
创建目录:
mkdir -p /app/rocketmq/broker-b-s/{commitlog,store}
创建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
注意:conf
文件在本文档同级目录下存放。
部署 Dashboard
创建目录:
mkdir -p /app/rocketmq/dashboard
创建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
第二台 prod-MQ-02
上面部署四个容器服务,分别是:nameserver、broker-b-master、broker-c-slave。
部署 rmqnamesrv
创建目录:
mkdir -p /app/rocketmq/rmqnamesrv/logs
创建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
部署 broker-b
创建目录:
mkdir -p /app/rocketmq/broker-b/{consumequeue,commitlog,store,index,checkpoint,abort}
创建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
注意:conf
文件在本文档同级目录下存放。
部署 broker-c-s
创建目录:
mkdir -p /app/rocketmq/broker-c-s/{commitlog,store}
创建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
注意:conf
文件在本文档同级目录下存放。
第三台 prod-MQ-03
上面部署四个容器服务,分别是:nameserver、broker-c-master、broker-a-slave。
部署 rmqnamesrv
创建目录:
mkdir -p /app/rocketmq/rmqnamesrv/logs
创建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
部署 broker-c
创建目录:
mkdir -p /app/rocketmq/broker-c/{consumequeue,commitlog,store,index,checkpoint,abort}
创建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
注意:conf
文件在本文档同级目录下存放。
部署 broker-a-s
创建目录:
mkdir -p /app/rocketmq/broker-a-s/{commitlog,store}
创建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
注意: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