rocketMQ集群部署
RocketMQ集群部署
RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛。但是它是如何进行部署的呢,以及它的高可用是如何实现的呢。那么就由我来为大家讲解一哈RocketMQ是如何进行部署的。本篇文章中没有对mq中各个角色进行讲解,本文也默认大家对mq的各个角色已经有了一定的认识。博主在未来一周中会对mq的基础部分以及如何使用进行详解。
一、环境准备
虚拟机、JDK、RocketMQ环境包,
二、JDK、RocketMQ相关包准备
版本 | 名称 | 官方下载地址 | |
JDK | 1.8 |
jdk-8u321-linux-x64.tar.gz |
JDK官方下载地址 |
RocketMQ | 4.5.2 |
rocketmq-all-4.5.2-bin-release.zip |
|
rocketmq-dashboard | latest release | rocketmq-dashboard-master.zip | rocketMQ控制台下载地址 |
三、部署到Linxu系统并解压
上传文件可以使用XShell。
1、如果没有lrzsz工具,可以安装,否则:跳过这一步。命令:yum install lrzsz
2、上传:rz + 上传的文件
3、上传完所有的文件,进行解压。
4、jdk解压:tar -zxvf jdk-8u321-linux-x64.tar.gz -C /opt/jdk
5、rocketMQ解压:unzip -d /opt/rocketMQ rocketmq-all-4.5.2-bin-release.zip
6、rocketmq-dashboard在windows10解压。并修改一些配置,打包就可以使用了。具体的在本文最后一个目录有讲解。
7、配置JDK环境变量:(大家可能有疑惑为啥会配置JDK环境变量,原因:rocketMQ是JAVA语言开发出来的,所有要运行rocketMQ就必须安装JDK的环境。)
1、编辑/etc/profile文件
命令:vim /etc/profile
2、配置环境变量:
export JAVA_HOME=/opt/soft/jdk1.8.0_261
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3、重新加载配置:source /etc/profile
4、查看是否配置成功。java -version
效果:
9、rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。
单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,导致mq无法使用,则我们服务器无法接受信息与消费信息等。
多主集群:只部署mq主节点,无部署从节点。优点:配置简单,单个Master宕机或重启维护对应用无影响,即使机器宕机不可恢复情况下,也有其他主节点进行写入操作,
消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
双主双从同步:部署四个节点,每个主节点都有一个从节点,主与从节点的信息通过同步的方式进行保存。优点:消息不会丢失,即:主节点挂了后,从节点的消息也不会造成丢失,只不过没法接受新消息,只能消费,但是能保证我消费的消息一定是准确的。缺点:客户端接受服务器响应时间长。可用于消息安全高的场景。
双主双从异步:与双主双从一致,只不过在主从数据传输是通过异步的方式,优点:客户端能快速的接收到服务器的消息,缺点:主节点挂的情况,从节点会丢失一部分消息。可用于允许消息丢失,吞吐量高的情景。
四、双主双从同步部署集群
1、启动虚拟机,至少准备两个ip,也可准备四个。
ip | broker名称 | 说明 |
192.168.0.129 | broker-a | a主节点 |
192.168.0.129 | broker-b-s | b从节点 |
192.168.0.130 | broker-b | b主节点 |
192.168.0.130 | borker-a-s | a从节点 |
2、修改mq的配置。 runserver.sh与runbroker.sh
原因:我启动的虚拟机的内存设置的是3G,而mq默认的JVM最小的堆内容是8G,太大了,不修改将无法启动。
修改命令:vim /mq目录/bin/runserver.sh,或vim /mq目录/bin/runbroker.sh ,大家可以根据虚拟机大小自行修改。如果想了解更多的这个可以了解JVM相关的知识。
1 1、runserver.sh
2 JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m"
3 2、runnbroker.sh
4 JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1G -Xmn128m"
3、修改conf目录中2m-2s-sync目录中的配置文件
broker-a.properties
# 所属集群名字
brokerClusterName=myRocketmqCluster
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=0
# 注册中心,可使用集群模式
namesrvAddr=192.168.0.129:9876;192.168.0.130:9876
# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10933
# 删除文件时间点,默认是凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
# 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,
用于数据存储,consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,
而是记录一个数据的位置,记录好之后再把消息存到commitlog文件里
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/opt/rocketmq/store
# commitLog存储路径
storePathCommitLog=/opt/rocketmq/commitlog
# 消费队列存储路径
storePathConsumeQueue=/opt/rocketmq/consumequeue
# 消息索引存储路径
storePathIndex=/opt/rocketmq/index
# checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/checkpoint
# abort 文件存储路径
abortFile=/opt/rocketm/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=ASYNC_FLUSH
checkTransactionMessageEnable=false
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
broker-b-s.properties
# 所属集群名字
brokerClusterName=myRocketmqCluster
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=1
# 注册中心,可使用集群模式
namesrvAddr=192.168.0.129:9876;192.168.0.130:9876
# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10900
# 删除文件时间点,默认是凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
# 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,用于数据存储,
consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,而是记录一个数据的位置,
记录好之后再把消息存到commitlog文件里
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/opt/rocketmq/slave/store
# commitLog存储路径
storePathCommitLog=/opt/rocketmq/slave/commitlog
# 消费队列存储路径
storePathConsumeQueue=/opt/rocketmq/slave/consumequeue
# 消息索引存储路径
storePathIndex=/opt/rocketmq/slave/index
# checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/slave/checkpoint
# abort 文件存储路径
abortFile=/opt/rocketm/slave/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
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
这里面的核心:
brokerClusterName:只要是同一个集群里面的节点,都必须是这一个名称,可以自定义
brokerName:broker的名称,同一个broker的主从节点名称保持一致。
brokerId:broker的id标识。0:主节点,大于0都是从节点
namesrvAddr:nameSrv的注册中心地址,可以是集群模式,多个ip之间使用英文的;分隔
listenPort:监听端口,同一个ip地址下,端口不能保持一致,需修改
brokerRole:broker的角色,ASYNC_MASTER 异步复制Master,SYNC_MASTER 同步双写Master,SLAVE从节点专用。
flushDiskType:数据刷盘方式。ASYNC_FLUSH 异步刷盘,SYNC_FLUSH 同步刷盘
storePathRootDir=/opt/rocketmq/store 存储路径
storePathCommitLog=/opt/rocketmq/commitlog commitLog存储路径
storePathConsumeQueue=/opt/rocketmq/consumequeue 消费队列存储路径
storePathIndex=/opt/rocketmq/index消息索引存储路径
storeCheckpoint=/opt/rocketmq/checkpoint checkpoint 文件存储路径
abortFile=/opt/rocketm/abort abort 文件存储路径
4、192.168.0.130虚拟机重复上面的步骤即可。
5、两台虚拟机都已经部署完成了,开始对mq集群进行启动吧。先进入mq中bin目录中,如果配置了MQ的环境变量,就没必要进入bin目录中
1、先启动两台机子上的nameServer。nohup sh mqnamesrv &
2、在启动mq中129机子上的broker的节点。
集群中a主节点:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-a.properties &
集群中b从节点:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-b-s.properties &
3、启动的效果:
4、对130机子重复操作即可。
6、到这里,集群我们就部署完成了,但是在这里我们肯定有疑问我们怎么看到他就是部署成功了。要不我们写一段代码来进行测试。不要急,官方虽然提供了例子来操作,但是我们只能看到一堆的控制台数据呈现,不太好看。所以官方就提供了一个用于b端的页面的控制台。那我们就来对其进行配置部署吧。
五、rocketmq-dashboard 控制台部署
1、将下载好的压缩包解压到本地中,对resource目录中的application.yml的配置进行修改,目前我们只对nameServer的配置修改一哈,其他的配置我们先不动,注重看我加粗的地方。
rocketmq:
config:
# Linux系统中启动的nameServerd地址与端口
namesrvAddrs:
- 192.168.0.130:9876
- 192.168.0.129:9876
2、打包成jar包并上传到Linux系统中。打包的时间比较久,耐心等待。
打包注意事项:必须在src同级目录下使用这个命令(也就是可以看到pom.xml的目录)。mvn clean package -Dmaven.test.skip=true
如果看到这个就说明打包成功了。那就使用rz上传到Linux系统中。
3、启动dashborad。
nohup java -jar /opt/soft/rocketmq-dashboard-1.0.1-SNAPSHOT.jar &
查看 cat nohup.out ,看到这个就说明成功了。
4、关闭防火墙或开放端口号。
方式一:建议新手使用
1、关闭防火墙。
systemctl stop firewalld
方式二:生产环境使用
1、开放指定的端口号:firewall-cmd --zone=public --add-port=8080/tcp --permanent
2、重启防火墙:firewall-cmd --reload
注意:使用方式二,就需要将nameServer 与 broker 的端口也需要开放出来。使用了那个端口就必须开放出来,否则会被防火墙给阻挡。
5、效果,如果集群中把我们部署的都显示出来了,说明我们部署的没问题,放心的使用吧。
6、鉴权登录。
既然有b端可视化页面,那肯定也有我们登录验证撒,不然任何人知道我们的ip与端口都能看到了。官方是不可能这个玩的。那我们下面就来配置一哈登录校验。
1、还是对resource下的application.yml文件进行编辑。
rocketmq:
config:
loginRequired: true
2、对resource下的user.properties修改 这个配置文件是专门来登录账号的
用户名 密码 角色:1:管理员 0:普通用户
admin=123456,1
2、修改完了,重新打包上传运行即可。
3、效果
rocketMQ集群部署的更多相关文章
- RocketMQ集群部署记录
RocketMQ集群部署记录 #引用 https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 A ...
- rocketmq学习(二) rocketmq集群部署与图形化控制台安装
1.rocketmq图形化控制台安装 虽然rocketmq为用户提供了使用命令行管理主题.消费组以及broker配置的功能,但对于不够熟练的非运维人员来说,命令行的管理界面还是较难使用的.为此,我们可 ...
- Linux Centos7.5中的RocketMQ集群部署
系统环境 Docker > centos7.5 此镜像已经安装了jdk1.8和maven3.6.0 如果你想知道这个基础镜像的具体情况, 参考此文: https://www.cnblogs.co ...
- RocketMQ集群部署配置
目标,使用2台机器部署RocketMQ多Master多Slave模式,异步复制集群模式. 第一步,修改/etc/hosts文件 192.168.116.115 rocketmq1 192.168.11 ...
- RocketMQ集群部署安装
RcoketMQ:[ 1.低延时:在高压下,1毫秒内超过99.6%的反应延迟. 2.面向金融:具有跟踪和审计功能的高可用性. 3.行业可持续发展:保证了万亿级的消息容量. 4.厂商中立:一个新的开放的 ...
- Rocketmq 集群部署
10.1.0.178 配置文件 broker-a-m.properties brokerClusterName=PaymentClusterbrokerName=broker-anamesrvAddr ...
- RocketMQ 简单梳理 及 集群部署笔记【转】
一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...
- RocketMQ 简单梳理 及 集群部署笔记
一.RocketMQ 基础知识介绍Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...
- RocketMQ的高可用集群部署
RocketMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RocketMQ 集群物理部署结构 Rocket 物理部署结构 Name Server: 单点,供Producer和Cons ...
- CentOS7.4上搭建rocketMQ集群
一.rocketMQ集群部署方案优缺点对比: 多Master模式(2m-noslave) : 一个集群无Slave,全是Master,例如2个Master或者3个Master 优点:配置简单,单个Ma ...
随机推荐
- webpack 5.88.2
原理 webpack的运行过程大致可以分为以下几个步骤:webpack的运行过程实际上就是等待上一个钩子结束调用下一个钩子的过程 初始化:webpack接收命令行参数或配置文件,创建一个Compile ...
- 没时间做获取天气的实验 三分钟! 给您看清如何通过HTTP GET请求 获取天气预报
1. 注册心知天气账号,获取私钥 下面这篇文章是图示讲解的,好东西,何不转载为快? http://www.taichi-maker.com/homepage/iot-development/iot-p ...
- [python] 基于PyOD库实现数据异常检测
PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点.异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误.噪声或潜在的有趣现象.无论是处理小规模项目还是大型 ...
- 揭秘!尤雨溪成立的VoidZero如何改变前端世界
前言 Vue和Vite之父尤雨溪宣布成立公司 VoidZero,目前已经融资3200万.这篇文章欧阳将带你了解VoidZero是如何改变javascript的世界! 关注公众号:[前端欧阳],给自己一 ...
- 2022年第十八届 GOPS 全球运维大会资料分享
全球运维大会是国内第一个运维行业大会,面向互联网.金融.通信及传统行业广大运维技术人员,旨在传播先进技术思想和理念,分享业内最佳实践. 2022年第十八届 GOPS 全球运维大会(深圳站)共分为18个 ...
- 在Vue3中如何实现四种全局状态数据的统一管理?
四种全局状态数据 在实际开发当中,会遇到四种全局状态数据:异步数据(一般来自服务端).同步数据.同步数据又分为三种:localstorage.cookie.内存.在传统的 Vue3 当中,分别采用不同 ...
- 什么是 DOM
百度: DOM 定义:文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口.它是一种与平台和语言无关的应用程序接口(API),它可 ...
- JDBC后端实现查询功能逻辑
// 包名 package com.zhulx.JDBC; // 导入实例类 import com.zhulx.pojo.Account; import java.sql.*; import java ...
- python中队列deque的使用
队列,堆栈是程序开发中常用的两种数据存储模型.python中队列怎么运用呢?以下内容介绍了队列的使用和队列的函数. from collections import deque q = deque() ...
- NTPShell
NTPShell 获取地址:https://github.com/aplyc1a/NTPShell 通过NTP协议来负载C2数据. 编译 gcc ntp.c -lpthread -o ntp 使用 c ...