5分钟搭建rocketmq 4.8集群


前言

在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 &

<<:  SWOT和TOWS分析有什麽区别?

>>:  夜间模式真的对眼睛比较好吗? 详细整理(中)

[Day 25] LocalStorage 介绍

前言 HTML5 的 Web Storage 是一种可让网页将资料储存於本地端的技术,其作用如同 c...

JavaScript内建标准物件:日期

JavaScript 除了原始资料型别例如数字、字串、布林等等以外,所有的资料类型都是物件。日期与时...

【Day07】数据输入元件 - Slider

元件介绍 Slider 是一个滑动型输入器,允许使用者在数值区间内进行选择,选择的值可为连续值或是离...

D4- 如何透过 Google Apps Script 来整合 Google Form / Google Sheet 并自动寄出客制的 Email?

来到了第四天,我们可以进入比较复杂一点点的操作。但一样先讲结论,如果你很急着用,可以直接使用这份 A...

Day 29:Google Map 自订资讯视窗

本篇文章同步发表在 HKT 线上教室 部落格,线上影音教学课程已上架至 Udemy 和 Youtu...