目录
前言
一、总体架构
二、环境准备
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 | 角色 | 架构模式 |
---|---|---|---|
1 | 10.100.24.161 | nameserver、brokerserver | Master1、Slave2 |
2 | 10.100.24.163 | nameserver、brokerserver | Master2、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没有读取正确的配置文件,从而导致两次启动的时候,读取的配置文件相同也就是默认配置文件,进而导致报这个错误