iT邦幫忙

0

5分钟搭建rocketmq 4.8集群

  • 分享至 

  • xImage
  •  

前言

在rocketmq之前的模式中,只有master/slave一种部署方式,一组 broker 中有一个 Master ,有零到多个 Slave,Slave 通过同步复制或异步复制的方式去同步 Master 数据。但这样的部署模式,有一定的缺陷。比如故障转移方面,如果主节点挂了,还需要人为手动进行重启或者切换,无法自动将一个从节点转换为主节点。所以这里就引入了 RocketMQ-on-DLedger Group。

RocketMQ-on-DLedger Group 是指一组相同名称的 Broker,至少需要 3 个节点,通过 Raft 自动选举出一个 Leader,其余节点 作为 Follower,并在 Leader 和 Follower 之间复制数据以保证高可用。
RocketMQ-on-DLedger Group 能自动容灾切换,并保证数据一致。
RocketMQ-on-DLedger Group 是可以水平扩展的,也即可以部署任意多个 RocketMQ-on-DLedger Group 同时对外提供服务。

具体原理看这:

https://blog.csdn.net/trntaken/article/details/105694384

1. 新集群部署

1.1 编写配置

每个 RocketMQ-on-DLedger Group 至少准备三台机器(本文假设为 3)。

ip 主机名 操作系统
10.16.100.60 mq1 CentOS 7
10.16.100.62 mq2 CentOS 7
10.16.100.63 mq3 CentOS 7

编写 3 个配置文件,建议参考 conf/dledger 目录下的配置文件样例。
关键配置介绍:

name 含义 举例
enableDLegerCommitLog 是否启动 DLedger true
dLegerGroup DLedger Raft Group的名字,建议和 brokerName 保持一致 RaftNode00
dLegerPeers DLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致 n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
dLegerSelfId 节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一 n0
sendMessageThreadPoolNums 发送线程个数,建议配置成 Cpu 核数 16

mq1的配置 conf/dledger/broker-n0.conf

brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=10.16.100.60:9876;10.16.100.62:9876;10.16.100.63:9876
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-10.16.100.60:40911;n1-10.16.100.62:40912;n2-10.16.100.63:40913
## must be unique
dLegerSelfId=n0
defaultTopicQueueNums=20
sendMessageThreadPoolNums=16
flushDiskType=ASYNC_FLUSH
transientStorePoolEnable=true
warmMapedFileEnable=true
slaveReadEnable=true
transferMsgByHeap=false
autoCreateTopicEnable=false 
brokerIP1=10.16.100.60

mq2的配置 conf/dledger/broker-n1.conf

brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30921
namesrvAddr=10.16.100.60:9876;10.16.100.62:9876;10.16.100.63:9876
storePathRootDir=/tmp/rmqstore/node01
storePathCommitLog=/tmp/rmqstore/node01/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-10.16.100.60:40911;n1-10.16.100.62:40912;n2-10.16.100.63:40913
## must be unique
dLegerSelfId=n1
defaultTopicQueueNums=20
sendMessageThreadPoolNums=16
flushDiskType=ASYNC_FLUSH
transientStorePoolEnable=true
warmMapedFileEnable=true
slaveReadEnable=true
transferMsgByHeap=false
autoCreateTopicEnable=false 
brokerIP2=10.16.100.62

mq3的配置 conf/dledger/broker-n2.conf

brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30931
namesrvAddr=10.16.100.60:9876;10.16.100.62:9876;10.16.100.63:9876
storePathRootDir=/tmp/rmqstore/node02
storePathCommitLog=/tmp/rmqstore/node02/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-10.16.100.60:40911;n1-10.16.100.62:40912;n2-10.16.100.63:40913
## must be unique
dLegerSelfId=n2
defaultTopicQueueNums=20
sendMessageThreadPoolNums=16
flushDiskType=ASYNC_FLUSH
transientStorePoolEnable=true
warmMapedFileEnable=true
slaveReadEnable=true
transferMsgByHeap=false
autoCreateTopicEnable=false 
brokerIP3=10.16.100.63

1.2 启动

1.2.1 启动nameserver

3台机器都执行

nohup sh mqnamesrv &

1.2.1 启动Broker

mq1

nohup sh bin/mqbroker -c conf/dledger/broker-n0.conf &

mq2

nohup sh bin/mqbroker -c conf/dledger/broker-n1.conf &

mq3

nohup sh bin/mqbroker -c conf/dledger/broker-n2.conf &

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言