- 系统信息与准备步骤
Linux:centos7
RocketMQ版本:4.9.1(2021.10.14最新版本)
RocketMQ下载地址:
https://archive.apache.org/dist/rocketmq/4.9.1/rocketmq-all-4.9.1-bin-release.zip
JDK版本:openJDK1.8(JDK的系统变量等配置都配置好)
RocketMQ可视化插件下载:由于本人在git里没有rocketmq-console文件夹,从网盘里下载:
百度网盘链接:https://pan.baidu.com/s/1sMO6W-562IFJF1uUBQFXYg
提取码:fuzy
Nginx:1.20.1
下载地址页面:http://nginx.org/en/download.html
Linux压缩包:http://nginx.org/download/nginx-1.20.1.tar.gz
远程Linux工具:
命令:Xshell7
可视化:WinSCP
- 安装步骤
2.1 RocketMQ
(JDK一定要配置好,否则RocketMQ无法启动)
进入RocketMQ的bin目录,会看到配置文件有.cmd和.sh两种,无需担心RocketMQ因操作系统不同而下载多个压缩包。
2.1.1安装
将下载好的rocketmq上传到Linux系统并解压,我选择的位置时/home/rocketmq目录。

2.1.2 配置环境变量
配置rocketmq环境变量。修改etc目录的profile文件,在最下面添加rocketmq的信息
修改profile命令
vim /etc/profile
#set rocketmq
ROCKETMQ_HOME=/home/rocketmq/rocketmq-all-4.9.1-bin-release # rocketmq所在位置
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
export NAMESRV_ADDR=172.18.14.91:9876 # 设置namesrv的ip、端口,启动时不需要在命令中添加端口号
2.1.3多服务器集群配置文件
当集群分布在多个服务器时,修改/etc/hosts文件(单个服务器不需要配置)
# 修改命令
vim /etc/hosts
#例:
#namesrv
服务器1ip rocketmq-nameserver1
服务器2ip rocketmq-nameserver2
#broker
服务器1ip rocketmq-master1
服务器1ip rocketmq-salve2
服务器2ip rocketmq-master2
服务器2ip rocketmq-broker1
2.1.4 配置集群
进入rocketmq的conf/2m-2s-async目录下,根据要求配置broker节点。
配置文件的配置方式与windows系统一致,注意路径位置。
2.1.4.1 四主
(1) 修改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=172.18.14.91:9876;172.18.14.92:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的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=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-bin-release//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) 修改broker-a-s.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a-s
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10811
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-bin-release//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
(3) 修改broker-b.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10711
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-bin-release//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) 修改broker-b-s.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-b-s
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10611
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-bin-release//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.1.4.2 主从替换
(不建议,linux命令是关闭当前服务器所有的broker,主节点是在多个从节点之间选举出来的,随机性较大,多服务器启动时,很可能会同一个服务器拥有多个主节点。)
修改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=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的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=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-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
# 与 dledger 相关的属性,主从替换
enableDLegerCommitLog=true
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a//dledger_store
dLegerGroup=broker-a
dLegerPeers=n0-172.18.14.91:40911;n1-172.18.14.91:40912;n2-172.18.14.91:40913
dLegerSelfId=n0
修改broker-a-s.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10811
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-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
# 与 dledger 相关的属性
enableDLegerCommitLog=true
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-s//dledger_store
dLegerGroup=broker-a
dLegerPeers=n0-172.18.14.91:40911;n1-172.18.14.91:40912;n2-172.18.14.91:40913
dLegerSelfId=n1
新增broker-a-ss.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=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10711
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-ss
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-ss//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-ss//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-ss//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-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
# 与 dledger 相关的属性
enableDLegerCommitLog=true
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-a-ss//dledger_store
dLegerGroup=broker-a
dLegerPeers=n0-172.18.14.91:40911;n1-172.18.14.91:40912;n2-172.18.14.91:40913
dLegerSelfId=n2
修改broker-b.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-b,他的slave也叫broker-b
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10611
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-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
# 与 dledger 相关的属性
enableDLegerCommitLog=true
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b//dledger_store
dLegerGroup=broker-b
dLegerPeers=n3-172.18.14.91:40914;n4-172.18.14.91:40915;n5-172.18.14.91:40916
dLegerSelfId=n3
修改broker-b-s.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-b,他的slave也叫broker-b
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10511
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-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
# 与 dledger 相关的属性
enableDLegerCommitLog=true
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-s//dledger_store
dLegerGroup=broker-b
dLegerPeers=n3-172.18.14.91:40914;n4-172.18.14.91:40915;n5-172.18.14.91:40916
dLegerSelfId=n4
新增broker-b-ss.properties内容
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-b,他的slave也叫broker-b
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=172.18.14.91:9876
# 测试,添加brokerIP;可用,但只能有一个同名的主节点存活,不适合主从替换
# brokerIP1=172.18.12.40
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10411
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-ss
#commitLog 存储路径
storePathCommitLog=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-ss//commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-ss//consumequeue
#消息索引存储路径
storePathIndex=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-ss//index
#checkpoint 文件存储路径
storeCheckpoint=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//checkpoint
#abort 文件存储路径
abortFile=//home//rocketmq//rocketmq-all-4.9.1-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
# 与 dledger 相关的属性
enableDLegerCommitLog=true
storePathRootDir=//home//rocketmq//rocketmq-all-4.9.1-bin-release//store//broker-b-ss//dledger_store
dLegerGroup=broker-b
dLegerPeers=n3-172.18.14.91:40914;n4-172.18.14.91:40915;n5-172.18.14.91:40916
dLegerSelfId=n5
2.1.5修改内存大小、日志位置
进入rocketmq的bin目录,修改runserver.sh、runbroker.sh、tools.sh三个配置文件,将启动内存改小、修改日志储存位置
runbroker.sh
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#===========================================================================================
# Java Environment Setting
#===========================================================================================
error_exit ()
{
echo "ERROR: $1 !!"
exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/bin/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
#===========================================================================================
# JVM Configuration
#===========================================================================================
# The RAMDisk initializing size in MB on Darwin OS for gc-log
DIR_SIZE_IN_MB=600
choose_gc_log_directory()
{
case "`uname`" in
Darwin)
if [ ! -d "/Volumes/RAMDisk" ]; then
# create ram disk on Darwin systems as gc-log directory
DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null
diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null
echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS."
fi
GC_LOG_DIR="/Volumes/RAMDisk"
;;
*)
# check if /dev/shm exists on other systems
if [ -d "/dev/shm" ]; then
GC_LOG_DIR="/dev/shm"
else
GC_LOG_DIR=${BASE_DIR}
fi
;;
esac
}
choose_gc_log_directory
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn64m" # 修改
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -Duser.home=/home/rocketmq/rocketmq-all-4.9.1-bin-release/" # 新增
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
numactl --interleave=all pwd > /dev/null 2>&1
if [ $? -eq 0 ]
then
if [ -z "$RMQ_NUMA_NODE" ] ; then
numactl --interleave=all $JAVA ${JAVA_OPT} $@
else
numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@
fi
else
$JAVA ${JAVA_OPT} $@
fi
runserver.sh
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#===========================================================================================
# Java Environment Setting
#===========================================================================================
error_exit ()
{
echo "ERROR: $1 !!"
exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
#===========================================================================================
# JVM Configuration
#===========================================================================================
# The RAMDisk initializing size in MB on Darwin OS for gc-log
DIR_SIZE_IN_MB=600
choose_gc_log_directory()
{
case "`uname`" in
Darwin)
if [ ! -d "/Volumes/RAMDisk" ]; then
# create ram disk on Darwin systems as gc-log directory
DEV=`hdiutil attach -nomount ram://$((2 * 1024 * DIR_SIZE_IN_MB))` > /dev/null
diskutil eraseVolume HFS+ RAMDisk ${DEV} > /dev/null
echo "Create RAMDisk /Volumes/RAMDisk for gc logging on Darwin OS."
fi
GC_LOG_DIR="/Volumes/RAMDisk"
;;
*)
# check if /dev/shm exists on other systems
if [ -d "/dev/shm" ]; then
GC_LOG_DIR="/dev/shm"
else
GC_LOG_DIR=${BASE_DIR}
fi
;;
esac
}
choose_gc_options()
{
# Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ...
# '1' means releases befor Java 9
JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -r -n 's/.* version "([0-9]*).*$/\1/p')
if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then
# JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # 删除或注释掉
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
else
# JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # 删除或注释掉
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"
fi
}
choose_gc_log_directory
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # 新增
choose_gc_options
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -Duser.home=/home/rocketmq//rocketmq-all-4.9.1-bin-release/" # 新增
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
$JAVA ${JAVA_OPT} $@
tools.sh
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#===========================================================================================
# Java Environment Setting
#===========================================================================================
error_exit ()
{
echo "ERROR: $1 !!"
exit 1
}
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m" # 修改
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
JAVA_OPT="${JAVA_OPT} -Duser.home=/home/rocketmq//rocketmq-all-4.9.1-bin-release/" # 新增
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
$JAVA ${JAVA_OPT} "$@"
2.1.6启动namesrv和broker命令
# 启动mqnamesrv:
nohup sh mqnamesrv &
# 启动broker:
nohup sh mqbroker -c /home/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-a.properties 2>&1 &
nohup sh mqbroker -c /home/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-a-s.properties 2>&1 &
nohup sh mqbroker -c /home/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-a-ss.properties 2>&1 &
nohup sh mqbroker -c /home/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-b.properties 2>&1 &
nohup sh mqbroker -c /home/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-b-s.properties 2>&1 &
nohup sh mqbroker -c /home/rocketmq/rocketmq-all-4.9.1-bin-release/conf/2m-2s-async/broker-b-ss.properties 2>&1 &
# 关闭(当前服务器所有的)broker:
sh mqshutdown broker
# 关闭mqnamesrv:
sh mqshutdown namesrv
Java命令:
Jps

2.1.7查看namesrv和broker是否启动
查看日志:# 路径为user.home的所在位置,若runserver.sh、runbroker.sh添加user.home或修改源码中user.home路径,按修改后的为准。
tail -f ~/logs/rocketmqlogs/namesrv.log
tail -f ~/logs/rocketmqlogs/broker.log
查看启动了多少java进程:# rocketmq是由java编译,启动namesrv和broker后可以用此方法看是否启动,但不能查看进程的具体信息,建议每启动一个节点后用此命令查看一次是否启动(一般情况下,启动信息会在下一个命令输入后打印)。
jps
2.1.8启动失败原因
配置文件设置的启动内存是否够系统跑起来(适当调小内存)
查看JDK相关配置(配置文件的JDK路径是否正确、是否为JDK配置环境变量(JDK所在文件路径和变量写的路径是否一致)、JDK版本是否≥1.8)
2.2集群可视化工具
2.2.1配置
解压RocketMQ插件(整个项目只需要rocketmq-console项目),进入此项目的\rocketmq-console\src\main\resources目录,修改application.properties文件
# 插件使用的端口
server.port=8088
# 通过namesrv的位置,知道集群数量、ip与端口
rocketmq.config.namesrvAddr=localhost:9876

2.2.2打包
回到/rocketmq-console目录,用cmd命令将插件打包
mvn clean install -Dmaven.test.skip=true
2.2.3启动
进入/rocketmq-console/target目录,用cmd命令启动jar包(也不要关闭cmd窗口,jar包后缀不一定是-1.0.1.jar)
java -jar rocketmq-console-ng-1.0.1.jar
2.2.4查看
启动成功后用网页打开,端口号为配置插件的application.properties文件时修改的端口号;在页面的cluster目录下查看集群信息(根据不同电脑配置可能会需要一些时间等响应)。页面右上角可以将大部分语言改成中文。
http://127.0.0.1:8088/

2.2.5添加主题
点击页面topic(主题),此时搭建的集群没有任何主题(第一次搭建、启动,默认添加主题未开启),需要手动添加,点击ADD/UPDATE(添加/更新),会出现配置主题页面(可能需要等会才加载出来)。添加所属集群、broker、主题名称,点击COMMIT(提交)即可。
所属集群、broker_name右侧都是对应的都是下拉框,broker_name的可以重复选择。
配置好所属集群名称,可以不用配置broker,主题会根据名称找到集群下所有broker。
再次点击ADD/UPDATE(添加/修改),会根据所属集群修改主题,而不是在这个集群中再次添加一个主题。

2.2.6添加消费者
点击页面Consumer(消费者),会看到很多消费者,都是系统内部使用的。刚刚创建好主题无法使用这些消费者,需要手动创建消费者。创建过程和创建主题一样。
consumeBroadcastEnable:是否广播。将其点成否
广播模式:不管是谁生产的数据,所有的消费者都消费一遍(有1000条数据,生产者负载均衡,但每个消费者都消费这1000条)
右下角COMMIT在定义好所属集群、主题名称后才能点击。
BrokerId:0代表master(主),默认为0(修改无效,无需在意)。

2.3 Nginx
(由于要进行桥接,建议将nginx放在另一台服务器上)
编译安装
2.3.1 Nginx安装,下载前需要安装好依赖
安装nginx依赖
yum install pcre-devel zlib zlib-devel openssl openssl-devel
到指定目录,下载nginx
wget http://nginx.org/download/nginx-1.20.1.tar.gz
解压
tar zxvf nginx-1.20.1.tar.gz
进入nginx解压目录,安装包含stream模块的nginx
./configure # 默认安装,文件安装在/usr/local的各大文件夹中,不容易管理,不建议
./configure --prefix=/指定目录(如/home/nginx) --with-stream # 将nginx安装到指定目录(包含stream模块)
make && make install
2.3.2修改端口号
修改http模块的server中listen对应的端口号(根据个人喜好进行修改,不要与其他进程抢占端口)

配置好后回到nginx安装目录,输入./sbin/nginx。在网页输入127.0.0.1:8081,会看到nginx欢迎界面,证明linux部署nginx成功。
Linux命令
#进入/nginx/sbin
./nginx -s stop #停止
./nginx -s quit #安全退出
./nginx -s reload #重新加载配置文件
ps aux|grep nginx #查看nginx进程
注:如果没有出现欢迎界面,看一下/logs/error.log文件下错误内容。
2.3.3代理
部署成功后,修改/conf/nginx.conf配置文件。添加stream{}代码块(stream代码块和events、http两个代码块属于同级),proxy_pass对应的是集群nameServer地址(namesrvAddr=127.0.0.1:9876);listen为跳转的端口(若在同一台虚拟机上部署了rocketmq和nginx,listen不能再使用9876),否则nginx或mqnamesrv会出现端口占用的情况。
stream {
server {
listen 9877;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:9876;
}
}
修改好配置文件重新启动sbin目录下的nginx,通过nginx代理后的ip:端口,查看nginx是否可以成功代理rocketmq
2.4Nginx桥接RocketMQ
2.4.1桥接要求
有三台电脑:服务器A、客户端B、负责进行桥接的电脑C。
客户端电脑B无法连接服务器A,桥接电脑C可以与A、B任意连接。
客户端B的消息通过桥接电脑C上传到服务器A的namesrv,namesrv返回的ip:端口是桥接电脑C代理后的。从而做到客户端B可以再次通过桥接电脑C将数据交给服务器A,从而进行消息的生产和消费。

想法:
服务器A返回的是自己的ip,nginx将响应数据里与服务器ip相同的全部替换成桥接电脑C的IP。
服务器A返回的直接是桥接电脑C的IP,nginx将服务器A里集群所有的节点进行反向代理。
2.4.2修改方式
2.4.2.1 修改集群配置文件
进入服务器A的RocketMQ/conf/2m-2s-aync目录(配置broker节点的目录),修改所有(broker节点)的broker- .properties文件
brokerIP1=桥接电脑C的IP号

注:brokerIP1属性相当于告诉namesrv能够在哪个IP下可以找到此节点(强制按照此IP进行查找)。单机集群可不用配置此属性(尚未进行多服务器搭集群测试)。
2.4.2.2 配置集群节点代理
切换到桥接电脑C,修改nginx的/conf目录下修改nginx.conf文件。在stream模块内添加需要代理broker节点的server模块。
server {
listen 10811;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10811;
}
server {
listen 10711;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10711;
}
server {
listen 10611;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10611;
}
2.4.2.3 再次代理节点相关端口
启动桥接电脑C的nginx、服务器A的RocketMQ集群、rocketmq可视化工具jar包(rocketmq-console)。查看rocketmq可视化工具的控制台打印信息:由于强制指定了brokerIP为nginx代理的IP,还需要nginx代理一些(跟broker节点相关)端口。需要代理的端口会在可视化工具的控制台中打印,用Nginx代理这些端口即可在可视化工具中查看。
# 本人需要再次代理的端口,代理位置和代理broker一样在sream模块中
server {
listen 10909;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10909;
}
server {
listen 10809;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10809;
}
server {
listen 10709;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10709;
}
server {
listen 10609;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 172.18.14.91:10609;
}
由于在测试之前,本人的电脑和作为服务器的系统可以直连,需要使用如下命令进行测试
禁止连接(黑名单):iptables -I INPUT -s IP号 -j DROP
允许连接(白名单):iptables -I INPUT -s IP号 -j ACCEPT
- 部署注意事项
JDK和OPENJDK都可以启动RocketMQ集群,jdk版本最低要求为1.8
Broker节点的配置:四主(master)的复制和刷盘(写入磁盘)必须是同步,否则会在其中一个master宕机时出现消费数量远大于生产数量。
由于版本原因,Broker节点配置时,日志的存储路径必须使用双斜杠//,否则可能出现无法启动还不报错等失败情况。
非主从替换情况下,在还有数据没进行消费时,出现某个master节点宕机,未消费数据需要等master节点起来后才能消费。
主从替换的最低要求是一主(master)两从(broker),刚起来broker节点都默认是从节点,然后在总多从节点中选出一个(master)主节点。主(master)节点宕机后再选出新的主(master)节点,之前宕机的节点重启后自动变回从(slave)节点。网上信息说主从替换的最低要求是从节点数量必须是2n+1个(即2*broker+master)。
可视化插件在修改application.properties时,可以修改namesrvAddr的ip和端口。在启动打包好的jar文件后,在页面左上角OPS(运维)里,可以修改集群的ip和端口。输入ip:端口后,按下回车(Enter)键,使其被一个边框给框住(选中状态),再点击右侧按钮进行更新。即可查看此ip端口启动的集群。
在配置RocketMQ集群的broker节点时,除了桥接,尽量不要用brokerIP1这个属性,让IP随系统改变即可。
新创建的Linux系统在安装nginx之前需要添加依赖。
修改配置文件后,依旧无法做到rokcetmq-client.log的修改。