rocketmq 集群部署
架构图
部署环境
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 集群部署相关推荐
- RocketMQ集群部署方案(DLedger)
RocketMQ集群部署方案(DLedger) 一.基本配置 1.准备三台虚拟机,root密码 root ;IP地址: 192.168.xxx.xxx worker1 192.168.xxx.xxx ...
- RocketMQ集群部署记录
RocketMQ集群部署记录 #引用 https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 Apache Ro ...
- Centos6下RocketMQ集群部署记录
一.RocketMQ基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...
- (三)RocketMQ集群部署实践
2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...
- 从生产故障解锁RocketMQ集群部署的最佳实践
1.故障描述 RocketMQ 集群采取的部署架构为2主2从,其部署架构如下图所示: 其部署架构中一个非常明显的特点是一台物理机上分别部署了 nameserver,broker 两个进程. 其中一台机 ...
- 从年末生产故障解锁RocketMQ集群部署的最佳实践
[CSDN 编者按]因为一次生产事故,导致年终奖泡汤!在一番问题查找之后,终于找到了罪魁祸首!MQ集群中某一台物理机内存引发的故障,从而导致系统异常重启,而更关键的问题是,为什么一台Broker由于内 ...
- RocketMQ集群部署结构
RocketMQ四大核心组成部分:NameServer.Broker.Producer以及Consumer四部分: 各组件通讯 Broker与Name Server集群中的所有节点建立长连接: Pro ...
- RocketMQ集群部署
RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛.但是它是如何进行部署的呢,以及它的高可用是如何实现的呢.那么就由我来为大家讲解一哈RocketMQ是如 ...
- Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper
部署架构 部署计划 MySQL服务部署 架构 规划 部署pxc集群 部署MySQL主从架构 部署mycat集群 创建表以及测试 部署HAProxy redis集群部署 redis集群采用3主3从的架构 ...
最新文章
- 使用Consul做服务发现的若干姿势
- JavaBean技术
- stm32之spi之NSS管脚信号
- Spring batch 2.0例子(lineMapper)
- .cpp 编译成.a或是 .so
- 分布式缓存——一致性哈希算法
- resteasy_Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务– Eclipse和Maven项目
- mysql5.7设置不区分大小写
- hive on tez集成完整采坑指南(含tez-ui及安全环境)
- silverlight异常
- 非平衡电桥电阻计算_微安表内阻值对热敏电阻温度计设计的影响
- ros重置后地址_初始化ROS路由器后,怎么使用Setup 指令配置IP地址?
- Android 10.0 去掉SystemUI中的电池图标显示
- hangfire mysql_.NET之Hangfire快速入门和使用
- 家用洗地扫地机一体机哪家好、家用小型洗地机推荐
- 计算机无法安装蓝牙驱动,电脑没有蓝牙驱动怎么安装具体方法
- 函数最值题目及答案_高一函数题目及答案解析
- 牛客刷题——Python入门总结
- linux centos7和xshell在黑暗中摸索记
- iphone5打开移动4G
热门文章
- 百度地图改变/替换marker图标
- 西门子阀门定位器单双作用执行机构的区分
- Java使用word模板导出word
- 使用python根据身高体重计算BMI指数
- 2015最新iOS QQ登录(64位)
- 软件验收测试包括哪些内容,第三方软件检测机构怎么选择?
- Android.mk 打印变量信息
- 解决电脑系统文件夹图标为黑色方块
- 在进行天猫商品数据爬虫时遇到selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe'
- 腾讯专家工程师杨志华:混合云之争的开端与终途