rocketmq双主双从同步复制集群搭建

本文章主要介绍双主双从集群的搭建

双主双从集群架构图

双主双从集群架构图

双主双从集群工作流程

  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建立连接通道,开始消费消息。

注意:在4.5之前如果master挂了,需要手动启动一个master节点,slave不能主动切换成master

一、搭建准备工作

1.环境准备

在本地用VMWare创建2台虚拟机(或者4台),下面以2台为例
192.168.138.137 nameserver、brokerserver master1、slave2
192.168.138.138 nameserver、brokerserver master2、slave1

2.配置host文件,添加域名

vim /etc/hosts

#文件末尾添加如下信息
# nameserver
192.168.138.137 rocketmq-nameserver1
192.168.138.138 rocketmq-nameserver2
# broker
192.168.138.137 rocketmq-master1
192.168.138.137 rocketmq-slave2
192.168.138.138 rocketmq-master2
192.168.138.138 rocketmq-slave1

配置完成后,重启网卡

systemctl restart network

3.关闭防火墙

机器需要远程访问虚拟机的rocketmq服务和web服务,需要开放相应的端口,自己做测试可以直接关闭防火墙

# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的状态
firewall-cmd --state
# 禁止firewall开机启动
systemctl disable firewalld.service

为了安全,可以只开放特定端口,rocketmq默认使用了3个端口:

  • nameserver默认端口9876
  • master默认端口10911
  • slave默认端口11011

通过下面的命令开放特定端口

# 开放name server默认端口
firewall-cmd --remove-port=9876/tcp --permanent
# 开放master默认端口
firewall-cmd --remove-port=10911/tcp --permanent
# 开放slave默认端口 (当前集群模式可不开启)
firewall-cmd --remove-port=11011/tcp --permanent 
# 重启防火墙
firewall-cmd --reload

4.创建消息存储路径

# master路径
mkdir /app/apps/rocketmq-4.8.0/store
mkdir /app/apps/rocketmq-4.8.0/store/commitlog
mkdir /app/apps/rocketmq-4.8.0/store/consumequeue
mkdir /app/apps/rocketmq-4.8.0/store/index

#slave路径
mkdir /app/apps/rocketmq-4.8.0/store-s
mkdir /app/apps/rocketmq-4.8.0/store-s/commitlog
mkdir /app/apps/rocketmq-4.8.0/store-s/consumequeue
mkdir /app/apps/rocketmq-4.8.0/store-s/index

每一个机器上面都需要完成步骤2,3,4的工作。

二、修改broker配置文件

cd /app/apps/rocketmq-4.8.0/conf

rocketmq默认给我们提供了如下图所示的配置文件
在这里插入图片描述

然后进入其中的2m-2s-sync双主双从同步复制配置文件夹

cd 2m-2s-sync/

可以看到有如下4个配置文件
在这里插入图片描述
broker-a.properties 对应的是 master1的配置文件
broker-a-s.properties 对应的是 slave1的配置文件
broker-b.properties 对应的是 master2的配置文件
broker-b-s.properties 对应的是 slave2的配置文件

1.修改服务器 master1(192.168.138.137)的broker配置文件

vim /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-a.properties

修改为如下内容

#所属集群名字
brokerClusterName=rocketmq-cluster
# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2: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=/app/apps/rocketmq-4.8.0/store
#commitLog 存储路径
storePathCommitLog=/app/apps/rocketmq-4.8.0/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/apps/rocketmq-4.8.0/store/consumequeue
#消息索引存储路径
storePathIndex=/app/apps/rocketmq-4.8.0/store/index
#checkpoint 文件存储路径
storeCheckpoint=/app/apps/rocketmq-4.8.0/store/checkpoint
#abort 文件存储路径
abortFile=/app/apps/rocketmq-4.8.0/store/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

2.修改服务器 slave2(192.168.138.137)的broker配置文件

vim /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-b-s.properties

修改为如下内容

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2: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=/app/apps/rocketmq-4.8.0/store-s
#commitLog 存储路径
storePathCommitLog=/app/apps/rocketmq-4.8.0/store-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/apps/rocketmq-4.8.0/store-s/consumequeue
#消息索引存储路径
storePathIndex=/app/apps/rocketmq-4.8.0/store-s/index
#checkpoint 文件存储路径
storeCheckpoint=/app/apps/rocketmq-4.8.0/store-s/checkpoint
#abort 文件存储路径
abortFile=/app/apps/rocketmq-4.8.0/store-s/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

3.修改服务器 master2(192.168.138.138)的broker配置文件

vim /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-b.properties

配置内容除了下面的和master1不同,其他的都和master1相同

brokerName=broker-b

4.修改服务器 slave1(192.168.138.138)的broker配置文件

vim /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-a-s.properties

配置内容除了下面的和 salve2 不同,其他的都和 salve2 相同

brokerName=broker-a

注意:同一个机器上的master和slave的store文件不能相同

三、服务启动

在启动之前先确定配置文件的内存是否已经调整足够小,可以参考 rocketmq安装与启动修改配置。

1.启动NameServer集群

分别在192.168.138.137和192.168.138.138上启动NameServer

cd /app/apps/rocketmq-4.8.0/bin/
nohup /app/apps/rocketmq-4.8.0/bin/mqnamesrv > /app/apps/rocketmq-4.8.0/logs/namesrv.log & 

2.启动Broker集群

在192.168.138.137上启动master1和slave2

cd /app/apps/rocketmq-4.8.0/bin/
# master1
nohup ./mqbroker -c /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-a.properties > /app/apps/rocketmq-4.8.0/logs/broker-a.log & 
#slave2
nohup ./mqbroker -c /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-b-s.properties > /app/apps/rocketmq-4.8.0/logs/broker-b-s.log & 

在192.168.138.138上启动master2和slave1

cd /app/apps/rocketmq-4.8.0/bin/
# master2
nohup ./mqbroker -c /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-b.properties > /app/apps/rocketmq-4.8.0/logs/broker-b.log &
#slave1
nohup ./mqbroker -c /app/apps/rocketmq-4.8.0/conf/2m-2s-sync/broker-a-s.properties > /app/apps/rocketmq-4.8.0/logs/broker-a-s.log  & 

然后用jps查看机器上的进程,如果每个节点出现如下2个broker和1个nameServer进程说明启动成功
在这里插入图片描述

四、集群关闭

cd /app/apps/rocketmq-4.8.0/bin/

#1.关闭broker
sh bin/mqshutdown broker

# 2. 关闭namesrv
sh bin/mqshutdown namesrv
  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值