rocketmq集群-多主多从异步模式-安装成功记录(linux centos8 AnolisOs),测试

rocketmq集群 二主二从异步模式

运行环境

  • 准备两个 AnolisOs 系统

下载 rocketmq

修改 broker 配置文件

cd rocketmq-all-5.3.1-bin-release/conf/2m-2s-async/
broker-a.properties 在服务器1上配置

vim broker-a.properties

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.8.138:9876;192.168.8.139: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=/home/rocketMQ/a/store
#commitLog 存储路径
storePathCommitLog=/home/rocketMQ/a/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketMQ/a/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketMQ/a/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketMQ/a/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketMQ/a/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
#syncSlave=true
broker-b-s.properties 在服务器1上配置

vim broker-b-s.properties

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.8.138:9876;192.168.8.139: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=/home/rocketMQ/b-s/store
#commitLog 存储路径
storePathCommitLog=/home/rocketMQ/b-s/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketMQ/b-s/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketMQ/b-s/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketMQ/b-s/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketMQ/b-s/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.properties 在服务器2上配置

vim broker-b.properties

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.8.138:9876;192.168.8.139: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=/home/rocketMQ/b/store
#commitLog 存储路径
storePathCommitLog=/home/rocketMQ/b/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketMQ/b/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketMQ/b/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketMQ/b/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketMQ/b/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
#syncSlave=true
broker-a-s.properties 在服务器2上配置

vim broker-a-s.properties

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

日志文件位置

日志文件位置:启动软件的用户的家目录。

  • root用户的家目录是’/root’

修改脚本文件

  • 修改文件一行内容,注释为原内容
  • vim rocketmq-all-5.3.1-bin-release/bin/runbroker.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"
  • 修改文件两行内容,注释为原内容,
  • vim rocketmq-all-5.3.1-bin-release/bin/runserver.sh
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"


#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

配置环境变量

编辑 ~/.bashrc/etc/profile 文件:

export ROCKETMQ_HOME=/root/rocketmq-all-5.3.1-bin-release
export PATH=$ROCKETMQ_HOME/bin:$PATH

刷新配置:

source ~/.bashrc

开放端口,在每台服务器进行

firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --zone=public --add-port=11011/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

创建消息存放路径

# 服务器1运行
mkdir -p /home/rocketMQ/{a,b-s}/store
# 服务器2运行
mkdir -p /home/rocketMQ/{a-s,b}/store
  • 注意:
    1、不能在store目录下,创建文件或目录。会导致broker启动失败,且日志文件找不到失败原因

启动 NameServer

# 分别在服务器1、服务器2运行
/root/rocketmq-all-5.3.1-bin-release/bin/mqnamesrv &

启动 broket 集群

#---------------------------------------
#在服务器1,启动master1和slave2
#master1:
mqbroker -c /root/rocketmq-all-5.3.1-bin-release/conf/2m-2s-async/broker-a.properties &
#slave2:
mqbroker -c /root/rocketmq-all-5.3.1-bin-release/conf/2m-2s-async/broker-b-s.properties &

#---------------------------------------
#在服务器2,启动master2和slave1
#master2:
mqbroker -c /root/rocketmq-all-5.3.1-bin-release/conf/2m-2s-async/broker-b.properties &
#slave1:
mqbroker -c /root/rocketmq-all-5.3.1-bin-release/conf/2m-2s-async/broker-a-s.properties &

查询集群状态

sh mqadmin clusterList -n 192.168.8.138:9876

rocketmq集群 生产者消费者测试

生产者消费者测试
#配置环境变量
export NAMESRV_ADDR='192.168.8.138:9876;192.168.8.139:98'
echo $NAMESRV_ADDR


#启动生产者
tools.sh org.apache.rocketmq.example.quickstart.Producer


#启动消费者
tools.sh org.apache.rocketmq.example.quickstart.Consumer
查询生产消费情况
#查询集群状态
sh mqadmin clusterList -n 127.0.0.1:9876

#查看集群更多信息[查询生产消费情况]
mqadmin clusterList -n 127.0.0.1:9876 -m

附录broker配置文件参数介绍

以下是 RocketMQ broker.conf 配置文件中各项参数的详细介绍和作用:


集群配置

  1. brokerClusterName=rocketmq-cluster

    • 作用:指定当前 Broker 所属的集群名称。
    • 用途:用于区分集群内的 Broker,当多个集群共存时,NameServer 可以根据集群名区分服务。
    • 建议:所有集群中的 Broker 使用相同的集群名。
  2. brokerName=broker-a

    • 作用:Broker 的逻辑名称。
    • 用途:在一个集群中,不同的 Broker 实例需使用不同的 brokerName,Master 和 Slave 通常共享同一个 brokerName
  3. brokerId=0

    • 作用

      :指定 Broker 的角色:

      • 0 表示 Master。
      • 大于 0 表示 Slave(通常为 1, 2, 3)。
    • 用途:Master 和 Slave 的区别在于数据同步方式。

  4. namesrvAddr=192.168.8.138:9876;192.168.8.139:9876

    • 作用:NameServer 的地址列表,多个地址用分号分隔。
    • 用途:Broker 在启动时需要注册到 NameServer,NameServer 地址需保持可用。

Topic 和订阅配置

  1. defaultTopicQueueNums=4

    • 作用:在 Broker 上自动创建的 Topic 默认包含的队列数量。
    • 用途:每个队列对应一个物理文件,用于分发消息。
    • 建议:根据消息量调节队列数,避免过少影响吞吐,或过多占用磁盘。
  2. autoCreateTopicEnable=true

    • 作用:是否允许 Broker 自动创建 Topic。

    • 建议

      • 线下环境:可开启,方便测试。
      • 线上环境:建议关闭,确保 Topic 的创建和管理由管理员控制。
  3. autoCreateSubscriptionGroup=true

    • 作用:是否允许自动创建订阅组(消费者组)。
    • 建议:与 autoCreateTopicEnable 类似,线上建议关闭。

Broker 服务配置

  1. listenPort=10911

    • 作用:Broker 对外服务的监听端口。
    • 默认值10911
  2. brokerRole=ASYNC_MASTER

    • 作用

      :指定 Broker 的角色,支持以下三种角色:

      • ASYNC_MASTER:异步复制的主节点(默认)。
      • SYNC_MASTER:同步双写的主节点,保证消息一致性。
      • SLAVE:从节点,用于消息备份。
    • 建议

      • 高可靠性场景:使用 SYNC_MASTER
      • 一般场景:使用 ASYNC_MASTER
  3. flushDiskType=ASYNC_FLUSH

    • 作用

      :指定消息刷盘方式:

      • ASYNC_FLUSH:异步刷盘,性能较高,但有数据丢失风险。
      • SYNC_FLUSH:同步刷盘,性能较低,但数据更可靠。
    • 建议

      • 高可靠性场景:使用 SYNC_FLUSH
      • 高吞吐场景:使用 ASYNC_FLUSH

存储配置

  1. storePathRootDir=/home/rocketMQ/a/store
    • 作用:指定 Broker 存储文件的根目录。
  2. storePathCommitLog=/home/rocketMQ/a/store/commitlog
    • 作用:CommitLog 的存储路径。
    • 用途:CommitLog 是 RocketMQ 的核心文件,用于保存所有消息数据。
  3. storePathConsumeQueue=/home/rocketMQ/a/store/consumequeue
    • 作用:消费者队列文件的存储路径。
    • 用途:保存每个 Topic 的消息队列信息,用于快速定位消息。
  4. storePathIndex=/home/rocketMQ/a/store/index
    • 作用:消息索引文件的存储路径。
    • 用途:消息索引用于快速检索消息。
  5. storeCheckpoint=/home/rocketMQ/a/store/checkpoint
    • 作用:Checkpoint 文件存储路径。
    • 用途:用于记录 Broker 的消费进度和存储进度,便于 Broker 重启后快速恢复。
  6. abortFile=/home/rocketMQ/a/store/abort
    • 作用:Abort 文件的存储路径。
    • 用途:标记 Broker 是否异常关闭。

磁盘清理和容量管理

  1. deleteWhen=04
    • 作用:指定每天的文件删除时间,单位为 24 小时制(如 04 表示凌晨 4 点)。
    • 用途:定时删除过期文件,释放磁盘空间。
  2. fileReservedTime=120
    • 作用:文件保留时间,单位为小时。
    • 用途:超过指定时间的文件将被标记为过期并删除。
    • 默认值48 小时,当前配置为 120 小时(5 天)。
  3. mapedFileSizeCommitLog=1073741824
    • 作用:CommitLog 单个文件的大小,默认 1 GB。
    • 用途:决定物理文件切分的粒度。
    • 建议:默认值通常足够,无需更改。
  4. mapedFileSizeConsumeQueue=300000
    • 作用:ConsumeQueue 单个文件包含的消息条数,默认 30 万
    • 用途:根据消息量调整文件粒度。
  5. diskMaxUsedSpaceRatio=88
    • 作用:磁盘使用率达到该比例时,Broker 停止写入新消息。
    • 默认值88%

消息相关配置

  1. maxMessageSize=65536
    • 作用:限制单条消息的最大大小,单位为字节。
    • 默认值:64 KB。
    • 建议:如需发送更大消息,可以调整该值,但会影响性能。

线程池配置

  1. sendMessageThreadPoolNums=128
    • 作用:Broker 处理发送消息的线程池大小。
    • 用途:高并发情况下需要调整此值,确保处理效率。
  2. pullMessageThreadPoolNums=128
    • 作用:Broker 处理拉取消息的线程池大小。
    • 用途:根据消费者负载调整。

补充说明

  • 调优建议

    • 线上环境下,将 autoCreateTopicEnableautoCreateSubscriptionGroup 设置为 false
    • 确保磁盘容量足够,合理调整 fileReservedTimediskMaxUsedSpaceRatio
    • 根据吞吐量需求,调整 sendMessageThreadPoolNumspullMessageThreadPoolNums

如需进一步优化配置或解决问题,请提供更多使用场景和需求信息!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值