RocketMq的集群的搭建(2主2从异步复制集群模式)

news2024/11/25 12:33:55

一 RocketMq集群搭建

1.1 说明

本案例用2m-2s-async的方式搭建集群。

实际项目中,为了达到高可用,一般会使用dleger。

https://blog.csdn.net/wssc63262/article/details/126003507

1.2 集群规划说明

集群规划说明:

nameserver是一个轻量级的注册中心,broker把自己的信息注册到nameserver上,而且nameserver是无状态的,直接启动即可。3台nameserver之间不需要通信,而是被请求方来关联3台nameserver的地址。

机器

角色

配置

192.168.152.141

Nameserver 9876

192.168.152.180

Nameserver 9877

Broker-a-m,   broker-b-s

192.168.152.140

Nameserver 9878

Broker-b-m,   broker-a-s

1.3 常见集群模式

在rocketmq的config目录下可以看到rocketmq建议的各种配置方式:

2m-2s-async: 2主2从异步刷盘(吞吐量较大,但是消息可能丢失),

2m-2s-sync:2主2从同步刷盘(吞吐量会下降,但是消息更安全),

2m-noslave:2主无从(单点故障),然后还可以直接配置broker.conf,进行单点环境配置。

而dleger就是用来实现主从切换的。集群中的节点会基于Raft协议随机选举出一个leader,其他的就都是follower。通常正式环境都会采用这种方式来搭建集群。

二 RocketMq机器搭建

2.1 上传jar包并解压

2.1.1 节点141

解压:

[root@localhost export]# unzip rocketmq-all-4.9.6-bin-release.zip 

 2.1.2 节点180

解压:

[root@localhost export]# unzip rocketmq-all-4.9.6-bin-release.zip 

 2.1.3 节点140

解压:

[root@localhost export]# unzip rocketmq-all-4.9.6-bin-release.zip 

 

2.2 修改占用内存配置

2.2.1 节点141,180,140分别做如下操作

使用vim命令打开 bin/runserver.sh 文件。现将这些值修改为如下:

[root@localhost bin]# vi runserver.sh

使用vim命令打开  bin/runbroker.sh文件。现将这些值修改为如下:

 

2.4 nameserver的配置

nameserver是无状态的,直接启动即可。3台nameserver之间不需要通信,而是被请求方来关联3台nameserver的地址。

无需配置。

2.5 broker的配置

2.5.1 节点180

在节点180上先配置borker-a的master节点。先配置2m-2s-async/broker-a.properties

进入目录:  /root/export/rocketmq-all-4.9.6-bin-release/conf/2m-2s-async

第一组配置:vim broker-a.properties

修改配置文件: vim broker-a.properties

#所属集群名字,名字一样的节点就在同一个集群内

brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。

brokerName=broker-a-m

#brokerid,0就表示是Master,>0的都是表示 Slave

brokerId=0

#nameServer地址,分号分割

namesrvAddr=192.168.152.141:9876;192.168.152.180:9877;192.168.152.140:9878

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=11912

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/root/export/master-store

#commitLog 存储路径

storePathCommitLog=/root/export/master-store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/root/export/master-store/consumequeue

#消息索引存储路径

storePathIndex=/root/export/master-store/index

#checkpoint 文件存储路径

storeCheckpoint=/root/export/master-store/checkpoint

#abort 文件存储路径

abortFile=/root/export/master-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

2.在节点180上先配置borker-b的slaver节点。先配置2m-2s-async/broker-b-s.properties

修改配置文件  vim broker-b-s.properties

#所属集群名字,名字一样的节点就在同一个集群内

brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。

brokerName=broker-b-s

#brokerid,0就表示是Master,>0的都是表示 Slave

brokerId=1

#nameServer地址,分号分割

namesrvAddr=192.168.152.141:9876;192.168.152.180:9877;192.168.152.140:9878

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=21012

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/root/export/slaver-store

#commitLog 存储路径

storePathCommitLog=/root/export/slaver-store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/root/export/slaver-store/consumequeue

#消息索引存储路径

storePathIndex=/root/export/slaver-store/index

#checkpoint 文件存储路径

storeCheckpoint=/root/export/slaver-store/checkpoint

#abort 文件存储路径

abortFile=/root/export/slaver-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

2.5.2 节点140

在节点140上先配置borker-b的master节点。先配置2m-2s-async/broker-b.properties

进入目录:  /root/export/rocketmq-all-4.9.6-bin-release/conf/2m-2s-async

第2组配置:vim broker-b.properties

修改配置文件: vim broker-b.properties

#所属集群名字,名字一样的节点就在同一个集群内

brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。

brokerName=broker-b-m

#brokerid,0就表示是Master,>0的都是表示 Slave

brokerId=0

#nameServer地址,分号分割

namesrvAddr=192.168.152.141:9876;192.168.152.180:9877;192.168.152.140:9878

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=20913

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/root/export/master-store

#commitLog 存储路径

storePathCommitLog=/root/export/master-store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/root/export/master-store/consumequeue

#消息索引存储路径

storePathIndex=/root/export/master-store/index

#checkpoint 文件存储路径

storeCheckpoint=/root/export/master-store/checkpoint

#abort 文件存储路径

abortFile=/root/export/master-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

2.在节点140上先配置borker-a的slaver节点。先配置2m-2s-async/broker-a-s.properties

修改配置文件  vim broker-a-s.properties

#所属集群名字,名字一样的节点就在同一个集群内

brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。

brokerName=broker-a-s

#brokerid,0就表示是Master,>0的都是表示 Slave

brokerId=1

#nameServer地址,分号分割

namesrvAddr=192.168.152.141:9876;192.168.152.180:9877;192.168.152.140:9878

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=21013

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/root/export/slaver-store

#commitLog 存储路径

storePathCommitLog=/root/export/slaver-store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/root/export/slaver-store/consumequeue

#消息索引存储路径

storePathIndex=/root/export/slaver-store/index

#checkpoint 文件存储路径

storeCheckpoint=/root/export/slaver-store/checkpoint

#abort 文件存储路径

abortFile=/root/export/slaver-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

2.6 创建制定的目录文件

2.6.1 节点180

 mkdir -p /root/export/master-store/{commitlog,consumequeue,index}

 mkdir -p /root/export/slaver-store/{commitlog,consumequeue,index}

2.6.2 节点140

 mkdir -p /root/export/master-store/{commitlog,consumequeue,index}

 mkdir -p /root/export/slaver-store/{commitlog,consumequeue,index}

2.7 修改端口

2.7.1 节点180上

由于180和140上的nameserver和broker在同一台机器,这里将这两台的nameserver修改端口分别为9877,和9878。

1.进入目录:/root/export/rocketmq-all-4.9.6-bin-release/conf

新建namesrv.properties 文件

[root@localhost conf]# pwd

/root/export/rocketmq-all-4.9.6-bin-release/conf

[root@localhost conf]# touch namesrv.properties

2.配置端口

listenPort=9877

2.7.2 节点140上

由于180和140上的nameserver和broker在同一台机器,这里将这两台的nameserver修改端口分别为9877,和9878。

1.进入目录:/root/export/rocketmq-all-4.9.6-bin-release/conf

新建namesrv.properties 文件

[root@localhost conf]# pwd

/root/export/rocketmq-all-4.9.6-bin-release/conf

[root@localhost conf]# touch namesrv.properties

2.配置端口

listenPort=9878

2.8 启动nameserver服务

2.8.1 节点141上

第一个nameserver节点

进入到bin目录下: /root/export/rocketmq-all-4.9.6-bin-release/bin

输入命令:

nohup sh mqnamesrv &

查看日志:tail -f ~/logs/rocketmqlogs/namesrv.log

2.8.2 节点180上

第一个nameserver节点

进入到bin目录下: /root/export/rocketmq-all-4.9.6-bin-release/bin

输入命令:

nohup sh mqnamesrv -c /root/export/rocketmq-all-4.9.6-bin-release/conf/namesrv.properties &

日志输出:tail  -f  ~/logs/rocketmqlogs/namesrv.log

 

2.8.3 节点140上

第一个nameserver节点

进入到bin目录下: /root/export/rocketmq-all-4.9.6-bin-release/bin

输入命令:

nohup sh mqnamesrv -c /root/export/rocketmq-all-4.9.6-bin-release/conf/namesrv.properties &

日志输出:tail  -f  ~/logs/rocketmqlogs/namesrv.log

2.9 启动broker并查看broker服务状态

2.9.1 节点141上

141节点只作为nameserver角色,没有broker,只能查看nameserver的信息。

注意141节点上默认防火墙是打开着的需要关闭,输入命令:

systemctl  stop   firewalld

查看

2.9.2 节点180上

启动命令:

nohup sh mqbroker -c /root/export/rocketmq-all-4.9.6-bin-release/conf/2m-2s-async/broker-a.properties &

nohup sh mqbroker -c /root/export/rocketmq-all-4.9.6-bin-release/conf/2m-2s-async/broker-b-s.properties &

root@localhost bin]# tail -f ~/logs/rocketmqlogs/broker.log

2.9.3 节点140上

启动命令:

nohup sh mqbroker -c /root/export/rocketmq-all-4.9.6-bin-release/conf/2m-2s-async/broker-b.properties &

nohup sh mqbroker -c /root/export/rocketmq-all-4.9.6-bin-release/conf/2m-2s-async/broker-a-s.properties &

root@localhost bin]# tail -f ~/logs/rocketmqlogs/broker.log

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/613112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习——集成学习(装袋法Bagging、提升法Boosting、梯度提升决策树GBDT、随机森林RF)

集成学习 集成学习通过构建并结合多个学习器来完成学习任务 集成方法是用多种学习方法的组合来获取比原方法更优的结果 使用于组合的算法是弱学习算法 即分类正确率仅比随机猜测略高的学习算法 但是组合之后的效果仍可能高于强学习算法 即集成之后的算法准确率和效率都很高…

# 车载软件架构 —— 闲聊几句AUTOSAR OS(三)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标准。到最…

程序员从0到收获心仪offer,我靠训练营实现了180度逆袭!

我相信,在未来的职场中,我也能通过这段时间养成的学习习惯和生活习惯让自己一步步成为更好的自己,以自己为荣 我在大学里主修计算机科学与技术,一个普通的院校,一个算是常见的专业,我知道我的学历和一些其他…

Tomcat的部署(贼详细)

目录 一、Tomcat服务器简介 1、Tomcat服务器 2、Tomcat三大核心组件 3、 Java Servlet 4、JSP全称Java Server Pages 5、 Tomcat 功能组件结构 6、 Container 结构分析 7、Tomcat 请求过程 二:Tomcat部署与安装 1.关闭防火墙,上传所需软件包 2.安…

前端、后端工程师学习路线

学习的平台推荐 视频平台: 慕课:http://www.imooc.com/ 腾讯课堂:https://ke.qq.com/ 教程平台 菜鸟:https://www.runoob.com/ W3:https://www.w3school.com.cn/ yibai:https://www.yiibai.com/ 前端学习路…

c++—STL(六大组件)

一、STL概述 1. STL概述 (1)STL定义:STL(standard template library),标准模板库,是一个高效的c程序库,重在提高了代码的复用性;主要包含了常用的数据结构和基本算法&am…

一分钟学一个 Linux 命令 - mkdir 和 touch

前言 大家好,我是god23bin。欢迎来到《一分钟学一个 Linux 命令》系列,今天需要你花两分钟时间来学习下,因为今天要讲的是两个命令,mkdir 和 touch 命令。前一个命令是操作目录的,后一个命令是操作文件的。 建议学完手…

蓝桥杯STC15F2K60S2单片机 CCP/PCA/PWM模块的学习与使用

有道是“一花独放不是春,万紫千红春满园” 我们不能只满足于 眼前所谓的 “够用、能用” 的少量知识,而不去深入学习探究,进而不慎封锁了自己的见识 和 更多 创新开发上的可能性。 曾经仅满足于学习了蓝桥杯单片机的三个外部晶振 定时器&am…

日撸java三百行day58-59

文章目录 说明Day58 符号型数据的 NB 算法1.基础理论知识1.1 条件概率1.2 独立性假设1.3 Laplacian 平滑 2. 符号型数据的预测算法跟踪2.1 testNominal()方法2.1.1 NaiveBayes 构造函数2.1.2 calculateClassDistribution()2.1.3 calculateConditionalProbabilities()方法2.1.4 …

D*算法详解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循环解决)【编辑中】

所需先验知识(没有先验知识可能会有大碍,了解的话会对D*的理解有帮助):A*算法/ Dijkstra算法 何为D*算法 Dijkstra算法是无启发的寻找图中两节点的最短连接路径的算法,A*算法则是在Dijkstra算法的基础上加入了启发函数…

【linux下一次复制cp多个文件】

linux下一次复制cp多个文件 linux cp 参数说明 -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。 -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。 -f&…

使用可上网的服务器作为网关,实现另一台服务器上网

文章目录 物理条件方法一:不使用交换机方法二:使用交换机 配置步骤查看网络状态设置静态IP将服务器A设置成网关重新启动各服务器网卡设置主机名 参考资料 本文的目标是利用一台可以上网的服务器作为网关,使在同一局域网中的所有服务器都可以上…

如何安装多个node版本(不使用nvm)

1、选择node安装的路径 例如:D:\Program Files\nodejs 2、下载要安装的对应版本的zip格式的node安装包 例如:下载16.14.2 和 13.14.0 两个版本的zip格式的node安装包,node版本下载地址https://nodejs.org/dist/ 3、安装包解压到对应文件夹…

遥感云大数据在灾害、水体与湿地领域典型

近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

路径规划算法:基于JAYA优化的路径规划算法- 附代码

路径规划算法:基于JAYA优化的路径规划算法- 附代码 文章目录 路径规划算法:基于JAYA优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法JAYA…

深入理解深度学习——正则化(Regularization):对抗训练(Adversarial Training)

分类目录:《自然语言处理从入门到应用》总目录 在许多情况下,神经网络在独立同分布的测试集上进行评估已经达到了人类表现。因此,我们自然要怀疑这些模型在这些任务上是否获得了真正的人类层次的理解。为了探索网络对底层任务的理解层次&…

如何理解并使用 park 与 unpark

tip: 作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 文章目录 一、基本介绍二、使用例子三、使用注意事项 一、基本介绍 park和unpark是Java中的两个线程同步…

高性能软件负载OpenResty介绍和安装

目录 1 OpenResty介绍1.1 Nginx 的流程定义1.1.1 流程详解1.1.2 OpenResty处理流程 2 Openresty安装2.1 yum安装2.1.1 添加OpenResty仓库2.1.2 安装OpenResty 2.2 源代码编译安装2.2.1 安装编译环境2.2.2下载最新版源码2.2.3下载缓存插件2.2.4 编译OpenResty2.2.5 安装OpenRest…

《设计模式》之状态模式

文章目录 1、定义2、动机3、类结构4、优点5、总结6、代码实现(C) 1、定义 允许一个对象在其内部改变时改变它的行为,从而使对象看起来改变了其行为。 2、动机 某些对象的状态如果改变,其行为也会随之而发生改变。比如文档的只读状态和读写状态的行为可…

【MySQL】- 04 MVCC实现原理

MVCC的实现原理 隐式字段undo日志Read View(读视图)整体流程例子 MVCC的目的就是多版本并发控制,在数据库中的实现,就是为了解决读写冲突,它的实现原理主要是依赖记录中的 3个隐式字段,undo日志 ,Read View 来实现的。…