centos8.4下搭建 rocketmq集群部署 4.9.4
创始人
2024-02-20 02:37:51
0

1.简单介绍
搭建rocketmq集群,nameserver至少3个节点,brokerserver采用2主2从同步,服务器资源多的,可以至少部署在7台服务器上,资源少的可以准备至少3台服务器

172.16.4.15nameserver
172.16.4.16nameserver
172.16.4.17nameserver
172.16.4.18broker-a master
172.16.4.20broker-a slave
172.16.4.19broker-b master
172.16.4.21broker-b slave

RocketMQ,阿里巴巴开源高性能分布式消息中间件,部署模型如下

在这里插入图片描述
Apache RocketMQ 部署架构上主要分为四部分:

生产者 Producer
发布消息的角色。Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。

消费者 Consumer
消息消费的角色。支持以推(push),拉(pull)两种模式对消息进行消费。同时也支持集群方式和广播方式的消费。提供实时消息订阅机制,可以满足大多数用户的需求。

名字服务器 NameServer
NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现。

主要包括两个功能:

Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;

路由信息管理,每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。Producer和Consumer通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常会有多个实例部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,客户端仍然可以向其它NameServer获取路由信息。

代理服务器 Broker
Broker主要负责消息的存储、投递和查询以及服务高可用保证。

NameServer几乎无状态节点,因此可集群部署,节点之间无任何信息同步。Broker部署相对复杂。

在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。

2.RocketMQ工作流程
2.1. 启动NameServer
启动NameServer。NameServer启动后监听端口,等待Broker、Producer、Consumer连接,相当于一个路由控制中心。

2.2. 启动 Broker
启动 Broker。与所有 NameServer 保持长连接,定时发送心跳包。心跳包中包含当前 Broker 信息以及存储所有 Topic 信息。注册成功后,NameServer 集群中就有 Topic跟Broker 的映射关系。

2.3. 创建 Topic
创建 Topic 时需要指定该 Topic 要存储在哪些 Broker 上,也可以在发送消息时自动创建Topic。

2.4. 生产者发送消息
生产者发送消息。启动时先跟 NameServer 集群中的其中一台建立长连接,并从 NameServer 中获取当前发送的 Topic存在于哪些 Broker 上,轮询从队列列表中选择一个队列,然后与队列所在的 Broker建立长连接从而向 Broker发消息。

2.5. 消费者接受消息
消费者接受消息。跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,然后开始消费消息。

3.集群模式介绍
3.1在conf目录下有以下目录:

2m-2s-async: 2主2从异步刷盘(吞吐量较大,但是消息可能丢失),
2m-2s-sync:2主2从同步刷盘(吞吐量会下降,但是消息更安全),
2m-noslave:2主无从(单点故障),然后还可以直接配置broker.conf,进行单点环境配置。
dleger:用来实现主从切换的。集群中的节点会基于Raft协议随机选举出一个leader,其他的就都是follower。通常正式环境都会采用这种方式来搭建集群,这个在之前的版本是没有的,之前的版本是不支持主从切换的

4.下载程序包并解压
4.1 分别在7台服务器上下载程序包,程序上本身没啥区别它的nameserver和broker是同一套程序,只是不同的启动脚本

#跳转到根目录
cd /
#创建 data 目录
mkdir data
#进入 data 目录
cd data/
#下载rocketmq
wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
#解压到data目录
unzip rocketmq-all-4.9.4-bin-release.zip
#创建 rocketmq 目录
mkdir rocketmq
#把解压完毕的程序文件转移到新目录(或者你直接改名原解压目录)
mv rocketmq-all-4.9.4-bin-release ./rocketmq
#删除原目录
rm -r rocketmq-all-4.9.4-bin-release
#进入配置目录
cd /data/rocketmq/conf
#修改日志默认目录
sed -i 's#${user.home}#/data/rocketmq#g' *.xml

4.2 搭建nameserver集群(3台服务器)
#启动程序

nohup sh /data/rocketmq/bin/mqnamesrv &

查看日志是否启动成功

cat /data/rocketmq/logs/rocketmqlogs/namesrv.log

查看日志如果出现如下说明已经启动成功

Java HotSpot(TM) 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
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON

另外,该版本程序默认的运行内存是2g,如果需要调整,可以在程序的bin目录下对 runserver.sh 内容进行编辑,不过我这里改成512m

# Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ...# '1' means releases befor Java 9JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -r -n 's/.* version "([0-9]*).*$/\1/p')if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; thenJAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"elseJAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"fi

编辑完成保存后重启即可,其他2台服务器一样修改和启动就可以

4.3 搭建broker集群(四台服务器 主从+主从,sync同步刷新),每对主从的名称一致,brokerId 区分
4.3.1 首先更改运行内存
#进入bin目录

cd /data/rocketmq/bin/

#如需更改,更改broker占用内存

vi runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"

4.3.2 其次更改配置文件并运行

#进入主从同步配置文件存放目录

cd /data/rocketmq/conf/2m-2s-sync
[root@VM-8-17-centos conf]# cd 2m-2s-async 
[root@VM-8-17-centos 2m-2s-async]# ls
broker-a.properties  broker-a-s.properties  broker-b.properties  broker-b-s.properties

master:
#编辑broker-a的master配置文件

cat > broker-a.properties <

启动master程序

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

slave:
#编辑broker-a的slave配置文件

cat > broker-a-s.properties <

启动slave程序

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

可以在日志中查看broker是否启动成功
#查看端口占用

netstat -ntulp

同理
按照同样配置修改broker-b的对应配置文件,除了

brokerName=broker-b

其他都不变,一一对应即可,然后使用对应的配置文件启动broker-b的程序

启动 broker-b 的master

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

查看日志是否启动成功

启动 broker-b 的slave

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

为了每次启动方便写了启动脚本放在了/data/rocketmq
nameserver启动脚本

#!/bin/bash
if [ $1 == "start" ]
then
nohup sh /data/rocketmq/bin/mqnamesrv >>/data/rocketmq/logs/namesrv.log 2>&1 &
echo 开启rocketmq namessrv
fiif [ $1 == "stop" ]
then   
sh /data/rocketmq/bin/mqshutdown namesrv
fi
echo 关闭rocketmq namessrv

broker启动脚本

#!/bin/bash
if [ $1 == "start" ]
then
nohup sh /data/rocketmq/bin/mqbroker -n 127.0.0.1:9876 >>/data/rocketmq/logs/brokersrv.log 2>&1 &
echo 开启rocketmq broker
fiif [ $1 == "stop" ]
then   
sh /data/rocketmq/bin/mqshutdown brokerfi
echo 关闭rocketmq broker

安装消息看板平台(选择性安装)
源码下载地址:

https://codeload.github.com/apache/rocketmq-externals/zip/refs/tags/rocketmq-console-1.0.0

下载下来的源码是springboot框架,根据里边的文档添加上nameserver的地址端口,启动它,就可以看到直观的消息队列集群了

server.contextPath=/
server.port=8001
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=172.16.4.15:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

相关内容

热门资讯

做一个有道德的人手抄报内容 做一个有道德的人手抄报内容导语:人们常说:道德是石,敲出希望之火;道德是火,点燃希望之灯;道德是灯,...
小学生清明节手抄报画 小学生清明节手抄报画  每逢清明节(当然其它日子亦可),我们应前往先人的长眠处祭奠,献上一束鲜花,献...
交通规则手抄报 交通规则手抄报大全  交通规则记得牢,一路平安大家好。做交通安全手抄报可以提高学生的交通安全意识。下...
文明进校园手抄报内容   文明,是历史以来沉淀下来的,有益增强人类对客观世界的适应和认知、符合人类精神追求、能被绝大多数人...
剪纸爱心喜字剪法步骤 剪纸爱心喜字剪法步骤  想必上一辈老人都会用剪刀剪个大大的`喜字,尤其是在一些节日中,为了迎一个喜气...
科学优秀手抄报内容 科学优秀手抄报内容  无论在学习或是工作中,大家一定没少看到经典的手抄报吧,手抄报需要巧妙设计,精心...
我的中国梦手抄报 关于我的中国梦手抄报  梦想需要实践,实践需要指标,只有竖起标杆,定下指标才能在太阳下更好的实现梦想...
重阳节孝亲敬老手抄报内容   夕阳无限好,人间重晚情。  扶老养老传家久,  尊老敬老世泽长。  孝敬父母以情为上。  尊生老...
交通与安全手抄报大全   随着社会经济的发展,交通越来越发达的今天,交通安全俨然成为影响人们生命安全的重要因素之一。以下是...
旋转图形剪纸图解 旋转图形剪纸图解  中国剪纸是一种用剪刀或刻刀在纸上剪刻花纹,用于装点生活或配合其他民俗活动的民间艺...
小学生四年级交通安全手抄报图... 车辆自身的安全性能和车况对于安全出行也极为重要。对此,搭乘人可以通过了解车辆年检验车或定期保养的情况...
教师节手抄报内容资料 教师节手抄报内容资料大全  在各领域中,大家总少不了要接触手抄报吧,手抄报版面编排和美化设计也要围绕...
学生读书小报的图片 学生读书小报的图片  读书永远是我们提升我们自己最重要的一个方法,我们需要用读书来充实自己的人生,让...
节能减排手抄报图片 节能减排手抄报图片  能源来自大自然,节能保护大自然;能源属于大家,呵护需要你我。  (Y代表正确,...
立秋黑板报素材内容   立秋的介绍  立秋,是二十四节气中的第13个节气,更是干支历未月的结束以及申月的起始;时间在农历...
五年级语文小报图片 五年级语文小报图片大全  语文是基础教育课程体系中的一门教学科目,其教学的内容是语言文化,其运行的形...
清明节精美的手抄报图片 2020年清明节精美的手抄报图片  导语:清明节是我国的传统节日,你在清明节都有什么感想呢?接下来小...
冬至的手抄报 关于冬至的手抄报  每年农历冬至这天,不论贫富,饺子是必不可少的节日饭,关于冬至的手抄报。谚云:“十...
国庆节手抄报文字内容   手抄报是一种可传阅、可观赏、也可张贴的报纸的另一种形式。手抄报也是一种群众性的宣传工具。它就相当...
儿童数学手抄报 儿童数学手抄报大全  导语:数学改变人类的生活轨迹,数学改变了人类的居住的环境,数学对人类发展有着深...