rocketmq-5.1.2的dleger高可用集群部署

news2024/11/27 16:46:09

1、背景

原先为5.0.0版本,因检查出有漏洞,升级到5.1.2版本。
【Rocketmq是阿里巴巴在2012年开发的分布式消息中间件,专为万亿级超大规模的消息处理而设计,具有高吞吐量、低延迟、海量堆积、顺序收发等特点。在一定条件下,存在远程命令执行风险。攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。】

2、部署规划-3台服务器

(1)服务器准备

  • 192.168.0.1(主)
  • 192.168.0.2(从)
  • 192.168.0.3(从)

(2)核对空间,内存

  • df -h
  • free -h

(3)确认启动用户及部署路径

  1. 用户:applin【确认有应用路径的写入执行权限,755,或应用路径归属于applin】
  2. 应用路径:/software/
  3. 数据存储路径:/applin/data_rocketmq
  4. 日志存储路径:/applin/logs_rocketmq

3、获取rocketmq-5.1.2版本并上传到服务器

(1)获取文件

rocketmq官方下载链接
选择5.1.2版本,Binary下载
(2)通过WinScp或其他上传包文件到指定服务器路径

  • 192.168.0.1:/software/rocketmq-all-5.1.2-bin-release.zip
  • 192.168.0.2:/software/rocketmq-all-5.1.2-bin-release.zip
  • 192.168.0.3:/software/rocketmq-all-5.1.2-bin-release.zip

4、dleger高可用集群部署

4.1、3台服务器统一操作

(1)新建日志+数据存储路径

cd /software
unzip rocketmq-all-5.1.2-bin-release.zip
su - applin
mkdir -p /applin/data_rocketmq
mkdir -p /applin/logs_rocketmq
cd /software/rocketmq-all-5.1.2-bin-release

(2)修改日志路径

执行命令1: cd /software/rocketmq-all-5.1.2-bin-release/conf
执行命令2: sed -i 's?${user.home}${file.separator}logs${file.separator}rocketmqlogs?/applin/logs_rocketmq?' /software/rocketmq-all-5.1.2-bin-release/conf/rmq.broker.logback.xml
执行命令3: sed -i 's?${user.home}${file.separator}logs${file.separator}rocketmqlogs?/applin/logs_rocketmq?' /software/rocketmq-all-5.1.2-bin-release/conf/rmq.client.logback.xml
执行命令4: sed -i 's?${user.home}${file.separator}logs${file.separator}rocketmqlogs?/applin/logs_rocketmq?' /software/rocketmq-all-5.1.2-bin-release/conf/rmq.controller.logback.xml
执行命令5: sed -i 's?${user.home}${file.separator}logs${file.separator}rocketmqlogs?/applin/logs_rocketmq?' /software/rocketmq-all-5.1.2-bin-release/conf/rmq.namesrv.logback.xml
执行命令6: sed -i 's?${user.home}${file.separator}logs${file.separator}rocketmqlogs?/applin/logs_rocketmq?' /software/rocketmq-all-5.1.2-bin-release/conf/rmq.proxy.logback.xml
执行命令7: sed -i 's?${user.home}${file.separator}logs${file.separator}rocketmqlogs?/applin/logs_rocketmq?' /software/rocketmq-all-5.1.2-bin-release/conf/rmq.tools.logback.xml

(3)修改启动脚本内存及环境变量

  • 修改启动脚本runserver.sh,将环境变量改为实际路径(2个方法)
执行命令1: cd /software/rocketmq-all-5.1.2-bin-release/bin
执行命令2: sed -i 's#${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m#${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m#' /software/rocketmq-all-5.1.2-bin-release/bin/runserver.sh
执行命令3:vim runserver.sh查看上述是否修改成功,同时更改环境变量如下,2个方法选其一
(1)[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/software/jdk/jdk_linux
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
(2)[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/software/jdk_linux
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/software/jdk_linux
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
  • 修改启动脚本runbroker.sh,将环境变量改为实际路径(2个方法)
执行命令1: cd /software/rocketmq-all-5.1.2-bin-release/bin
执行命令2: sed -i 's#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"#JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g"#' /software/rocketmq-all-5.1.2-bin-release/bin/runbroker.sh
执行命令3:vim runbroker.sh查看上述是否修改成功,同时更改环境变量如下,2个方法选其一
(1)[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/software/jdk/jdk_linux
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"
(2)[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/software/jdk_linux
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/software/jdk_linux
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"

4.2、3台服务器分别操作

目前看这两项有区别:
dLegerSelfId与dLegerPeers保持对应。
brokerIP1

(1) IP1 - 192.168.0.1(主)

执行命令1: cd /software/rocketmq-all-5.1.2-bin-release/conf/dledger
执行命令2: vim broker-n0.conf
## 集群名
brokerClusterName = RaftCluster
## broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
## 监听的端口
#listenPort=30911
## 你设置的NameServer地址和端口
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876;192.168.0.3:9876
storePathRootDir=/applin/data_rocketmq/node00
storePathCommitLog=/applin/data_rocketmq/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
## n0 n1 n2 分别是broker1,broker2,broker3 的 dLegerSelfId
## 例如:dLegerPeers=n0-服务器1的IP:20911;n1-服务器2的IP:20911;n2-服务器3的IP:20911
dLegerPeers=n0-192.168.0.1:20911;n1-192.168.0.2:20911;n2-192.168.0.3:20911
## must be unique
## 这个值必须是在同一个RaftClusterGroup内唯一的
dLegerSelfId=n0
sendMessageThreadPoolNums=16
brokerIP1=192.168.0.1
执行命令3: nohup sh /software/rocketmq-all-5.1.2-bin-release/bin/mqnamesrv  &
执行命令4: nohup sh /software/rocketmq-all-5.1.2-bin-release/bin/mqbroker -c /software/rocketmq-all-5.1.2-bin-release/conf/dledger/broker-n0.conf &

(2) IP2 - 192.168.0.2(从)

执行命令1: cd /software/rocketmq-all-5.1.2-bin-release/conf/dledger
执行命令2: vim broker-n1.conf
## 集群名
brokerClusterName = RaftCluster
## broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
## 监听的端口
#listenPort=30911
## 你设置的NameServer地址和端口
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876;192.168.0.3:9876
storePathRootDir=/applin/data_rocketmq/node00
storePathCommitLog=/applin/data_rocketmq/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
## n0 n1 n2 分别是broker1,broker2,broker3 的 dLegerSelfId
## 例如:dLegerPeers=n0-服务器1的IP:20911;n1-服务器2的IP:20911;n2-服务器3的IP:20911
dLegerPeers=n0-192.168.0.1:20911;n1-192.168.0.2:20911;n2-192.168.0.3:20911
## must be unique
## 这个值必须是在同一个RaftClusterGroup内唯一的
dLegerSelfId=n1
sendMessageThreadPoolNums=16
brokerIP1=192.168.0.2
执行命令3: nohup sh /software/rocketmq-all-5.1.2-bin-release/bin/mqnamesrv  &
执行命令4: nohup sh /software/rocketmq-all-5.1.2-bin-release/bin/mqbroker -c /software/rocketmq-all-5.1.2-bin-release/conf/dledger/broker-n1.conf &

(3) IP3 - 192.168.0.3(从)

执行命令1: cd /software/rocketmq-all-5.1.2-bin-release/conf/dledger
执行命令2: vim broker-n2.conf
## 集群名
brokerClusterName = RaftCluster
## broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
## 监听的端口
#listenPort=30911
## 你设置的NameServer地址和端口
namesrvAddr=192.168.0.1:9876;192.168.0.2:9876;192.168.0.3:9876
storePathRootDir=/applin/data_rocketmq/node00
storePathCommitLog=/applin/data_rocketmq/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
## n0 n1 n2 分别是broker1,broker2,broker3 的 dLegerSelfId
## 例如:dLegerPeers=n0-服务器1的IP:20911;n1-服务器2的IP:20911;n2-服务器3的IP:20911
dLegerPeers=n0-192.168.0.1:20911;n1-192.168.0.2:20911;n2-192.168.0.3:20911
## must be unique
## 这个值必须是在同一个RaftClusterGroup内唯一的
dLegerSelfId=n2
sendMessageThreadPoolNums=16
brokerIP1=192.168.0.3
执行命令3: nohup sh /software/rocketmq-all-5.1.2-bin-release/bin/mqnamesrv  &
执行命令4: nohup sh /software/rocketmq-all-5.1.2-bin-release/bin/mqbroker -c /software/rocketmq-all-5.1.2-bin-release/conf/dledger/broker-n2.conf &

5、验证

(1)查看集群服务是否启动成功:jps
命令执行后,可查看到两个进程,NamesrvStartup和BrokerStartup
(2)在集群中任意一个节点的bin目录下执行如下命令:

执行命令1: cd /cebsoft/uinnova/rocketmq-all-5.1.2-bin-release/bin
执行命令2: sh mqadmin clusterList -n 127.0.0.1:9876

结果中addr中有broker信息。
#BID显示3个,0+1+2,ACTIVATED显示3个,1个true+2个false。
(2)kill主broker并在此查看集群情况,master切换是否成功。重新启动后原master服务器变为从。【BID的0表示主】

6、日志

(1)Dleger高可用集群,3台中至少2台启动才不会报错
(2)核对配置项是否有错误
(3)空间不足、内存不足,清理后重启应用

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

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

相关文章

如何手动实现multiSetIfAbsent、multiExpire

👽System.out.println(“👋🏼嗨,大家好,我是代码不会敲的小符,目前工作于上海某电商服务公司…”); 📚System.out.println(“🎈如果文章中有错误的地方,恳请大家指正!共同进步,共同成长✊”); 🌟System.out.println(“💡如果文章对您有所帮助,希望您可以三…

C#操作MySQL从入门到精通(22)——创建表与操纵表

前言 我们新建数据库以后,最需要做的就是创建表,对数据库的操作绝大多数情况下都是都对表的操作,本文就是讲解如何创建表以及修改表中的列,修改表名等操作。由于创建表的方法基本上有两种,一种是使用带有界面的工具比如Navicate来创建表,另一种是使用sql语句来创建表,实…

rv1126-rv1109-串口显示路径不变化

串口只有#, 后来看了教程改成如下 但是没有变化,那个路径都只显示rootLonbon# 于是最后改成了这样 因为:

CSS函数: 实现数据限阈的数字函数

CSS函数中提供了几个比较实用的数字函数,它可以帮助我们实现一定的数学计算功能。常见的数字函数目前提供了五个:calc()、max()、min()和clamp()函数。其基本实现功能如下: calc():允许在声明 CSS 属性值时执行一些计算。max()&a…

数据结构 —— 堆

1.堆的概念及结构 堆是一种特殊的树形数据结构,称为“二叉堆”(binary heap) 看它的名字也可以看出堆与二叉树有关系:其实堆就是一种特殊的二叉树 堆的性质: 堆中某个结点的值总是不大于或不小于其父结点的值&…

ColorEasyDuino上手指南

介绍 ColorEasyDuino是嘉立创推出的一块Aduino开发板(类似物),具有丰富的外设接口:uart、i2c、spi、adc、pwm等;开发板设计参考原型是Arduino Uno,采用的芯片是ATMEGA328P,它的外观设计比较紧凑…

⌈ 传知代码 ⌋ MonoCon解读与复现

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【Gradio】快速入门

https://www.gradio.app/ Gradio 是一个开源 Python 软件包https://github.com/gradio-app/gradio ,可以让你快速为机器学习模型、API 或任何任意 Python 函数创建一个演示或网络应用程序。然后,您就可以使用 Gradio 内置的分享功能,在几秒钟…

ROS2底层机制源码分析

init ->init_and_remove_ros_arguments ->init ->Context::init 保存初始化传入的信号 ->install_signal_handlers→SignalHandler::install 开线程响应信号 ->_remove_ros_arguments 移除ros参数 ->SingleNodeManager::instance().…

D-Bus——system 调用session 报错

以下代码是一个 session 服务和 systemd 服务 demo &#xff1a; systemd DBus #include <QCoreApplication> #include <QDBusConnection> #include <QDBusInterface> #include <QDBusError> #include <QDebug>class TestObject : public QObje…

一文搞懂flex布局

上学读书的时候&#xff0c;学习flex布局&#xff0c;更多停留在理论知识层面。近来&#xff0c;经过工作实践&#xff0c;发现自己对flex布局的理解更加深入&#xff0c;运用起来更加熟练&#xff0c;也越发能感受到flex布局的强大灵活性&#xff0c;特来总结一波。若有错误之…

Android Glide loading Bitmap from RESOURCE_DISK_CACHE slow,cost time≈2 seconds+

Android Glide loading Bitmap from RESOURCE_DISK_CACHE slow,cost time≈2 seconds 加载一张宽高约100px多些的小图&#xff0c;是一张相当小的正常图片&#xff0c;loading Bitmap from RESOURCE_DISK_CACHE竟然耗时达到惊人的3秒左右&#xff01;&#xff08;打开Glide调试…

元宇宙数字化3D虚拟展馆

随着科技的飞速发展&#xff0c;我们迎来了一个全新的时代——元宇宙时代。在这个充满无限可能的虚拟世界中&#xff0c;元宇宙数字展馆搭建编辑器应运而生&#xff0c;以其卓越的技术和创新的理念&#xff0c;为用户带来了前所未有的沉浸式展览体验。 元宇宙数字展馆搭建编辑器…

普涨和补涨—2024年上半年全球投资趋势

全球大宗商品价格处在上涨周期&#xff0c;东吴证券认为上游能源行业股价还有继续上涨的空间。随着6月全球股指进一步上涨&#xff0c;预计港股可能还会迎来补涨行情。 一、我们观察的全球投资趋势&#xff1a; 1、全球股指普涨&补涨。全球风险资产进入2024年后普遍上涨&am…

Spark安装、解压、配置环境变量、WordCount

Spark 小白的spark学习笔记 2024/5/30 10:14 文章目录 Spark安装解压改名配置spark-env.sh重命名&#xff0c;配置slaves启动查看配置环境变量 工作流程maven创建maven项目配置maven更改pom.xml WordCount按照用户求消费额上传到spark集群上运行 安装 上传&#xff0c;直接拖拽…

一文讲清:生产报工系统的功能、报价以及如何选择

最近这几年&#xff0c;企业越来越注重生产的速度和成本&#xff0c;尤其是“性价比”&#xff0c;生产报工系统已经变成了制造业里不可或缺的一部分。不过&#xff0c;市场上生产报工系统的选择太多&#xff0c;价格也都不一样&#xff0c;这就给很多企业出了个难题&#xff1…

【Python数据魔术】:揭秘类型奥秘,赋能代码创造

文章目录 &#x1f680;一.运算符&#x1f308;1. 算术运算符&#x1f308;2. 身份运算符&#x1f308;3. 成员运算符⭐4. 增量运算符⭐5. 比较运算符⭐6. 逻辑运算符 &#x1f680;二.可变与不可变&#x1f680;三.字符串转义&#x1f680;四.编码与解码&#x1f4a5;1. 基础使…

SpringBoot 异常配置

系统异常处理 创建异常处理器类&#xff0c;类上添加ControllerAdvice注解。 package com.soft.exception;import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframewor…

Java的集合框架总结

Map接口和Collection接口是所有集合框架的父接口&#xff1a; Collection接口的子接口包括&#xff1a;Set接口和List接口 Map接口的实现类主要有&#xff1a;HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有&#xff1a;HashSet、Tr…

【数据结构】二叉树:一场关于节点与遍历的艺术之旅

专栏引入 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我想让大家…