linux系统下RocketMQ的集群搭建

前提已配置java环境

# java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

部署的模式为:2m-2s-async 两主两从-异步同步
节点1:192.168.245.128【a master】【 b slave】
节点2:192.168.245.129【b master】【 a slave】

1.下载mq的bin包,并上传到两个不同的linux服务器上。
下载链接:http://rocketmq.apache.org/release_notes/release-notes-4.3.2/

2.解压后移动到/app/rocketmq目录下。

mv rocketmq-all-4.3.2-bin-release /app/rocketmq

3.创建需要的目录。

节点1【master】执行:

mkdir -p /app/rocketmq/store/broker-a /app/rocketmq/store/broker-a/nsumequeue /app/rocketmq/store/broker-a/commitlog /app/rocketmq/store/broker-a/index /app/rocketmq/logs /app/rocketmq/store/broker-b-s /app/rocketmq/store/broker-b-s/nsumequeue /app/rocketmq/store/broker-b-s/commitlog /app/rocketmq/store/broker-b-s/index
mkdir /app/rocketmq/store/checkpoint
mkdir /app/rocketmq/store/abort

节点2【slave】执行:

mkdir -p /app/rocketmq/store/broker-a-s /app/rocketmq/store/broker-a-s/nsumequeue /app/rocketmq/store/broker-a-s/commitlog /app/rocketmq/store/broker-a-s/index /app/rocketmq/logs /app/rocketmq/store/broker-b /app/rocketmq/store/broker-b/nsumequeue /app/rocketmq/store/broker-b/commitlog /app/rocketmq/store/broker-b/index
mkdir /app/rocketmq/store/checkpoint
mkdir /app/rocketmq/store/abort

4.启动nameserver服务器。

nameserver没有需要修改的配置文件,默认端口为9876,且nameserver服务器互相之间是不通信的。节点1,2分别执行如下命令:

nohup sh /app/rocketmq/bin/mqnamesrv >/app/rocketmq/logs/mqnamesrv.log 2>&1 &

jps显示NamesrvStartup已启动如下:

# jps -l
13361 sun.tools.jps.Jps
13349 org.apache.rocketmq.namesrv.NamesrvStartup

5.修改两个节点的配置文件,位于/app/rocketmq/conf/2m-2s-async目录,目的是为了启动broker服务。

节点1【a master】【b slave】如下:

vim broker-a.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.245.128:9876;192.168.245.129:9876
brokerIP1=192.168.245.128
#在发送消息时,自动创建服务器不存在的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/rocketmq/store/broker-a
#commitLog 存储路径
storePathCommitLog=/app/rocketmq/store/broker-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/broker-a/consumequeue
#消息索引存储路径
storePathIndex=/app/rocketmq/store/broker-a/index
#checkpoint 文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/app/rocketmq/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
vim broker-b-s.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
brokerName=broker-b
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-b,他的slave也叫broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.245.128:9876;192.168.245.129:9876
brokerIP1=192.168.245.128
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10920
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/app/rocketmq/store/broker-b-s
#commitLog 存储路径
storePathCommitLog=/app/rocketmq/store/broker-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/broker-b-s/consumequeue
#消息索引存储路径
storePathIndex=/app/rocketmq/store/broker-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/app/rocketmq/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

节点2【b master】【a slave】

vim broker-b.properties #基本和节点1的相同除了ip和brokerId
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.245.128:9876;192.168.245.129:9876
brokerIP1=192.168.245.129
#在发送消息时,自动创建服务器不存在的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/rocketmq/store/broker-b
#commitLog 存储路径
storePathCommitLog=/app/rocketmq/store/broker-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/broker-b/consumequeue
#消息索引存储路径
storePathIndex=/app/rocketmq/store/broker-b/index
#checkpoint 文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/app/rocketmq/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
vim broker-a-s.properties #基本和节点1的相同除了ip和brokerId
brokerClusterName=rocketmq-cluster
brokerName=broker-a
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.245.128:9876;192.168.245.129:9876
brokeIP1=192.168.245.129
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10920
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/app/rocketmq/store/broker-a-s
#commitLog 存储路径
storePathCommitLog=/app/rocketmq/store/broker-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/broker-a-s/consumequeue
#消息索引存储路径
storePathIndex=/app/rocketmq/store/broker-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/app/rocketmq/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 under the License.

6.启动broker服务。

启动时可能会出现内存不足的错误,如下,因为mq默认分配的很大:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/rocketmq/conf/2m-2s-async/hs_err_pid28713.log

调小内存,即可解决:

如果单台启动了多个broker,先关闭
# ./bin/mqshutdown broker
# vim bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

节点1,启动broker-a:

nohup sh /app/rocketmq/bin/mqbroker -c /app/rocketmq/conf/2m-2s-async/broker-a.properties > /app/rocketmq/logs/broker-a.log 2>&1 &

节点1,启动broker-b-s:

nohup sh /app/rocketmq/bin/mqbroker -c /app/rocketmq/conf/2m-2s-async/broker-b-s.properties > /app/rocketmq/logs/broker-b-s.log 2>&1 &

节点2,启动broker-b:

nohup sh /app/rocketmq/bin/mqbroker -c /app/rocketmq/conf/2m-2s-async/broker-b.properties > /app/rocketmq/logs/broker-b.log 2>&1 &

节点2,启动broker-a-s:

nohup sh /app/rocketmq/bin/mqbroker -c /app/rocketmq/conf/2m-2s-async/broker-a-s.properties > /app/rocketmq/logs/broker-a-s.log 2>&1 &

7.查看集群列表。

sh /app/rocketmq/bin/mqadmin clusterList -n 192.168.245.128:9876
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
rocketmq-cluster  broker-a                0     192.168.245.128:10911  V4_3_2                   0.00(0,0ms)         0.00(0,0ms)          0 454419.02 0.0526
rocketmq-cluster  broker-a                1     192.168.245.129:10920  V4_3_2                   0.00(0,0ms)         0.00(0,0ms)          0 454419.02 0.0721
rocketmq-cluster  broker-b                0     192.168.245.129:10911  V4_3_2                   0.00(0,0ms)         0.00(0,0ms)          0 454419.02 0.0721
rocketmq-cluster  broker-b                1     192.168.245.128:10920  V4_3_2                   0.00(0,0ms)         0.00(0,0ms)          0 454419.02 0.0526

总结:网上的有关文章很多,但还是自己亲手搭建一下,才能发现问题,更深刻的理解,最好是先了解了RMQ的架构,才能轻车熟路部署。

参考:https://blog.csdn.net/weixin_40533111/article/details/84451219

posted @ 2022-03-28 10:57  厶訫  阅读(318)  评论(0编辑  收藏  举报