架构图

部署环境

hostname ip 备注
mqnamesrv1 10.0.0.1 namesrv
mqnamesrv2 10.0.0.2 namesrv
mqbroker3 10.0.0.3 broker-master-a
mqbroker4 10.0.0.4 broker-master-b
mqbroker5 10.0.0.5 broker-slave-a
mqbroker6 10.0.0.6 broker-slave-b

系统初始化

内核参数、防火墙等进行初始化设置
保证rocketmq集群内的机器内网都互通

#6台服务器都配置好jdk
#安装jdk,官网下载jdk1.8,并且解压到/usr/local/lib目录
#修改/etc/profile添加以下行,加入jdk到环境变量
cat >> /etc/profile <EOF
JAVA_HOME=/usr/local/lib/jdk1.8.0_321
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
EOFsource /etc/profile
#确认配置生效
java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

下载软件包

#下载项目组要求的指定版本软件
wget https://archive.apache.org/dist/rocketmq/4.9.2/rocketmq-all-4.9.2-bin-release.zip
解压到data目录并且改名
unzip rocketmq-all-4.9.2-bin-release.zip
mv rocketmq-4.9.2/ /data/

修改配置拉起mqnamesrv进程

#在两台namesrv上进行同样的配置
#修改日志目录
cd /data/rocketmq/conf
sed -i 's#${user.home}#/data/rocketmq#g' *.xml
#根据服务器实际内存修改runserver.cmd文件中的以下行,调整使用的内存
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g
#拉起namesrv
nohup sh /data/rocketmq/bin/mqnamesrv &
#观察启动日志,如果success表示成功了
2022-04-03 17:14:41 INFO main - The Name Server boot success. serializeType=JSON
#查看进程
jps
49280 NamesrvStartup
213932 Jps

修改配置拉起mqbroker进程

#修改日志目录
cd /data/rocketmq/conf
sed -i 's#${user.home}#/data/rocketmq#g' *.xml
#根据服务器实际内存修改runserver.cmd文件中的以下行,调整使用的内存
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g#和项目组确认主从方式为同步还是异步,再进对应目录下修改配置(假设为同步方式)
#broker-master-a
cd /data/rocketmq/conf/2m-2s-sync
cat > broker-a.properties <<EOF
brokerClusterName=MyCluster
namesrvAddr=10.0.0.1:9876;10.0.0.2:9876 #namesrv的地址
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
listenPort=10911
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#存储路径,根据需求进行配置绝对路径,默认是家目录下面
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
EOF#broker-slave-a
cat >broker-a-s.properties <<EOF
brokerClusterName=MyCluster
namesrvAddr=10.0.0.1:9876;10.0.0.2:9876
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#存储路径,根据需求进行配置绝对路径,默认是家目录下面
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
EOF#broker-master-b和broker-slave-b和上面配置除了brokerName为broker-b,其他都为一致#四台broker拉起进程
nohup sh /data/rocketmq/bin/mqbroker -c /data/rocketmq/conf/2m-2s-sync/broker-a.properties &
nohup sh /data/rocketmq/bin/mqbroker -c /data/rocketmq/conf/2m-2s-sync/broker-a-s.properties &
nohup sh /data/rocketmq/bin/mqbroker -c /data/rocketmq/conf/2m-2s-sync/broker-b.properties &
nohup sh /data/rocketmq/bin/mqbroker -c /data/rocketmq/conf/2m-2s-sync/broker-b-s.properties &
#确认日志启动成功
2022-04-06 12:10:03 INFO main - The broker[broker-b, 10.0.0.4:10911] boot success. serializeType=JSON and name server is 10.0.0.1:9876;10.0.0.2:9876
#检查进程
jps
216692 Jps
186345 BrokerStartup#集群进程都拉起来之后,进namesrv检查集群节点连接情况
cd /data/rocketmq/bin
sh mqadmin clusterList -n 10.0.0.1:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.InternalThreadLocalMap).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
ProjectDCluster   broker-a                0     10.0.0.3:10911       V4_9_2                   0.00(0,0ms)         0.00(0,0ms)          0 458408.08 0.0100
ProjectDCluster   broker-a                1     10.0.0.5:10911      V4_9_2                   0.00(0,0ms)         0.00(0,0ms)          0 458408.08 0.0100
ProjectDCluster   broker-b                0     10.0.0.4:10911       V4_9_2                   0.00(0,0ms)         0.00(0,0ms)          0 458408.08 0.0100
ProjectDCluster   broker-b                1     10.0.0.6:10911      V4_9_2                   0.00(0,0ms)         0.00(0,0ms)          0 458408.08 0.0100

部署MQ控制台

#下载相关包进行解压,github上没找到对应资源,可以看看这里  https://download.csdn.net/download/linxi7/85345827
unzip rocketmq-console.zip
#修改application.properties配置中的namesrv地址,或者不修改,命令行启动的时候指定也可
cat /data/rocketmq-console/src/main/resources/application.properties
rocketmq.config.namesrvAddr="10.0.0.1:9876"
#安装mvn命令
#下载对应的mvn包,然后解压放到你想要的目录(我这里是/usr/local/lib)
ls /usr/local/lib
jdk1.8.0_321  maven-3.5.4
#配置环境变量
cat >> /etc/profile <EOF
export PATH JAVA_HOME CLASSPATH
MAVEN_HOME=/usr/local/lib/maven-3.5.4
export PATH=$MAVEN_HOME/bin:$PATH
EOF
source /etc/profile
#进入rocketmq console目录,进行编译
cd  rocketmq-console
ls
mvn clean package -Dmaven.test.skip=true
#编译成功后,进入 target 文件夹,能看到一个 springboot jar 包 ,可以将 jar 包移动到 /usr/local/ 下(个人习惯)
ls
checkstyle-cachefile    generated-sources              rocketmq-console-ng-1.0.1.jar.original
checkstyle-checker.xml  maven-archiver                 rocketmq-console-ng-1.0.1-sources.jar
checkstyle-result.xml   maven-status
classes                 rocketmq-console-ng-1.0.1.jar
#启动控制台
nohup java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=127.0.0.1:9876 &
#查看8080端口是否拉起
netstat -lnpt |grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      40654/java

登录对应IP的8080端口,访问控制台,验证是否成功

相关几个概念

Name Server
NameServer可以看作是RocketMQ的注册中心,它管理两部分数据:集群的Topic-Queue的路由配置;Broker的实时配置信息。其它模块通过Nameserv提供的接口获取最新的Topic配置和路由信息。

Broker Server
Broker是RocketMQ的核心模块,负责接收并存储消息,同时提供Push/Pull接口来将消息发送给Consumer。Consumer可选择从Master或者Slave读取数据。多个主/从组成Broker集群,集群内的Master节点之间不做数据交互。Broker同时提供消息查询的功能,可以通过MessageID和MessageKey来查询消息。Borker会将自己的Topic配置信息实时同步到NameServer。

Topic
Topic用于将消息按主题做划分,Producer将消息发往指定的Topic,Consumer订阅该Topic就可以收到这条消息。Topic跟发送方和消费方都没有强关联关系,发送方可以同时往多个Topic投放消息,消费方也可以订阅多个Topic的消息。在RocketMQ中,Topic是一个上逻辑概念。消息存储不会按Topic分开。

Producer
消息生产者,位于用户的进程内,Producer通过NameServer获取所有Broker的路由信息,根据负载均衡策略选择将消息发到哪个Broker,然后调用Broker接口提交消息。

Consumer
消息消费者,位于用户进程内。Consumer通过NameServer获取所有broker的路由信息后,向Broker发送Pull请求来获取消息数据。Consumer可以以两种模式启动,广播(Broadcast)和集群(Cluster),广播模式下,一条消息会发送给所有Consumer,集群模式下消息只会发送给一个Consumer。

Queue
Topic和Queue是1对多的关系,一个Topic下可以包含多个Queue,主要用于负载均衡。发送消息时,用户只指定Topic,Producer会根据Topic的路由信息选择具体发到哪个Queue上。Consumer订阅消息时,会根据负载均衡策略决定订阅哪些Queue的消息。

Offset
RocketMQ在存储消息时会为每个Topic下的每个Queue生成一个消息的索引文件,每个Queue都对应一个Offset记录当前Queue中消息条数。

rocketmq 集群部署相关推荐

  1. RocketMQ集群部署方案(DLedger)

    RocketMQ集群部署方案(DLedger) 一.基本配置 1.准备三台虚拟机,root密码 root ;IP地址: 192.168.xxx.xxx worker1 192.168.xxx.xxx ...

  2. RocketMQ集群部署记录

    RocketMQ集群部署记录 #引用    https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 Apache Ro ...

  3. Centos6下RocketMQ集群部署记录

    一.RocketMQ基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...

  4. (三)RocketMQ集群部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...

  5. 从生产故障解锁RocketMQ集群部署的最佳实践

    1.故障描述 RocketMQ 集群采取的部署架构为2主2从,其部署架构如下图所示: 其部署架构中一个非常明显的特点是一台物理机上分别部署了 nameserver,broker 两个进程. 其中一台机 ...

  6. 从年末生产故障解锁RocketMQ集群部署的最佳实践

    [CSDN 编者按]因为一次生产事故,导致年终奖泡汤!在一番问题查找之后,终于找到了罪魁祸首!MQ集群中某一台物理机内存引发的故障,从而导致系统异常重启,而更关键的问题是,为什么一台Broker由于内 ...

  7. RocketMQ集群部署结构

    RocketMQ四大核心组成部分:NameServer.Broker.Producer以及Consumer四部分: 各组件通讯 Broker与Name Server集群中的所有节点建立长连接: Pro ...

  8. RocketMQ集群部署

    RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛.但是它是如何进行部署的呢,以及它的高可用是如何实现的呢.那么就由我来为大家讲解一哈RocketMQ是如 ...

  9. Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper

    部署架构 部署计划 MySQL服务部署 架构 规划 部署pxc集群 部署MySQL主从架构 部署mycat集群 创建表以及测试 部署HAProxy redis集群部署 redis集群采用3主3从的架构 ...

最新文章

  1. 使用Consul做服务发现的若干姿势
  2. JavaBean技术
  3. stm32之spi之NSS管脚信号
  4. Spring batch 2.0例子(lineMapper)
  5. .cpp 编译成.a或是 .so
  6. 分布式缓存——一致性哈希算法
  7. resteasy_Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务– Eclipse和Maven项目
  8. mysql5.7设置不区分大小写
  9. hive on tez集成完整采坑指南(含tez-ui及安全环境)
  10. silverlight异常
  11. 非平衡电桥电阻计算_微安表内阻值对热敏电阻温度计设计的影响
  12. ros重置后地址_初始化ROS路由器后,怎么使用Setup 指令配置IP地址?
  13. Android 10.0 去掉SystemUI中的电池图标显示
  14. hangfire mysql_.NET之Hangfire快速入门和使用
  15. 家用洗地扫地机一体机哪家好、家用小型洗地机推荐
  16. 计算机无法安装蓝牙驱动,电脑没有蓝牙驱动怎么安装具体方法
  17. 函数最值题目及答案_高一函数题目及答案解析
  18. 牛客刷题——Python入门总结
  19. linux centos7和xshell在黑暗中摸索记
  20. iphone5打开移动4G

热门文章

  1. 百度地图改变/替换marker图标
  2. 西门子阀门定位器单双作用执行机构的区分
  3. Java使用word模板导出word
  4. 使用python根据身高体重计算BMI指数
  5. 2015最新iOS QQ登录(64位)
  6. 软件验收测试包括哪些内容,第三方软件检测机构怎么选择?
  7. Android.mk 打印变量信息
  8. 解决电脑系统文件夹图标为黑色方块
  9. 在进行天猫商品数据爬虫时遇到selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe'
  10. 腾讯专家工程师杨志华:混合云之争的开端与终途