Centos安装RocketMQ之双主双从模式(同步双写方式)

目录

前言

一、总体架构

二、环境准备

1、文件准备

2、服务器换环境

3、防火墙配置

4、创建消息存储路径

 三、配置文件修改

1、master1配置修改

2、slave2配置修改

3、master2配置修改

4、slave1配置修改

 四、启动脚本修改

 五、启动服务

1、启动NameServe集群

​编辑

2、启动Broker集群

 2.1 在 161上启动master1和slave2

 2.2 在 163上启动master2和slave1

2.3 注意

2.4 问题

2.4.1  Lock failed,MQ already started 


前言

RocketMQ单机版模式,这种模式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试,单机版环境搭建可以参考文档。

一、总体架构

二、环境准备

1、文件准备

把对应的安装包上传到服务器中,并且进行解压

2、服务器换环境

序号IP角色架构模式
110.100.24.161nameserver、brokerserverMaster1、Slave2
210.100.24.163nameserver、brokerserverMaster2、Slave1

3、防火墙配置

宿主机需要远程访问虚拟机的rocketmq服务和web服务,需要开放相关的端口号,简单粗暴的方式是直接关闭防火墙

# 关闭防火墙
systemctl stop firewalld.service
# 查看防火墙的状态
firewall-cmd --state
# 禁止firewall开机启动

systemctl disable firewalld.service

或者为了安全,只开放特定的端口号,RocketMQ默认使用3个端口:9876 、10911 、11011 。如果防火墙没有关闭的话,那么防火墙就必须开放这些端口:

  • nameserver 默认使用 9876 端口

  • master 默认使用 10911 端口

  • slave 默认使用11011 端口

执行以下命令:

 # 开放name server默认端口
firewall-cmd --remove-port=9876/tcp --permanent
# 开放master默认端口
firewall-cmd --remove-port=10911/tcp --permanent
# 开放slave默认端口 (当前集群模式可不开启)
firewall-cmd --remove-port=11011/tcp --permanent 
# 重启防火墙
firewall-cmd --reload

4、创建消息存储路径

mkdir /usr/local/rocketMq/store
mkdir /usr/local/rocketMq/store/commitlog
mkdir /usr/local/rocketMq/store/consumequeue
mkdir /usr/local/rocketMq/store/index

同一系统下如果有要创建两个broker,则对应的store路径要不一样

mkdir /usr/local/rocketMq/store_s
mkdir /usr/local/rocketMq/store_s/commitlog
mkdir /usr/local/rocketMq/store_s/consumequeue
mkdir /usr/local/rocketMq/store_s/index

 

 三、配置文件修改

1、master1配置修改

IP:10.100.24.161

 vi broker-a.properties

 

如果直接在ssh中用vi编辑不直观,可以借助文本编辑工具

修改配置如下:

brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=10.100.24.161:9876;10.100.24.163: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=/usr/local/rocketMq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketMq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketMq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 修改后效果

2、slave2配置修改

IP:10.100.24.161

 vi broker-b-s.properties

修改配置如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=10.100.24.161:9876;10.100.24.163: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=/usr/local/rocketMq/store_s
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMq/store_s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMq/store_s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketMq/store_s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMq/store_s/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketMq/store_s/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

3、master2配置修改

IP:10.100.24.163

 vi broker-b.properties

修改配置如下:

 brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=10.100.24.161:9876;10.100.24.163: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=/usr/local/rocketMq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketMq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketMq/store/abort
#限制的消息大小
#maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

4、slave1配置修改

IP:10.100.24.163

 vi broker-a-s.properties

修改配置如下:

 brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=10.100.24.161:9876;10.100.24.163: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=/usr/local/rocketMq/store_s
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMq/store_s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMq/store_s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketMq/store_s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMq/store_s/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketMq/store_s/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
 

 四、启动脚本修改

如果是非服务器部署即内存没有那么大,则需要修改RocketMQ默认的虚拟机,启动Broker如果因为内存不足失败,需要编辑如下两个配置文件,修改JVM内存大小,或者因为系统需求需要调高对应配置。

# 编辑runbroker.sh和runserver.sh修改默认JVM大小

vi runbroker.sh

 vi runserver.sh

 五、启动服务

1、启动NameServe集群

   分别在161,163中启动NameServe

nohup sh bin/mqnamesrv &

2、启动Broker集群

 2.1 在 161上启动master1和slave2

master1:

nohup sh bin/mqbroker  -c conf/2m-2s-sync/broker-a.properties   &

 slave2:

nohup sh bin/mqbroker  -c conf/2m-2s-sync/broker-b-s.properties   &

 

 2.2 在 163上启动master2和slave1

master2:

nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties   &

 slave1:

 nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties   &

 

2.3 注意

在启动broker 的时候,使用的命令中 -c 与 nohup sh bin/mqbroker中间只能有一个空格,不然broker启动的时候就不会读取对应的配置文件

2.4 问题
2.4.1  Lock failed,MQ already started 

这个问题就是因为一台服务器,同时部署两个broker节点,并且两个节点的消息存储路径相同导致的,所以消息存储路径创建了两个一个是store,一个是store_s。

但是本人踩的坑就是在注意当中提到的问题,虽然我创建了两个路径并也配置对了,但是在启动broker的时候 -c 前边有两个空格,导致启动的时候broker没有读取正确的配置文件,从而导致两次启动的时候,读取的配置文件相同也就是默认配置文件,进而导致报这个错误

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云高性能云服务器_云主机_云服务器详解

阿里云高性能云服务器60%单实例最大性能提升,35Gbps内网带宽,网络增强&通用型云服务器、本地SSD型云服务器、大数据型云服务器、GPU异构型云服务器,阿里云百科aliyunbaike.com分享阿里云高性能云服务器: 阿里云高性能云服务器…

【simple-admin】FMS模块如何快速接入阿里云oss 腾讯云cos 服务 实现快速上传文件功能落地

让我们一起支持群主维护simple-admin 社群吧!!! 不能加入星球的朋友记得来点个Star!! https://github.com/suyuan32/simple-admin-core 一、前提准备 1、goctls版本 goctls官方git:https://github.com/suyuan32/goctls 确保 goctls是最新版本 v1.6.19 goctls -v goct…

(十一)IIC总线-AT24C02-EEPROM

文章目录 IIC总线篇AT24C02-EEPROM篇主要特性引脚说明AT24Cxx用几位数据地址随机寻址的(存储器组织)AT24C02设备操作AT24CXX设备寻址EEPROM写操作的种类EEPROM读操作的种类实现单字节写实现任意读读写应用 IIC总线篇 前面介绍过了,请参考 (十)IIC总线-PCF8591-ADC/…

手把手教你用 Stable Diffusion 写好提示词

Stable Diffusion 技术把 AI 图像生成提高到了一个全新高度,文生图 Text to image 生成质量很大程度上取决于你的提示词 Prompt 好不好。 前面文章写了一篇文章:一份保姆级的 Stable Diffusion 部署教程,开启你的炼丹之路 本文从“如何写好…

前端基础知识

一、脚本script 定义:脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的,脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行 作用:可以…

element:日历 / 使用记录

一、预期效果 Element - The worlds most popular Vue UI framework element默认样式 目标样式 二、Calendar 属性 参数说明类型可选值默认值value / v-model绑定值Date/string/number——range时间范围,包括开始时间与结束时间。开始时间必须是周一,…

【HuggingFace Transformer库学习笔记】基础组件学习:Evaluate

基础组件学习——Evaluate Evaluate使用指南 查看支持的评估函数 # include_community:是否添加社区实现的部分 # with_details:是否展示更多细节 evaluate.list_evaluation_modules(include_communityFalse, with_detailsTrue)加载评估函数 accuracy…

Linux终端常见用法总结

熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率,笔者结合自身学习实践,总结以下终端用法供同行交流学习。 常 见 用 法 🎯 1:快捷键 1.1 Alt . 在光标位置插入上一次执行命令的最后一个参数。 1.2 Ct…

图片特效/增强GUI程序

程序下载地址:mendianyu/pictureConvert: 图片特效/增强GUI程序,借助百度接口实现人像动漫化,模糊图片变清晰等等功能 (github.com) 图片特效/增强GUI程序 借助百度接口实现人像动漫化,模糊图片变清晰等等功能 程序介绍 运行Ima…

码牛课堂首推——鸿蒙南北双向开发学习路线图标准版~

鸿蒙!鸿蒙!鸿蒙! 要说2023-2024年IT圈最火爆的名词,一定是鸿蒙! 2023年9月25日,华为发布会正式宣布2024年第一季度将推出HarmonyOS NEXT版本,这意味着鸿蒙原生应用开发将彻底摆脱Android手机系…

redis夯实之路-集群详解

Redis有单机模式和集群模式。 集群是 Redis 提供的分布式数据库方案,集群通过分片( sharding )来实现数据共享,并提供复制和故障转移。集群模式可以有多个 master 。使用集群模式可以进一步提升 Redis 性能,分布式部署实现高可用性&#xff…

【Kafka-3.x-教程】-【二】Kafka-生产者-Producer

【Kafka-3.x-教程】专栏: 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…

ROS无人机开发常见错误

飞控部分 一、解锁时飞控不闪红灯,无任何反应,地面站也无报错 解决办法: 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值,如果没有,检查遥控器是否打开,遥控器和接收…

【Python】Python语言 3小时速通(有C语言基础版)

python从入门到实践 变量 message"hello world"并不需要指出变量类型 方法 tittle()#以首字母大写的形式输出单词upper()#全部大写输出lower()#全部小写输出存储数据时经常使用lower,因为无法确保数据是大写还是小写 rstrip()#输出删除字符串尾部多余…

Linux系统中使用ln命令创建软连接

大家应该和我一样,第一次听到软连接这个词时感觉好高级啊,但其实也就那么回事,你完全可以将他类比为Windows系统中的快捷方式。 链接只是一个指向,并不是物理移动,类似Windows系统的快捷方式 1.功能和语法 功能&…

C#进阶学习

目录 简单数据结构类ArrayList声明增删查改遍历装箱拆箱 Stack声明增取查改遍历装箱拆箱 Queue声明增取查改遍历 Hashtable声明增删查改遍历装箱拆箱 泛型泛型分类泛型的作用泛型约束 常用泛型数据结构类List声明增删查改遍历 Dictionary声明增删查改遍历 LinkedList声明增删查…

Seata TM管理分支事务

TM相当于一个中间商,是没有涉及到任何数据库底层操作的。 TransactionalTemplate 1、TM向TC端发起一次开启全局事务的请求 io.seata.tm.api.TransactionalTemplate#beginTransaction --> io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.Strin…

APM链路监控: Linux 部署 pinpoint

目录 一、实验 1.环境 2. 准备 3.HBase单机部署 4.pinpoint部署 二、问题 1.pinpoint有哪些功能 2.pinpoint架构是如何组成的 3.Linux中自带的jdk 如何设置JAVA_HOME 4. hbase启动报错 5.hbase的master启动失败 6.JPS命令如何安装和使用 一、实验 1.环境 &#x…

Centos7.9服务器编译安装Nginx1.24.0和php8.3

Centos7.9服务器编译安装Nginx1.24.0和php8.3 服务器nginx原版本有安全漏洞,需要升级,由于原始是yum源安装,通过yum直接升级,无法正常升级完成,故而需要卸载yum源,重新编译安装。 1、查看原来nginx版本,ps查看原来nginx进程,运行状态: ps aux | grep nginx ​ root …

JAVAEE——request对象(三)

1. request对象 1.1 知识点 &#xff08;1&#xff09;乱码问题的两种解决方式 &#xff08;2&#xff09;post和get提交的区别 &#xff08;3&#xff09;request接收同名参数的问题 1.2 具体内容 使用request接收参数 <%page contentType"text/html; charsetut…