centos8.4下搭建 rocketmq集群部署 4.9.4

7 篇文章 0 订阅
4 篇文章 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 9
    JAVA_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" ] ; then
      JAVA_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"
    else
      JAVA_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 <<EOF
brokerClusterName=mqCluster
#namesrver的地址,每一个broker配置全部nameserver信息
namesrvAddr=172.16.4.15:9876;172.16.4.16:9876,172.16.4.17:9876
brokerName=broker-a
#0为master,大于0为slave
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
listenPort=10911
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#自定义存储路径,根据需求进行配置绝对路径,默认是home目录下面
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
EOF

启动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 <<EOF
brokerClusterName=mqCluster
#namesrver的地址,每一个broker配置全部nameserver信息
namesrvAddr=172.16.4.15:9876;172.16.4.16:9876,172.16.4.17:9876
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH
listenPort=10911
defaultTopicQueueNums=4
#是否允许自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#自定义存储路径,根据需求进行配置绝对路径,默认是home目录下面
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
EOF

启动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
fi

if [ $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
fi

if [ $1 == "stop" ]
then   
sh /data/rocketmq/bin/mqshutdown broker

fi
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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值