集群架构图:
准备工作:
- 四台机器节点 (虚拟机四台机器,都安装好了rocketmq)
- 数据目录
- 配置文件
一共四台节点:
NODE1 192.168.3.50 ROLE : namesrv 1
NODE2 192.168.3.51 ROLE : namesrv 2
NODE3 192.168.3.52 ROLE : broker A master , broker B master
NODE4 192.168.3.53 ROLE : broker A slave , broker B slave
准备数据目录:
在NODE3下执行:
mkdir -p /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a/nsumequeue /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a/commitlog /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a/index /usr/local/rocketmq-all-4.4.0-bin-release/logs /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/nsumequeue /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/commitlog /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/index
NODE4下执行
mkdir -p /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s/nsumequeue /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s/commitlog /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s/index /usr/local/rocketmq-all-4.4.0-bin-release/logs /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/nsumequeue /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/commitlog /usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/index
修改数据配置文件:
rocketmq集群支持三种模式
2m-2s-async : 主从异步 (本文采用这种)
2m-2s-sync : 主从同步
2m-noslave: 仅master
2m-2s-async 目录下有四个文件
改那个都行,只要启动的时候指定对应的配置文件即可。
本文
broker-a broker-b 为AB broker master配置
-a-s,-b-s 为 AB broker slave 配置
注意几点:
- brokerClusterName 所属集群的名字
- brokerName master和slave名字相同 表示同一组
- brokerId master为0 slave依次增大
- namesrvAddr namesrv地址 多个地址用逗号隔开
- listenPort broker提供服务端口 同一台机器 不同broker 端口号相差>2 否则会报地址占用 (真鸡儿坑)
- brokerRole master看说明 slave用 SLAVE
修改NODE3下配置
broker-a.properties
#所属集群名字
brokerClusterName=MyAbroker
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.3.50:9876;192.168.3.51: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-all-4.4.0-bin-release/store/broker-a
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq-all-4.4.0-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq-all-4.4.0-bin-release/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
broker-b.properties
#所属集群名字
brokerClusterName=MyBbroker
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.3.50:9876;192.168.3.51:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10921
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq-all-4.4.0-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq-all-4.4.0-bin-release/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
NODE4
broker-a-s.properties
#所属集群名字
brokerClusterName=MyAbroker
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.3.50:9876;192.168.3.51: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-all-4.4.0-bin-release/store/broker-a-s
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq-all-4.4.0-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq-all-4.4.0-bin-release/store/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
broker-b-s.properties
#所属集群名字
brokerClusterName=MyBbroker
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.3.50:9876;192.168.3.51:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10921
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.4.0-bin-release/store/broker-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq-all-4.4.0-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq-all-4.4.0-bin-release/store/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
准备好后启动namesrv和broker
NODE1 NODE2 分别启动namesrv
nohup sh /usr/local/rocketmq-all-4.4.0-bin-release/bin/mqnamesrv > /usr/local/rocketmq-all-4.4.0-bin-release//logs/mqnamesrv.log 2>&1 &
NODE3 启动broker a 和 broker b
A
nohup sh /usr/local/rocketmq-all-4.4.0-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-async/broker-a.properties > /usr/local/rocketmq-all-4.4.0-bin-release/logs/broker-a.log 2>&1 &
B
nohup sh /usr/local/rocketmq-all-4.4.0-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-async/broker-b.properties > /usr/local/rocketmq-all-4.4.0-bin-release/logs/broker-b.log 2>&1 &
NODE4 启动 slave a 和 slave b
a-s
nohup sh /usr/local/rocketmq-all-4.4.0-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-async/broker-a-s.properties > /usr/local/rocketmq-all-4.4.0-bin-release/logs/broker-a-s.log 2>&1 &
b-s
nohup sh /usr/local/rocketmq-all-4.4.0-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-async/broker-b-s.properties > /usr/local/rocketmq-all-4.4.0-bin-release/logs/broker-b-s.log 2>&1 &
我们通过rocketmq-console来看一下
看到四台已经起来了。
如果觉得命令行不够直观可以通过rocketmq admin来观察