Centos安装RocketMQ之双主双从模式(同步双写方式)

发布时间:2024年01月13日

目录

前言

一、总体架构

二、环境准备

1、文件准备

2、服务器换环境

3、防火墙配置

4、创建消息存储路径

?三、配置文件修改

1、master1配置修改

2、slave2配置修改

3、master2配置修改

4、slave1配置修改

?四、启动脚本修改

?五、启动服务

1、启动NameServe集群

?编辑

2、启动Broker集群

?2.1 在 161上启动master1和slave2

?2.2 在 163上启动master2和slave1

2.3 注意

2.4 问题

2.4.1? Lock failed,MQ already started?


前言

RocketMQ单机版模式,这种模式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试,单机版环境搭建可以参考文档

一、总体架构

二、环境准备

1、文件准备

把对应的安装包上传到服务器中,并且进行解压

2、服务器换环境

序号IP角色架构模式
110.100.24.161nameserver、brokerserverMaster1、Slave2
210.100.24.163nameserver、brokerserverMaster2、Slave1

3、防火墙配置

宿主机需要远程访问虚拟机的rocketmq服务和web服务,需要开放相关的端口号,简单粗暴的方式是直接关闭防火墙

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

systemctl disable firewalld.service

或者为了安全,只开放特定的端口号,RocketMQ默认使用3个端口:9876 、10911 、11011 。如果防火墙没有关闭的话,那么防火墙就必须开放这些端口:

  • 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、创建消息存储路径

mkdir /usr/local/rocketMq/store
mkdir /usr/local/rocketMq/store/commitlog
mkdir /usr/local/rocketMq/store/consumequeue
mkdir /usr/local/rocketMq/store/index

同一系统下如果有要创建两个broker,则对应的store路径要不一样

mkdir /usr/local/rocketMq/store_s
mkdir /usr/local/rocketMq/store_s/commitlog
mkdir /usr/local/rocketMq/store_s/consumequeue
mkdir /usr/local/rocketMq/store_s/index

?

?三、配置文件修改

1、master1配置修改

IP:10.100.24.161

?vi broker-a.properties

?

如果直接在ssh中用vi编辑不直观,可以借助文本编辑工具

修改配置如下:

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

IP:10.100.24.161

?vi broker-b-s.properties

修改配置如下:

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

IP:10.100.24.163

?vi broker-b.properties

修改配置如下:

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

4、slave1配置修改

IP:10.100.24.163

?vi broker-a-s.properties

修改配置如下:

?brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=10.100.24.161:9876;10.100.24.163: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_s
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMq/store_s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMq/store_s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketMq/store_s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMq/store_s/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketMq/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
?

?四、启动脚本修改

如果是非服务器部署即内存没有那么大,则需要修改RocketMQ默认的虚拟机,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小,或者因为系统需求需要调高对应配置。

# 编辑runbroker.sh和runserver.sh修改默认JVM大小

vi runbroker.sh

?vi runserver.sh

?五、启动服务

1、启动NameServe集群

? ?分别在161,163中启动NameServe

nohup sh bin/mqnamesrv &

2、启动Broker集群

?2.1 在 161上启动master1和slave2

master1:

nohup sh bin/mqbroker ?-c conf/2m-2s-sync/broker-a.properties ? &

?slave2:

nohup sh bin/mqbroker ?-c conf/2m-2s-sync/broker-b-s.properties ? &

?

?2.2 在 163上启动master2和slave1

master2:

nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties ??&

?slave1:

?nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties ??&

?

2.3 注意

在启动broker 的时候,使用的命令中 -c 与?nohup sh bin/mqbroker中间只能有一个空格,不然broker启动的时候就不会读取对应的配置文件

2.4 问题
2.4.1? Lock failed,MQ already started?

这个问题就是因为一台服务器,同时部署两个broker节点,并且两个节点的消息存储路径相同导致的,所以消息存储路径创建了两个一个是store,一个是store_s。

但是本人踩的坑就是在注意当中提到的问题,虽然我创建了两个路径并也配置对了,但是在启动broker的时候 -c 前边有两个空格,导致启动的时候broker没有读取正确的配置文件,从而导致两次启动的时候,读取的配置文件相同也就是默认配置文件,进而导致报这个错误

文章来源:https://blog.csdn.net/lcgskycby/article/details/135443851
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。