利用9台机器搭建一个3分片的broker集群,一共有3个broker实例(3m),每个master有一个slave,使用同步刷盘模式。

1.引言

本文主要介绍如何在三台机器上搭建一个3m-3s的rocketmq的集群。

2.环境准备

机器名

机器

机器配置

备注

nameserver1

192.168.11.1

4C8G

 

nameserver2

192.168.11.2

4C8G

 

nameserver3

192.168.11.3

4C8G

 

broker11

192.168.11.4

8C16G broker-a(master)

broker12

192.168.11.5

8C16G broker-a(slave)

broker21

192.168.11.6 8C16G broker-b(master)

broker22

192.168.11.7 8C16G broker-b(slave)

broker31

192.168.11.8

8C16G

broker-c(master)

broker32

192.168.11.9

8C16G broker-c(slave)

2.1 配置hostname

这里设置是为了方便管理机器节点,也可以跳过此处。

#nameserver1上执行:
hostnamectl set-hostname nameserver1
#nameserver2上执行:
hostnamectl set-hostname nameserver2
#nameserver3上执行:
hostnamectl set-hostname nameserver3
#broker11上执行:
hostnamectl set-hostname broker11
#broker12上执行:
hostnamectl set-hostname broker12
#broker21上执行:
hostnamectl set-hostname broker21
#broker22上执行:
hostnamectl set-hostname broker22
#broker31上执行:
hostnamectl set-hostname broker31
#broker32上执行:
hostnamectl set-hostname broker32

2.2 设置hosts

分别在所有broker机器和nameserver机器上执行:

cat >>/etc/hosts<<EOF
192.168.11.1 nameserver1
192.168.11.2 nameserver2
192.168.11.3 nameserver3
EOF

3. 具体步骤

3.1 下载rocketmq的编译好的二进制包(4.7.1版本)

wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

3.2 解压缩到到/usr/local/mq目录,并创建软链接

#解压到/usr/local
unzip rocketmq-all-4.7.1-bin-release.zip -d /usr/local/
cd /usr/local/
#创立软链接
ln -s rocketmq-all-4.7.1-bin-release rocketmq

3.3 安装java

#Ubuntu:
sudo apt install -y  openjdk-8-jdk*
#Centos:
sudo yum install -y java-1.8.0-openjdk*

4.初始化环境

4.1 设置环境变量

#1. 设置JAVA_HOME
#如果是Ubuntu
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/'>> ~/.bashrc
#如果是Centos
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/'>> ~/.bashrc#2. 设置CLASSPATH,ROCKETMQ_HOME
#无论是Ubuntu还是Centos都执行如下:
#设置CLASSPATH
echo 'export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib'>> ~/.bashrc
#设置ROCKETMQ_HOME
echo 'export ROCKETMQ_HOME=/usr/local/rocketmq'>> ~/.bashrc
#添加到PATH
echo 'export PATH=$PATH:$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin'>> ~/.bashrc

4.2 加载环境变量

source ~/.bashrc

4.3  创建目录

#/data目录的空间至少为1T+
mkdir -pv {/data/logs,/data/rocketmq/store/commitlog}

4.4 修改rocketmq的主目录

sed -i 's#${user.home}#/data#g' $ROCKETMQ_HOME/conf/*.xml

4.5 修改jvm参数

根据实际情况修改runserver.sh和runbroker.sh中的堆内存,如果机器够好,建议调大一点

4.6 修改Linux系统参数提高性能

cd $ROCKETMQ_HOME/bin
sudo ./os.sh

5 启动

5.1 启动nameserver

1) 生成配置

分别在nameserver1,nameserver2,nameserver3上执行:

#进入Rockmq的bin目录
cd $ROCKETMQ_HOME/bin
#生产nameserver的配置
cat >> namesrv.properties << EOF
rocketmqHome=/usr/local/rocketmq
kvConfigPath=/root/namesrv/kvConfig.json
productEnvName=center
clusterTest=false
orderMessageEnable=false
listenPort=9876
serverWorkerThreads=8
serverCallbackExecutorThreads=0
serverSelectorThreads=3
serverOnewaySemaphoreValue=256
serverAsyncSemaphoreValue=64
serverChannelMaxIdleTimeSeconds=120
serverSocketSndBufSize=65535
serverSocketRcvBufSize=65535
serverPooledByteBufAllocatorEnable=true
useEpollNativeSelector=true
EOF

2) 启动nameserver

cd $ROCKETMQ_HOME/bin
nohup ./mqnamesrv -c namesrv.properties &

5.2 启动broker

分配配置六台broker

5.2.1 配置Rocket集群

broker11配置环境变量

cat >> ~/.bashrc << EOF
Role=broker11
brokerId=0
GroupName=broker-a
EOF

然后执行:source ~/.bashrc

broker11的配置生成

cd $ROCKETMQ_HOME
cat >conf/dledger/qmq-${Role}.conf<<EOF
brokerClusterName=QMQ
brokerId=${brokerId}
#master这里brokerRole设置为SYNC_MASTER
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
brokerName=${GroupName}
namesrvAddr=nameserver1:9876;nameserver2:9876;nameserver3:9876
storePathRootDir=/data/rocketmq/${Role}
storePathCommitLog=/data/rocketmq/${Role}/commitlog
enableDLegerCommitLog=false
#凌晨4点触发一次删除
deleteWhen = 04
diskMaxUsedSpaceRatio=50
#只保留最近1天的消息
fileReservedTime = 24
sendMessageThreadPoolNums=8
defaultTopicQueueNums=16
maxTransferCountOnMessageInMemory=1000
waitTimeMillsInSendQueue=1000
transientStorePoolEnable=false
warmMapedFileEnable=false
transferMsgByHeap=true
maxTransferCountOnMessageInMemory=2000
maxTransferBytesOnMessageInMemory=2000*1024
#增加快速失败的时长
maxWaitTimeMillsInQueue=1000
#这里允许从slave进行消费
slaveReadEnable=true
EOF

启动broker11

cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/dledger/qmq-${Role}.conf &

broker12配置环境变量

cat >> ~/.bashrc << EOF
Role=broker12
brokerId=1
GroupName=broker-a
EOF
然后执行:source ~/.bashrc

broker12的配置生成

cd $ROCKETMQ_HOME
cat >conf/dledger/qmq-${Role}.conf<<EOF
brokerClusterName=QMQ
brokerId=${brokerId}
#slave就这里有区别,brokerRole设置为SLAVE
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH
brokerName=${GroupName}
namesrvAddr=nameserver1:9876;nameserver2:9876;nameserver3:9876
storePathRootDir=/data/rocketmq/${Role}
storePathCommitLog=/data/rocketmq/${Role}/commitlog
enableDLegerCommitLog=false
#凌晨4点触发一次删除
deleteWhen = 04
diskMaxUsedSpaceRatio=50
#只保留最近1天的消息
fileReservedTime = 24
sendMessageThreadPoolNums=8
defaultTopicQueueNums=16
maxTransferCountOnMessageInMemory=1000
waitTimeMillsInSendQueue=1000
transientStorePoolEnable=false
warmMapedFileEnable=false
transferMsgByHeap=true
maxTransferCountOnMessageInMemory=2000
maxTransferBytesOnMessageInMemory=2000*1024
#增加快速失败的时长
maxWaitTimeMillsInQueue=1000
#这里允许从slave进行消费
slaveReadEnable=true
EOF
启动broker12
cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/dledger/qmq-${Role}.conf & 

broker21配置环境变量

cat >> ~/.bashrc << EOF
Role=broker21
brokerId=0
GroupName=broker-b
EOF

然后执行:source ~/.bashrc

broker21的配置生成

cd $ROCKETMQ_HOME
cat >conf/dledger/qmq-${Role}.conf<<EOF
brokerClusterName=QMQ
brokerId=${brokerId}
#master这里brokerRole设置为SYNC_MASTER
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
brokerName=${GroupName}
namesrvAddr=nameserver1:9876;nameserver2:9876;nameserver3:9876
storePathRootDir=/data/rocketmq/${Role}
storePathCommitLog=/data/rocketmq/${Role}/commitlog
enableDLegerCommitLog=false
#凌晨4点触发一次删除
deleteWhen = 04
diskMaxUsedSpaceRatio=50
#只保留最近1天的消息
fileReservedTime = 24
sendMessageThreadPoolNums=8
defaultTopicQueueNums=16
maxTransferCountOnMessageInMemory=1000
waitTimeMillsInSendQueue=1000
transientStorePoolEnable=false
warmMapedFileEnable=false
transferMsgByHeap=true
maxTransferCountOnMessageInMemory=2000
maxTransferBytesOnMessageInMemory=2000*1024
#增加快速失败的时长
maxWaitTimeMillsInQueue=1000
#这里允许从slave进行消费
slaveReadEnable=true
EOF

启动broker21

cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/dledger/qmq-${Role}.conf &

broker22配置环境变量

cat >> ~/.bashrc << EOF
Role=broker22
brokerId=1
GroupName=broker-b
EOF

然后执行:source ~/.bashrc

broker22的配置生成

cd $ROCKETMQ_HOME
cat >conf/dledger/qmq-${Role}.conf<<EOF
brokerClusterName=QMQ
brokerId=${brokerId}
#slave就这里有区别,brokerRole设置为SLAVE
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH
brokerName=${GroupName}
namesrvAddr=nameserver1:9876;nameserver2:9876;nameserver3:9876
storePathRootDir=/data/rocketmq/${Role}
storePathCommitLog=/data/rocketmq/${Role}/commitlog
enableDLegerCommitLog=false
#凌晨4点触发一次删除
deleteWhen = 04
diskMaxUsedSpaceRatio=50
#只保留最近1天的消息
fileReservedTime = 24
sendMessageThreadPoolNums=8
defaultTopicQueueNums=16
maxTransferCountOnMessageInMemory=1000
waitTimeMillsInSendQueue=1000
transientStorePoolEnable=false
warmMapedFileEnable=false
transferMsgByHeap=true
maxTransferCountOnMessageInMemory=2000
maxTransferBytesOnMessageInMemory=2000*1024
#增加快速失败的时长
maxWaitTimeMillsInQueue=1000
#这里允许从slave进行消费
slaveReadEnable=true
EOF
启动broker22
cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/dledger/qmq-${Role}.conf & 

broker31配置环境变量

cat >> ~/.bashrc << EOF
Role=broker31
brokerId=0
GroupName=broker-c
EOF

然后执行:source ~/.bashrc

broker31的配置生成

cd $ROCKETMQ_HOME
cat >conf/dledger/qmq-${Role}.conf<<EOF
brokerClusterName=QMQ
brokerId=${brokerId}
#master这里brokerRole设置为SYNC_MASTER
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
brokerName=${GroupName}
namesrvAddr=nameserver1:9876;nameserver2:9876;nameserver3:9876
storePathRootDir=/data/rocketmq/${Role}
storePathCommitLog=/data/rocketmq/${Role}/commitlog
enableDLegerCommitLog=false
#凌晨4点触发一次删除
deleteWhen = 04
diskMaxUsedSpaceRatio=50
#只保留最近1天的消息
fileReservedTime = 24
sendMessageThreadPoolNums=8
defaultTopicQueueNums=16
maxTransferCountOnMessageInMemory=1000
waitTimeMillsInSendQueue=1000
transientStorePoolEnable=false
warmMapedFileEnable=false
transferMsgByHeap=true
maxTransferCountOnMessageInMemory=2000
maxTransferBytesOnMessageInMemory=2000*1024
#增加快速失败的时长
maxWaitTimeMillsInQueue=1000
#这里允许从slave进行消费
slaveReadEnable=true
EOF

启动broker31

cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/dledger/qmq-${Role}.conf &

broker32配置环境变量

cat >> ~/.bashrc << EOF
Role=broker32
brokerId=1
GroupName=broker-c
EOF
然后执行:source ~/.bashrc

broker32的配置生成

cd $ROCKETMQ_HOME
cat >conf/dledger/qmq-${Role}.conf<<EOF
brokerClusterName=QMQ
brokerId=${brokerId}
#slave就这里有区别,brokerRole设置为SLAVE
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH
brokerName=${GroupName}
namesrvAddr=nameserver1:9876;nameserver2:9876;nameserver3:9876
storePathRootDir=/data/rocketmq/${Role}
storePathCommitLog=/data/rocketmq/${Role}/commitlog
enableDLegerCommitLog=false
#凌晨4点触发一次删除
deleteWhen = 04
diskMaxUsedSpaceRatio=50
#只保留最近1天的消息
fileReservedTime = 24
sendMessageThreadPoolNums=8
defaultTopicQueueNums=16
maxTransferCountOnMessageInMemory=1000
waitTimeMillsInSendQueue=1000
transientStorePoolEnable=false
warmMapedFileEnable=false
transferMsgByHeap=true
maxTransferCountOnMessageInMemory=2000
maxTransferBytesOnMessageInMemory=2000*1024
#增加快速失败的时长
maxWaitTimeMillsInQueue=1000
#这里允许从slave进行消费
slaveReadEnable=true
EOF

启动broker32

cd $ROCKETMQ_HOME/bin
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/dledger/qmq-${Role}.conf & 

5.3 其它命令

Broker其它命令

1. 关闭broker和nameserver

sh mqshutdown broker
sh mqshutdown namesrv

2. 查看broker是否启动

#查看进程
jps -m#查看端口
netstat -tupln|grep -E '309|409'

5.4 查看集群信息

通过控制台查询

传送门:2021最新测试资料与大厂招聘合集

博主:测试生财(一个不为996而996的测开码农)

座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

微信公众号:测试生财(定期分享独家内容和资源)

RocketMQ系列:搭建3m-3s模式的rocketmq集群相关推荐

  1. redis搭建主从哨兵模式+分片集群部署(redis系列二)

    前言:在前一章了解redis的基本介绍后,这一章主要介绍redis的实战部署,文章有点长请一步步耐心看完,我相信肯定会有收获的,这里用的资源包是2022年最新的redis版本可能会跟旧版本不同,在此章 ...

  2. 云服务器搭建高可用keepalived+nginx+emqx集群

    云服务器搭建高可用keepalived+nginx+emqx集群 一.高可用emqx集群搭建 1 单机搭建emqx 2 配置认证和鉴权插件 3 搭建emqx集群 二.nginx搭建负载均衡 1 ngi ...

  3. 微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

    微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以Kubernetes+Docker为自动化运维基础平台,以微服务为服务 ...

  4. 汇总-13台虚拟机搭建一个高可用负载均衡集群架构

    要求 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,具体需求如下. 设计你认为合理的架构,用visio把架构图画出来 搭建lnmp.tomcat+jdk环境 三个站点分别为:dis ...

  5. 三分钟快速搭建分布式高可用的Redis集群

    这里的Redis集群指的是Redis Cluster,它是Redis在3.0版本正式推出的专用集群方案,有效地解决了Redis分布式方面的需求.当单机内存.并发.流量等遇到瓶颈的时候,可以采用这种Re ...

  6. Redis高可用方案:sentinel(哨兵模式)和集群

    一. redis高可用方案–sentinel(哨兵模式) 当我们搭建好redis主从复制方案后会发现一个问题,那就是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力, ...

  7. Redis高可用解决方案:sentinel(哨兵模式)和集群

    一. redis高可用方案–sentinel(哨兵模式) 当我们搭建好redis主从复制方案后会发现一个问题,那就是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力, ...

  8. 搭建hbase1.2.5完全分布式集群

    简介 有一段时间,没写博客了,因为公司开发分布式调用链追踪系统,用到hbase,在这里记录一下搭建过程 1.集群如下: ip 主机名 角色 192.168.6.130 node1.jacky.com ...

  9. 在Windows Server 2012 R2中搭建SQL Server 2012故障转移集群

    需要说明的是我们搭建的SQL Server故障转移集群(SQL Server Failover Cluster)是可用性集群,而不是负载均衡集群,其目的是为了保证服务的连续性和可用性,而不是为了提高服 ...

  10. 环境搭建:Windows系统下Nacos集群搭建

    环境搭建:Windows系统下Nacos集群搭建 一.环境准备 名称 版本 下载地址 nacos NACOS 1.2.0 下载地址,提取码:5555 MySQL mysql Ver 14.14 Dis ...

最新文章

  1. fastexcel读取excel追加写入sheet页_python笔记52:python操作excel
  2. Venn网络展示富集分析结果
  3. 杀掉php所有进程,杀死某个用户的所有进程
  4. Map/Reduce
  5. linux的定制和发布(二)
  6. arduino安卓手机版_剥离安卓!华为鸿蒙系统手机版正式发布:这两大机型率先升级...
  7. 高性能mysql 小查询_高性能MySQL06-查询优化(慢查询)
  8. 分形之科赫(Koch)雪花
  9. 计算机网络工程概论论文,网络工程专业导论论文提纲格式模板 网络工程专业导论论文框架怎么写...
  10. Linux安装GO语言环境
  11. spss相关分析(spss统计分析实验教程,谢蕾蕾)
  12. react-native实现支付宝支付
  13. 杭州最美的骑行路线在此!趁着春天蹬车撒欢去!
  14. ligerui demo php,LigerUI——天外飞仙
  15. 那些你该知道的CSS颜色代码大全都在这里了,点击查阅
  16. Scrum立会报告+燃尽图(Beta阶段第二周第四次)
  17. Omorn - NJ301-1100 AND NX102-9000 - Socket - TCP 通讯
  18. K-means聚类详解
  19. http,post请求
  20. 通达信软件接口如何更新股票价格指数?

热门文章

  1. 利用Volatility进行Windows内存取证分析(一):初体验
  2. 如何使微信小程序盒子内容居中显示
  3. 邻家汇:广告+精准营销助商超转型升级
  4. 关于 Windows 中使用 Safari 的说明 (2022)
  5. k8s的标签和标签选择器
  6. .Net 开源工作流 Roadflow 的使用与集成
  7. Allegro PCB快速查找并定位元器件
  8. 零基础学习python人工智能考试_零基础自学Python人工智能,看这些资料就够了
  9. 超有爱的并查集 ------ 转
  10. 远禾科技出席阿里ASRC生态大会 并参与安恒西湖论剑...