首页 > 其他分享 >Rocketmq双主双从部署

Rocketmq双主双从部署

时间:2024-07-11 13:59:15浏览次数:8  
标签:部署 4.9 Broker broker 双主双 mq Rocketmq home rocketmq

一、概要

RocketMQ 是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。

整个流程如下:

1)启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来完成注册,相当于一个路由控制中心。
2)Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。
3)收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic。
4)Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。
5)Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息。

总结:消息生产者生产消息前,会先向NameServer中获取Broker,这就要求Broker需先注册到NameServer中,producer获取到Broker以后,就可以生产消息并交由Broker存储,Broker内部调用模块MessageQueue存储消息,而MessageQueue又会被逻辑划分为一个一个的topic,之后,消息消费者从NameServer中获取Broker,获取到Broker后,取出消息进行消费。

二、配置机器环境

 准备3台虚拟机,ip地址如下所示,进行添加本地hosts解析。

193.168.30.14 mq-1
193.168.30.25 mq-2
193.168.30.36 mq-3

三、部署JDK

1、安装JDK

每台上传JDK8安装包并解压到指定目录

tar -zxvf jdk-8u411-linux-x64.tar.gz -C /home/

2、配置JDK环境变量

 编辑/etc/profile文件,添加JDK的环境变量。

export JAVA_HOME=/home/jdk1.8.0_411
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

3、使环境变量生效

source /etc/profile

4、检查JDK版本

 java -version

四、部署Rocketmq

1、每台上传rocketmq的安装包解压并改名

unzip softs/rocketmq-all-4.9.8-bin-release.zip

mv rocketmq-all-4.9.8-bin-release/ rocketmq-4.9.8 

 2、配置rocketmq环境变量

 编辑/etc/profile文件,添加rocketmq的环境变量。

export ROCKETMQ_HOME=/home/rocketmq-4.9.8
export NAMESRV_ADDR='mq1nginx1:9876;mq2nginx2:9876;mq-3:9876'

3、使环境变量生效

source /etc/profile

 rocketmq根据配置文件有几种模式

2m-2s-async: 2主2从异步刷盘(吞吐量较大,但是消息可能丢失)
2m-2s-sync:2主2从同步刷盘(吞吐量会下降,但是消息更安全)
2m-noslave:2主无从(单点故障),然后还可以直接配置broker.conf,进行单点环境配置
而dleger就是用来实现主从切换的。集群中的节点会基于Raft协议随机选举出一个leader,其他的就都是follower。通常正式环境会采用这种方式来搭建集群。


这里我们选择2m-2s-async

4、节点分配情况

主机名nemaeServer节点部署broker节点部署
mq-1nemaeServerbroker-a, broker-b-s
mq-2nemaeServerbroker-b,broker-a-s
mq-3nemaeServer

5、配置第一组broker-a

mq-1配置borker-a的master节点,配置2m-2s-async/broker-a.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
brokerIP1=mq-1
brokerIP2=mq-1
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=mq-1:9876;mq-2:9876;mq-3: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-4.9.8/data
#commitLog 存储路径
storePathCommitLog=/home/rocketmq-4.9.8/data/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq-4.9.8/data/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq-4.9.8/data/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq-4.9.8/data/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq-4.9.8/data/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

mq-2配置borker-a的salve节点,配置2m-2s-async/broker-a-s.properties

只需要修改brokerId和brokerRole就行

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
brokerIP1=mq-2
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=100
#nameServer地址,分号分割
namesrvAddr=mq-1:9876;mq-2:9876;mq-3: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-4.9.8/dataslave
#commitLog 存储路径
storePathCommitLog=/home/rocketmq-4.9.8/dataslave/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq-4.9.8/dataslave/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq-4.9.8/dataslave/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq-4.9.8/dataslave/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq-4.9.8/dataslave/storeSlave/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

6、配置第二组Broker-b

mq-2配置broker-b的master节点,配置2m-2s-async/broker-b.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
brokerIP1=mq-2
brokerIP2=mq-2
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=mq-1:9876;mq-2:9876;mq-3: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-4.9.8/data
#commitLog 存储路径
storePathCommitLog=/home/rocketmq-4.9.8/data/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq-4.9.8/data/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq-4.9.8/data/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq-4.9.8/data/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq-4.9.8/data/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 

mq-1配置broker-b的的salve节点,配置2m-2s-async/broker-b-s.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
brokerIP1=mq-1
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=100
#nameServer地址,分号分割
namesrvAddr=mq-1:9876;mq-2:9876;mq-3: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-4.9.8/dataslave
#commitLog 存储路径
storePathCommitLog=/home/rocketmq-4.9.8/dataslave/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq-4.9.8/dataslave/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq-4.9.8/dataslave/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq-4.9.8/dataslave/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq-4.9.8/dataslave/storeSlave/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 

其他注意
(1)、同一机器上两个实例的store目录不能相同,否则会报错Lock failed,MQalready started。
(2)、同一机器上两个实例的listenPort也不能相同,否则会报端口占用的错。
(3)、nameserver不需要进行配置,直接启动就行。这也看出nameserver是无状态的。

 7、启动RocketMQ

(1)、启动nameServer

 调整修改jvm内存,修改三个节点上的bin/runserver.sh(可选项,根据自己实际情况调整)

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

 三个节点上启动nameServer

nohup bin/mqadminsrv &

 查看进程

 ps -ef | grep rocket| grep -v grep

 (2)、启动broker

 注意事项
启动broker是使用的mqbroker指令,只是注意启动broker时需要通过-c指定对应的配置文件。

分别在mq-1和mq-2上面启动broker-a和broker-b
启动顺序是:
broker-a
broker-a-s
broker-b
broker-b-s

nohup ./mqbroker -c ../conf/2m-2s-async/broker-a.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-a-s.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-b.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-b-s.properties &

 查看进程

ps -ef | grep rocket| grep -v grep

8、命令行快速验证

在RocketMQ的安装包中,提供了一个tools.sh工具可以用来在命令行快速验证RocketMQ服务。

配置一个环境变量NAMESRV_ADDR,指定NameServer地址

export NAMESRV_ADDR='mq-1:9876;mq-2:9876;mq-3:9876'

发送消息:默认会发1000条消息

./bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

 接收消息

./bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

 五、搭建管理控制台

 地址:https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0

 下载下来后,进入其中的rocket-console目录,使用maven进行编译

mvn clean package -Dmaven.test.skip=true

编译完成后,获取target下的jar包,就可以直接执行。但是这个时候要注意,在这个项目的application.properties中需要指定nameserver的地址。默认这个属性是空的,可以启动时指定。

nohup java -jar rocketmq-console-ng-1.0.1.jar --rocketmq.config.namesrvAddr=193.168.30.14:9876;193.168.30.25:9876;193.168.30.36:9876 &

标签:部署,4.9,Broker,broker,双主双,mq,Rocketmq,home,rocketmq
From: https://blog.csdn.net/weixin_48452961/article/details/140300271

相关文章

  • 本地部署,Colorizer: 让黑白图像重现色彩的奇迹
    目录引言什么是Colorizer​编辑​编辑Colorizer的特点工作原理应用场景本地部署本地运行实验与结果结语Tip:引言自摄影术发明以来,黑白图像一直是记录历史和艺术创作的重要手段。然而,黑白图像虽然具备其独特的美感,但也失去了色彩信息,使观众难以全面感知图像中......
  • C#Worker Service征服Linux:从零到部署英雄的跨界之旅
    ......
  • 基于javaweb jsp ssm汽车服务商城系统设计与实现+vue录像(源码+lw+部署文档+讲解等)
    前言......
  • 在linux服务器上搭建slurm集群部署
    在Linux服务器上搭建Slurm集群部署是一个涉及多个步骤和组件配置的过程。Slurm是一个面向Linux和Unix的开源作业调度程序,广泛用于高性能计算环境。一、环境准备选择服务器和硬件设备:选择合适的服务器和硬件设备,建议选用多核心、大内存、高速硬盘的服务器以满足高性能计算的需求......
  • Kubernetes高可用集群二进制离线部署(Runtime Docker)
    Kubernetes高可用集群二进制部署(RuntimeDocker)Kubernetes(简称为:k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了资源调度、部署管理、服务......
  • windows系统服务配置详解,以及开发好的windows服务怎么部署上去
    一、配置服务1、WIN+R打开运行窗口,输入cmd2、输入sccreateServerNamebinpath="E:\myTest.exe"等号后有空格sccreateServerNamebinpath="E:\myTest.exe"如此这般,就讲ServerName加入到了服务当中3、启动服务scstartServerNamescstartServerName4、WIN+R......
  • 基于Python实现校园影院平台系统[源码+LW+部署讲解视频]
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • Docker:docker部署Minio服务并创建访问密钥
    前言Minio是一个基于ApacheLicensev2.0开源协议的对象存储服务,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等;最重......
  • Docker入门(三):nodejs后端服务部署
    本文主要内容是通过dockerfile创建镜像,并通过kubernets(简称k8s)来启动集群服务。最后你会得到一个简单的nodejs提供的api服务。写在前面需要安装的有node(如何安装?),kubectl(如何安装?)一,创建nodejs应用本文主要是用于实践k8s,所以nodejs项目写的非常简单,除了package*.json之外只......
  • docker部署若依开源java项目微服务版
    查看容器IDdockerps 后面以进入mysql容器为例进入容器sudodockerexec-it27e/bin/bash 进入成功,由于是mgsql容器,我们可以输入命令操作看一下mysql文件夹,如下看到了我们建的数据库:退出容器回到centosexit......