RocketMQ双主双从集群搭建

双主双从同步双写集群搭建

下载rocketmq

下载地址:https://rocketmq.apache.org/download/

解压rocketmq

安装unzip解压命令
sudo yum install -y unzip

使用unzip解压命令

mkdir -p /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release
unzip -d /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release rocketmq-all-4.9.4-bin-release.zip

总体架构

image-20240617101914193

集群工作流程

  • 1.启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。
  • 2.Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。
  • 3.收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic。
  • 4.Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。
  • 5.Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息。

服务器环境

主机名 主机ip 角色(端口)
node1 192.168.200.121 rocketmq-ns1(9876)rocketmq-bs-m1(10911)
node2 192.168.200.122 rocketmq-ns2(9876)rocketmq-bs-m2(10911)rocketmq-bs-s1(11011)
node3 192.168.200.123 rocketmq-ns3(9876)rocketmq-bs-s2(10911)rocketmq-console(8080)
  • nameserver默认使用9876端口
  • master默认使用10911端口
  • slave默认使用11011端口

注意:如果防火墙没有关闭的话,那么防火墙就必须开放上述这些端口。

修改host配置

# nameserver
192.168.200.121 rocketmq-ns1
192.168.200.122 rocketmq-ns2
129.168.200.123 rocketmq-ns3

# broker
192.168.200.121 rocketmq-bs-m1
192.168.200.122 rocketmq-bs-m2 rocketmq-bs-s1
192.168.200.123 rocketmq-bs-s2

配置环境变量

export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.9.4-bin-release
export PATH=$PATH:$ROCKETMQ_HOME/bin

配置完成后,生效配置

source /etc/profile

创建消息存储路径

# node1
mkdir -p /usr/local/rocketmq/store/master1
mkdir -p /usr/local/rocketmq/store/master1/commitlog
mkdir -p /usr/local/rocketmq/store/master1/consumequeue
mkdir -p /usr/local/rocketmq/store/master1/index
# node2
mkdir -p /usr/local/rocketmq/store/master2
mkdir -p /usr/local/rocketmq/store/master2/commitlog
mkdir -p /usr/local/rocketmq/store/master2/consumequeue
mkdir -p /usr/local/rocketmq/store/master2/index

mkdir -p /usr/local/rocketmq/store/master1-slave1
mkdir -p /usr/local/rocketmq/store/master1-slave1/commitlog
mkdir -p /usr/local/rocketmq/store/master1-slave1/consumequeue
mkdir -p /usr/local/rocketmq/store/master1-slave1/index
# node3
mkdir -p /usr/local/rocketmq/store/master2-slave1
mkdir -p /usr/local/rocketmq/store/master2-slave1/commitlog
mkdir -p /usr/local/rocketmq/store/master2-slave1/consumequeue
mkdir -p /usr/local/rocketmq/store/master2-slave1/index

Broker配置文件

master1的配置

服务器:node1(192.168.200.121)

vim /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master1.properties

配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,多个之间用分号分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store/master1
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/master1/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/master1/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/master1/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/master1/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/master1/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
master1-slave1的配置

服务器:node2(192.168.200.122)

vim /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master1-slave1.properties

配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store/master1-slave1
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/master1-slave1/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/master1-slave1/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/master1-slave1/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/master1-slave1/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/master1-slave1/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
master2的配置

服务器:node2(192.168.200.122)

vim /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master2.properties

配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径(注意,如果在一台机器上启动多个broker,这个路径要区分开)
storePathRootDir=/usr/local/rocketmq/store/master2
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/master2/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/master2/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/master2/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/master2/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/master2/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
master2-slave1的配置

服务器:node3(192.168.200.123)

vim /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master2-slave1.properties

配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store/master2-slave1
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/master2-slave1/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/master2-slave1/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/master2-slave1/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/master2-slave1/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/master2-slave1/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

修改启动脚本

修改/bin/runbroker.sh/bin/runserver.sh脚本的JVM参数,参考配置如下:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

启动服务

启动NameServer集群

分别在三台机器上启动NameServer服务

nohup sh mqnamesrv &
启动Broker集群

node1上启动master1

nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master1.properties &

node2上启动master1-slave1和master2

nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master1-slave1.properties &

nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master2.properties &

node3上启动master2-slave1

nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/conf/2m-2s-sync/master2-slave1.properties &

集群监控平台搭建

下载并编译打包

下载地址:https://github.com/apache/rocketmq-externals

编译打包:

git clone https://github.com/apache/rocketmq-externals
## 切换到release-rocketmq-console-1.0.0分支
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true

上传jar包到node3服务器上并启动

nohup java -jar rocketmq-console-ng-1.0.0.jar &

启动成功后,我们就可以通过浏览器访问http://192.168.200.123:8080进入控制台界面了,如下图:

image-20240618094923982


__EOF__

作  者Jerry
出  处https://www.cnblogs.com/jerry0612/p/18258708
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   郭靖宇  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示