rocketmq多主多从异步复制集群部署

RocketMQ集群搭建

ROcketMQ集群搭建有以下几种方案:

    「单Master模式」
    「多Master模式」
    「多Master多Slave模式-异步复制」
    「多Master多Slave模式-同步双写」

其中,

「单Master模式」风险较大,「一旦Broker重启或者宕机时,会导致整个服务不可用」。不建议线上环境使用,可以用于本地测试。

「多Master模式」,一个集群无Slave,全是Master,单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,「消息实时性会受到影响」。

「多Master-Slave异步复制模式」,即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时「Master宕机后,消费者仍然可以从Slave消费」,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样。Master宕机会丢失少量的信息。

「多Master-Slave同步双写模式」,数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高,「性能比异步复制模式略低」(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

我们采用多Master多Slave的异步复制模式来搭建RocketMQ集群。

架构图:

 集群各个角色参考配置如下:

1.配置RocketMQ-Master01(10.11.12.223)

首先创建消息存储路径,RocketMQ获取到消息默认为 /home,我们可以修改消息存储路径:

mkdir ./store
mkdir ./store/commitlog
mkdir ./store/consumequeue
mkdir ./store/index
cd store/
ll
total 0
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 commitlog
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 consumequeue
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 index

接下来编辑/conf/broker.conf

#所属集群名称
brokerClusterName=DefaultCluster
#broker名字,同一组的master-slave中,broker名字相同
brokerName=broker-a
#brokerId的ID,0 表示Master,>0 表示Slave
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
 
#nameServer集群地址,如果是多个,使用分号;分割
namesrvAddr=10.11.12.223:9876;10.11.12.224:9876;10.11.12.227:9876;10.11.128:9876;
brokerIP1=10.11.12.223
 
#存储路径
storePathRootDir=/data/rocketmq-all-4.9.4-bin-release/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq-all-4.9.4-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq-all-4.9.4-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq-all-4.9.4-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq-all-4.9.4-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/data/rocketmq-all-4.9.4-bin-release/store/abort

2.配置RocketMQ-Master02(主2 10.11.12.224)

首先创建消息存储路径,RocketMQ获取到消息后,broker会默认将消息进行持久化,持久化目录默认为 /home,我们可以修改消息存储路径:

mkdir ./store
mkdir ./store/commitlog
mkdir ./store/consumequeue
mkdir ./store/index
cd store/
ll
total 0
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 commitlog
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 consumequeue
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 index

编辑/conf/broker.conf

#所属集群名称
brokerClusterName=DefaultCluster
#broker名字,同一组的master-slave中,broker名字相同
brokerName=broker-b
#brokerId的ID,0 表示Master,>0 表示Slave
brokerId=0
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
 
#nameServer集群地址,如果是多个,使用分号;分割
namesrvAddr=10.11.12:9876;10.11.12:9876;10.11.12.227:9876;10.11.12.228:9876;
brokerIP1=10.11.12.224
 
#存储路径
storePathRootDir=/data/rocketmq-all-4.9.4-bin-release/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq-all-4.9.4-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq-all-4.9.4-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq-all-4.9.4-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq-all-4.9.4-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/data/rocketmq-all-4.9.4-bin-release/store/abort

3.配置RocketMQ-Slave01(从1 10.11.12.227)

首先创建消息存储路径,RocketMQ获取到消息后,broker会默认将消息进行持久化,持久化目录默认为 /home,我们可以修改消息存储路径:

mkdir ./store
mkdir ./store/commitlog
mkdir ./store/consumequeue
mkdir ./store/index
cd store/
ll
total 0
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 commitlog
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 consumequeue
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 index

编辑/conf/broker.conf

#所属集群名称
brokerClusterName=DefaultCluster
#broker名字,同一组的master-slave中,broker名字相同
brokerName=broker-a
#brokerId的ID,0 表示Master,>0 表示Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
 
#nameServer集群地址,如果是多个,使用分号;分割
namesrvAddr=10.11.12.223:9876;10.11.12.224:9876;10.11.12.227:9876;10.11.12.228:9876;
brokerIP1=10.11.12.227
 
#存储路径
storePathRootDir=/data/rocketmq-all-4.9.4-bin-release/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq-all-4.9.4-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq-all-4.9.4-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq-all-4.9.4-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq-all-4.9.4-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/data/rocketmq-all-4.9.4-bin-release/store/abort

4.配置RocketMQ-Slave02(从2 10.11.12.228)

首先创建消息存储路径,RocketMQ获取到消息后,broker会默认将消息进行持久化,持久化目录默认为 /home,我们可以修改消息存储路径:

mkdir ./store
mkdir ./store/commitlog
mkdir ./store/consumequeue
mkdir ./store/index
cd store/
ll
total 0
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 commitlog
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 consumequeue
drwxrwxr-x. 2 admin admin 6 Feb 18 09:50 index

编辑/conf/broker.conf

所属集群名称
brokerClusterName=DefaultCluster
#broker名字,同一组的master-slave中,broker名字相同
brokerName=broker-b
#brokerId的ID,0 表示Master,>0 表示Slave
brokerId=1
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
 
#nameServer集群地址,如果是多个,使用分号;分割
namesrvAddr=10.11.12.223:9876;10.11.12.224:9876;10.11.12.227:9876;10.11.12.228:9876;
brokerIP1=10.11.12.228
 
#存储路径
storePathRootDir=/data/rocketmq-all-4.9.4-bin-release/store
#commitLog 存储路径
storePathCommitLog=/data/rocketmq-all-4.9.4-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/rocketmq-all-4.9.4-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/data/rocketmq-all-4.9.4-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/data/rocketmq-all-4.9.4-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/data/rocketmq-all-4.9.4-bin-release/store/abort

5.启动NameServer集群

分区在4台机器上执行

#在223执行
nohup sh bin/mqnamesrv -n 10.11.12.223:9876 &
#在224执行
nohup sh bin/mqnamesrv -n 10.11.12.224:9876 &
#在227执行
nohup sh bin/mqnamesrv -n 10.11.12.227:9876 &
#在228执行
nohup sh bin/mqnamesrv -n 10.11.12.228:9876 &

tail -f ~/logs/rocketmqlogs/namesrv.log

6.启动Broker集群

分别在4台主机上执行

nohup sh bin/mqbroker -n '10.11.12.223:9876;110.11.12.224:9876;10.11.12.227:9876;10.11.12.228:9876;' -c conf/broker.conf autoCreateTopicEnable=true & 

tail -f ~/logs/rocketmqlogs/broker.log 
2022-08-21 22:54:11 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes
2022-08-21 22:54:11 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 0 bytes
2022-08-21 22:54:12 INFO brokerOutApi_thread_1 - register broker[0]to name server 10.11.12.223:9876 OK
2022-08-21 22:54:12 INFO brokerOutApi_thread_2 - register broker[0]to name server 10.11.12.224:9876 OK
2022-08-21 22:54:12 INFO brokerOutApi_thread_3 - register broker[0]to name server 10.11.12.227:9876 OK
2022-08-21 22:54:12 INFO brokerOutApi_thread_4 - register broker[0]to name server 10.11.12.228:9876 OK



jps
1761 BrokerStartup
1706 NamesrvStartup
1854 Jps

7.启动可视化控制台

docker run -d  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.11.12.223:9876;10.11.12.224:9876;10.11.12.227:9876;10.11.12.228:9876 
-Dcom.rocketmq.sendMessageWithVIPChannel=false" \
 --name rocketmq-console \
 -p 8080:8080 \
 -v /opt/software/rocketmq/rocketmq-console/logs:/root/logs \
 -t apacherocketmq/rocketmq-dashboard:latest

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

均衡教派.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值