RocketMQ高可用集群搭建详解

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。


1、RocketMQ简介

MQ(消息队列)在软件架构中是经常被使用的组件,特别是在分布式系统中,我们常见的MQ产品有 RabbitMQ、RocketMQ、Kafka等等,本文将对 RocketMQ 搭建高可用集群进行详解。

RocketMQ是使用Java语言开发的一款MQ产品。经过数年阿里双11的考验,性能与稳定性非常高。其没有遵循任何常见的MQ协议,而是使用自研协议。

官网:http://rocketmq.apache.org/
RocketMQ由四部分构成:Producer、Consumer、Broker和NameServer。


2、单机安装部署

2.1 系统环境

系统要求64位,jdk版本1.8及以上。


2.2 下载解压

下载地址:http://archive.apache.org/dist/rocketmq/
我这里选择4.9.0版本
在这里插入图片描述

解压

unzip rocketmq-all-4.9.0-bin-release.zip

进入解压目录
在这里插入图片描述


2.3 修改初始内存

此步骤根据实际情况,因为初始内存默认设置比较大,某些内存比较小的机器不修改可能启动不起来。

修改 runserver.sh

vim bin/runserver.sh

在这里插入图片描述

修改 runbroker.sh

vim bin/runbroker.sh

在这里插入图片描述

注:可以按照原始比例调整,比如 8g、8g、4g可对应改成2g、2g、1g


2.4 启动服务

启动顺序:NameServer->Broker

启动 NameServer

nohup sh bin/mqnamesrv &

在这里插入图片描述

查看日志,默认目录在 ~/logs/rocketmqlogs/ 下:
在这里插入图片描述

tail -f ~/logs/rocketmqlogs/namesrv.log

在这里插入图片描述

启动 Broker

nohup sh bin/mqbroker -n localhost:9876 &

在这里插入图片描述

查看日志

tail -f ~/logs/rocketmqlogs/broker.log

在这里插入图片描述


2.5 发送接收消息测试

官方文档上为我们提供了一个测试例子,在发送和接收之前需要先告诉客户端 NameServer 的地址,最简单可以使用环境变量NAMESRV_ADDR

export NAMESRV_ADDR=localhost:9876

发送消息

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

在这里插入图片描述

接收消息

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述


2.6 关闭服务

关闭 Broker

sh bin/mqshutdown broker

在这里插入图片描述

关闭 NameServer

sh bin/mqshutdown namesrv

在这里插入图片描述


3、集群搭建

本次搭建模式为双主双从异步复制,部署节点如下

IP主机名功能Broker角色
192.168.1.210rocketmqOS1NameServer+BrokerMaster1
192.168.1.211rocketmqOS2NameServer+BrokerSlave1
192.168.1.212rocketmqOS3NameServer+BrokerMaster2
192.168.1.213rocketmqOS4NameServer+BrokerSlave2

rocketmqOS2 为 rocketmqOS1 的从节点,rocketmqOS4 为 rocketmqOS3 的从节点。


3.1 配置集群

在 conf 目录下,rocketMQ 默认为我们提供了几个模板
在这里插入图片描述

从上至下分别是 两主两从异步复制(2m-2s-async)、两主两从同步复制(2m-2s-sync)、两主无从(2m-noslave)。

本次搭建使用两主两从异步复制,选用第一个模板即可,进入 conf/2m-2s-async 目录,如下
在这里插入图片描述

四个配置文件分别是 主1、主1对应的从、主2、主2对应的从,对应到我们集群就是 Master1、Slave1、Master2、Slave2。

各节点配置文件内容修改如下:

  • rocketmqOS1 Master1节点:broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
  • rocketmqOS2 Slave1节点:broker-a-s.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
  • rocketmqOS3 Master2节点:broker-b.properties
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876
  • rocketmqOS4 Slave2节点:broker-b-s.properties
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.210:9876;192.168.1.211:9876;192.168.1.212:9876;192.168.1.213:9876

注:每个节点只用到了其中一个配置文件,其余可删可不删,启动时指定是哪个配置文件就行。

配置文件各参数说明如下:

brokerId为0是Master,非0是Slave。
deleteWhen=04代表删除过期文件的时间为凌晨4点。
fileReservedTime=48 指定未发生更新的消息存储文件保留时间为48小时,48小时后过期,将被删除。
brokerRole=ASYNC_MASTER指定当前broker为异步复制Master。
flushDiskType=ASYNC_FLUSH指定刷盘策略为异步刷盘。
namesrvAddr指定NameServer的地址。

3.2 防火墙配置

在 rocketMQ 中 NameServer 服务端口默认为 9876、broker 与 producer、consumer 通讯默认端口为10911,Master 与 Slave 通讯默认端口为10912,还有个10909端口是 rocketmq-console 控制台VIP通道需要用到。

开启4个节点的9876、10911、10912、10909端口

firewall-cmd --add-port=9876/tcp --permanent --zone=public
firewall-cmd --add-port=10911/tcp --permanent --zone=public
firewall-cmd --add-port=10912/tcp --permanent --zone=public
firewall-cmd --add-port=10909/tcp --zone=public --permanent
firewall-cmd --reload

注:10909端口根据你的 rocketmq-console VIP通道是否开启自行设置,也就是 application.properties 里 rocketmq.config.isVIPChannel 为 true 或 false,rocketmq-console 相关知识可移步本文第4节。


3.3 启动集群
3.3.1 启动 NameServer 集群

分别启动4个节点的 NameServer

nohup sh bin/mqnamesrv &

3.3.2 启动 Master

分别启动 rocketmqOS1 和 rocketmqOS3 两个主机的 broker master,启动时指定我们配置的配置文件。

  • 192.168.1.210 rocketmqOS1 Master1
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
  • 192.168.1.212 rocketmqOS3 Master2
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &

3.3.3 启动 Slave

分别启动 rocketmqOS2 和 rocketmqOS4 两个主机的 broker slave,启动时指定我们配置的配置文件。

  • 192.168.1.211 rocketmqOS2 Slave1
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
  • 192.168.1.213 rocketmqOS4 Slave2
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &

全部启动完毕后,查看 broker 日志,如下
在这里插入图片描述

NameServer 日志如下
在这里插入图片描述

可以看到各节点已正常注册连接。


4、图形化管理控制台

rocketmq-console 是 RocketMQ 的扩展插件,是一个图形化管理控制台。
下载地址:https://github.com/apache/rocketmq-externals/releases
在这里插入图片描述

下载解压后,这个项目是个 springboot 工程,所以可以来做一些改动,比如端口号和 NameServer 地址等。
我这里改动了端口,并且指定了 NameServer 的地址(有多个用分号隔开),如下
在这里插入图片描述

运行项目,访问 http://localhost:8088/
在这里插入图片描述


5、爬坑之路

5.1 启动服务无反应

解决方法:修改初始内存,初始内存默认很大,主机内存太小的话无法启动。


5.2 启动broker服务提示如下错误

2021-08-28 16:08:18 ERROR DiskCheckScheduledThread1 - Error when measuring disk space usage, file doesn’t exist on this path: /root/store/commitlog
在这里插入图片描述

目录下果然没有该文件夹,是版本bug。
解决方法:手动创建该文件夹。



觉得有帮助点个赞吧!!!
原创不易,转载请注明出处。

微信扫一扫下方二维码即可关注我的公众号

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大佬超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值