当前位置: 首页 > news >正文

【无标题】rocket

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.propertiesbroker-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.lryc.cn/news/440851.html

相关文章:

  • Maven国内镜像(四种)
  • Linux环境中如何快速修改 JAR 包中的配置文件
  • java高频面试题(2024最新)
  • WEB 编程:使用富文本编辑器 Quill 配合 WebBroker 后端
  • 新书出版,大陆首本NestJS图书《NestJS全栈开发解析:快速上手与实践》
  • 面试题:react、vue中的key有什么作用?(key的内部原理)
  • 基于python+django+vue的外卖管理系统
  • 初始分布式系统和Redis特点(
  • 计算机毕业设计 家电销售展示平台的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Android RecyclerView 缓存机制深度解析与面试题
  • 管道缺陷检测系统源码分享
  • python定时发送邮件的功能如何实现自动化?
  • 工业机器人9公里远距离图传模块,无人机低延迟高清视界,跨过距离限制
  • IEEE-754 32位十六进制数 转换为十进制浮点数
  • XSS跨站脚本攻击及防护
  • 利用ClasserLoader来实现jar包加载并调用里面的方法
  • 【VUE】快速上手
  • 在 Docker 中部署无头 Chrome:在 Browserless 中运行
  • Meta-Learning数学原理
  • 【图像匹配】基于SURF算法的图像匹配,matlab实现
  • RocketMQ实战与集群架构详解
  • docker容器中的内存占用高的问题分析
  • 纯血鸿蒙NEXT常用的几个官方网站
  • A股上市公司企业创新能力、质量、效率-原始数据+dofile+结果(2006-2023年)
  • Selenium:开源自动化测试框架的Java实战解析
  • 搜索功能技术方案
  • 硬件体系架构的学习
  • 【与C++的邂逅】--- C++的IO流
  • 【C++ Primer Plus习题】16.8
  • 基于stm32的四旋翼无人机控制系统设计系统设计与实现