【无标题】rocket

news2024/12/28 18:44:17

rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客

集群架构概念 

在部署的时候首先要将nameserver启动起来,之后就是将broker启动起来,broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic,因为发消息的逻辑和收消息的逻辑都是要基于topic来实现的。

有了topic才能将消息发到某个topic上面,也就是某个主题上面,这个topic是自己可以去建立的。这个topic就是用来区分消息的。

现在建立了topic1,那么生产者就可以把消息往t1上面发。topic是建立在nameserver上面,它其实是逻辑上面的概念。topic和broker在nameserver上面会形成映射的关系。具体物理的保存是保存在broker上面。也就是具体的topic和broker映射关系是保存在nameserver上面的,具体topic对应的消息保存在broker上面。(创建某个topic那么就在broker上面创建出来了)

生产者启动了就要随机选择一个nameserver然后建立长连接。长连接的目的就是定期的获取topic信息。生产者就可以往topic对应的broker上发送消息。

生产者发送完消息了(或者先启动消费者也行),消费者这边也是随机选择nameserver建立长连接,或得topic的信息,它要去连接到broker上面,从broker上面不断的去拉取数据消息。

 

RocketMQ集群模式 

2m-2s表示两个master两个slave,async是异步的刷盘方式,sync是同步的刷盘方式。

为了追求更好的性能, RocketMQ 的最佳实践⽅式都是在集群模式下完成。 RocketMQ官⽅提供了三种集群搭建⽅式。
22从异步通信⽅式
使⽤异步⽅式进⾏主从之间的数据复制,吞吐量⼤,但可能会丢消息。 使⽤ conf/2m-2s-async ⽂件夹内的配置⽂件做集群配置。
22从同步通信⽅式
使⽤同步⽅式进⾏主从之间的数据复制,保证消息安全投递,不会丢失,但影响吞吐量使⽤ conf/2m-2s-sync ⽂件夹内的配置⽂件做集群配置。
2主⽆从⽅式
会存在单点故障,且读的性能没有前两种⽅式好。 使⽤ conf/2m-noslave ⽂件夹内的配置⽂件做集群配置。
Dledger⾼可⽤集群
上述三种官⽅提供的集群没办法实现⾼可⽤,即在 master 节点挂掉后, slave 节点没办法⾃动被选举为新的master ,⽽需要⼈⼯实现。 RocketMQ在 4.5 版本之后引⼊了第三⽅的 Dleger ⾼可⽤集群。
[root@localhost 2m-2s-sync]# ls -l
total 16
-rw-r--r--. 1 root root 928 Feb 22  2024 broker-a.properties
-rw-r--r--. 1 root root 922 Feb 22  2024 broker-a-s.properties
-rw-r--r--. 1 root root 928 Feb 22  2024 broker-b.properties
-rw-r--r--. 1 root root 922 Feb 22  2024 broker-b-s.properties


broker-a.properties  broker-b.properties  描述的是两个master
broker-a-s.properties  broker-b-s.properties  描述的是两个master对应的从节点


两主两从之间使用的是异步刷盘的方式

 

 

防火墙配置(两台机器都要执行)


可以开放端口,此处本地实现,简单粗暴点儿,直接关闭防火墙;
#检查状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#禁止防火墙开机启动
systemctl disable firewalld

                        
 

 

启动两台nameserver

服务器1:192.168.136.66    broker-a master ,broker-b-s slave)  nameserver 
                                                Master1,Slave2

服务器2:192.168.136.67    broker-bmaster,broker-a-sslave)  nameserver                      Master2,Slave1

启动 RocketMQ 服务需要先启动 NameServer 。 在bin ⽬录内使⽤静默⽅式启动。
nameserver 是⼀个轻量级的注册中⼼, broker 把⾃⼰的信息注册到 nameserver 上。 ⽽且,nameserver 是⽆状态的,直接启动即可。三台 nameserver 之间不需要通信, ⽽是被请求⽅来关联三台nameserver 的地址。
修改启动脚本

修改配置文件runserver.sh,主要是修改JVM参数:因为rocketmq默认配置的JVM参数太大,本地资源有限,所以就改小点儿;

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

在每台服务器的bin⽬录下执⾏如下命令:

cd /usr/local/rocketmq/bin
nohup sh mqnamesrv 2>&1 &

查看bin/nohup.out显示如下内容表示启动成功: 

[root@localhost bin]# cat nohup.out 
OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON

 

创建消息存储路径

因为同一台机器主从节点共用存储路径会冲突报错,这里我们分别创建两个目录避坑,我们在下一步中配置文件就用对应的路径就可以了;

#主节点使用目录
mkdir -p /usr/local/rocketmq/broker-a-master/store
mkdir -p /usr/local/rocketmq/broker-b-slave/store
 
#从节点使用目录
mkidr -p /usr/local/rocketmq/broker-a-slave/store
mkdir -p /usr/local/rocketmq/broker-b-master/store

 

 broker配置文件,配置文件修改如下:
配置文件位置在conf文件目录下。我们使用2m-2s-sync文件夹里面的配置,这个就是对应双主-双从-同步集群

下面配置文件可直接使用:
各配置文件主要区别有主要有以下几个点:brokerName、brokerId、listenPort、brokerRole、flushDiskType、存储路径;
 
首先对192.168.136.66机器上要部署的master1和slave2配置文件进行修改:

编辑broker-a.properties:

[root@localhost 2m-2s-sync]# cat broker-a.properties 
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样;主从节点一样,也就是这个值区分broker组的;
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave;同一个组中区分主从的标识,只能有一个主;
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.136.66:9876;192.168.136.67:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/broker-a-master/store
#commitLog存储路径
storePathCommitLog=/usr/local/rocketmq/broker-a-master/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/rocketmq/broker-a-master/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/broker-a-master/store/index
#checkpoint 文件存储路径
storeCheckPoint=/usr/local/rocketmq/broker-a-master/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/broker-a-master/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=ASYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

编辑broker-b-s.properties:

[root@localhost 2m-2s-sync]# cat broker-b-s.properties 
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.136.66:9876;192.168.136.67:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/broker-b-slave/store
#commitLog存储路径
storePathCommitLog=/usr/local/rocketmq/broker-b-slave/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/rocketmq/broker-b-slave/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/broker-b-slave/store/index
#checkpoint 文件存储路径
storeCheckPoint=/usr/local/rocketmq/broker-b-slave/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/broker-b-slave/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

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

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

相关文章

kubernetes架构

kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务Master节点: master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络…

数据处理与统计分析篇-day04-Numpy与Pandas-Series

一. Numpy详解 Numpy的ndarray的属性 Numpy简介 NumPy(Numerical Python)是Python数据分析必不可少的第三方库 NumPy的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型,使其具备了构造复杂数据类型…

如何用麦肯锡方法分析问题和解决问题?

一、什么是麦肯锡方法? 麦肯锡方法,也被称为麦肯锡7S模型,是全球知名咨询公司麦肯锡公司提出的一种管理方法。麦肯锡公司成立于1926年,是全球领先的管理咨询公司,其服务覆盖各个行业和领域,以高质量、高效率…

高精度加法和减法

高精度加法 在C/C中,我们经常会碰到限定数据范围的情况,我们先来看看常用的int和long long两种数据类型的范围吧。 C标准规定:int占一个机器字长。在32位系统中int占32位,即4个字节,所以int的范围是[-2的31次方&#…

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

C语言 ——— 编写函数,判断一个整数是否是回文整数

目录 题目要求 代码实现 题目要求 编写一个函数,用来判断一个整数是否是回文整数,如果是回文整数就返回 true ,如果不是就返回 false 举例说明: 输入:121 输出:true 输入:1321 输出&#xf…

【计算机网络】TCP的可靠传输机制、标记位以及编程结构

文章目录 一、TCP的可靠传输的工作原理1、确认应答机制和捎带应答机制2、超时重传3、快速重传4、滑动窗口5、流量控制 未 PSH6、拥塞控制7、延迟应答8、TCP 以段为单位发送数据 二、TCP 首部的六个标记位1、URG2、ACK3、PSH4、RST5、SYN6、FIN 三、TCP网络并发编程 一、TCP的可…

红外图像车辆与行人检测系统源码分享

红外图像车辆与行人检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

提升自闭症教育:探索寄宿学校的创新实践

在特殊教育领域中,自闭症儿童的教育与康复一直是一个复杂而重要的课题。随着教育理念的进步和康复技术的不断发展,越来越多的创新实践被应用于自闭症儿童的教育中。其中,广州的星贝育园自闭症儿童寄宿制学校以其独特的教育模式和全方位的康复…

城市级河流三维处理及展示的一些技术

本文是一些算法技术的初探分析,会陆续修订。 1、问题 河流是一种非常复杂的多边形。在二维地图可以采用多边形填充算法(DDA)对任意复杂的多边形进行绘制与填充。但是三维引擎只能采纳三角面进行渲染。但在如此复杂的多边形面前,简单的三角化算法不能解…

14.其他流(下篇)

目录 1. IO流的体系结构 2.字节缓冲流 3.字符缓冲流 4.转换流 5.序列化 6.打印流 7.压缩流与解压流 8.工具包 1. IO流的体系结构 IO流的使用原则:随用随创建,什么时候不用什么时候关闭 1.1 io流的体系结构图 1.2缓冲流的分类 缓冲流,也叫高效流&#…

SpringBoot---------Actuator监控

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2、开启配置 management.endpoints.web.exposure.include* 3、启动项目&#xff0c;查看监控…

C++ 在项目中使用Linux命令

一: 选择shell Linux 命令是由shell解析并转发给操作系统执行的&#xff0c;所有的shell都是从 Bourne shell&#xff08;/bin/sh&#xff09;派生的&#xff0c;Bourne shell是贝尔实验室为早期版本的Unix开发的标准shell。 每个Unix系统都需要一个版本的Bourne shell才能正…

研1日记14

1.动态卷积&#xff1a;所得卷积核与输入相关&#xff0c;参考博文&#xff1a;动态卷积之CondConv和DynamicConv-CSDN博客 针对不同的频段&#xff0c;学习注意力权重&#xff0c; 深度学习中组卷积(Group convolution)、深度卷积(Depthwise Convolution)以及深度可分离卷积…

【MQTT协议使用总结】基于-FreeRTOS平台-移植MQTT协议栈

文章目录 仓库地址关键接口适配FreeRTOS_readFreeRTOS_writeNetworkInit && NetworkConnect && NetworkDisconnect 总结 仓库地址 https://github.com/eclipse/paho.mqtt.embedded-c 这里官方给了一些平台适配案例&#xff0c;这里参考FreeRTOS的 关键接口适配…

LeetCode_sql_day27(1225.报告系统状态的连续信息)

目录 描述&#xff1a; 1225.报告系统状态的连续信息 数据准备&#xff1a; 分析&#xff1a; 代码&#xff1a; 总结&#xff1a; 描述&#xff1a; 1225.报告系统状态的连续信息 表&#xff1a;Failed ----------------------- | Column Name | Type | ----------…

MyBatis动态SQL中的`if`标签使用【后端 19】

MyBatis动态SQL中的if标签使用 引言 MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。在 MyBatis 中&#xff0c;动态 SQL 是一个非常强大的特性&#xff0c;它允许你根据不同的条件来动态构建 SQL 语句。if 标签是动态 SQL 中最常用的一…

nginx服务器安装和部署代理

文章目录 Linux下面安装nginx nginx下载官网: [nginx: download](https://nginx.org/en/download.html) 使用yum命令安装gcc环境 yum install -y wget gcc-c pcre-devel zlib-devel openssl-devel//安装多个环境 wget gcc pcre-devel 支持正则表达式 zlib-devel提供了压缩和…

C++:输入输出,字符串,命名空间

1.输出斐波那契数列的前20项 #include <iostream>using namespace std;int main() {int a[20];int i;for(i0;i<20;i){if(i<2){a[i]1;cout<<a[i]<<ends;}else{a[i]a[i-1]a[i-2];cout<<a[i]<<ends;}}return 0; } 2.输入一个字符&#xff0…

Java泛型(“代码模板”,一套代码套用各种类型)

1.什么是泛型 a.定义 i.如果不用泛型定义&#xff0c;在使用ArrayList时需要为每个class编写特定类型代码。 ii.泛型就是定义一种模板&#xff0c;既实现了编写一次&#xff0c;万能匹配&#xff0c;又通过编译器保证了类型安全。 iii.编写模板代码来适应任意…