天天看点

RocketMQ高可用集群搭建详解

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

文章目录

      • 1、RocketMQ简介
      • 2、单机安装部署
        • 2.1 系统环境
        • 2.2 下载解压
        • 2.3 修改初始内存
        • 2.4 启动服务
        • 2.5 发送接收消息测试
        • 2.6 关闭服务
      • 3、集群搭建
        • 3.1 配置集群
        • 3.2 防火墙配置
        • 3.3 启动集群
          • 3.3.1 启动 NameServer 集群
          • 3.3.2 启动 Master
          • 3.3.3 启动 Slave
      • 4、图形化管理控制台
      • 5、爬坑之路
        • 5.1 启动服务无反应
        • 5.2 启动broker服务提示如下错误

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版本

RocketMQ高可用集群搭建详解

解压

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

进入解压目录

RocketMQ高可用集群搭建详解

2.3 修改初始内存

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

修改 runserver.sh

vim bin/runserver.sh
           
RocketMQ高可用集群搭建详解

修改 runbroker.sh

vim bin/runbroker.sh
           
RocketMQ高可用集群搭建详解

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

2.4 启动服务

启动顺序:NameServer->Broker

启动 NameServer:

RocketMQ高可用集群搭建详解

查看日志,默认目录在 ~/logs/rocketmqlogs/ 下:

RocketMQ高可用集群搭建详解
tail -f ~/logs/rocketmqlogs/namesrv.log
           
RocketMQ高可用集群搭建详解

启动 Broker:

RocketMQ高可用集群搭建详解

查看日志

tail -f ~/logs/rocketmqlogs/broker.log
           
RocketMQ高可用集群搭建详解

2.5 发送接收消息测试

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

export NAMESRV_ADDR=localhost:9876
           

发送消息

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
           
RocketMQ高可用集群搭建详解

接收消息

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
           
RocketMQ高可用集群搭建详解

2.6 关闭服务

关闭 Broker

sh bin/mqshutdown broker
           
RocketMQ高可用集群搭建详解

关闭 NameServer

sh bin/mqshutdown namesrv
           
RocketMQ高可用集群搭建详解

3、集群搭建

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

IP 主机名 功能 Broker角色
192.168.1.210 rocketmqOS1 NameServer+Broker Master1
192.168.1.211 rocketmqOS2 NameServer+Broker Slave1
192.168.1.212 rocketmqOS3 NameServer+Broker Master2
192.168.1.213 rocketmqOS4 NameServer+Broker Slave2

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

3.1 配置集群

在 conf 目录下,rocketMQ 默认为我们提供了几个模板

RocketMQ高可用集群搭建详解

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

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

RocketMQ高可用集群搭建详解

四个配置文件分别是 主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

3.3.2 启动 Master

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

  • 192.168.1.210 rocketmqOS1 Master1
  • 192.168.1.212 rocketmqOS3 Master2
3.3.3 启动 Slave

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

  • 192.168.1.211 rocketmqOS2 Slave1
  • 192.168.1.213 rocketmqOS4 Slave2

全部启动完毕后,查看 broker 日志,如下

RocketMQ高可用集群搭建详解

NameServer 日志如下

RocketMQ高可用集群搭建详解

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

4、图形化管理控制台

rocketmq-console 是 RocketMQ 的扩展插件,是一个图形化管理控制台。

下载地址:https://github.com/apache/rocketmq-externals/releases

RocketMQ高可用集群搭建详解

下载解压后,这个项目是个 springboot 工程,所以可以来做一些改动,比如端口号和 NameServer 地址等。

我这里改动了端口,并且指定了 NameServer 的地址(有多个用分号隔开),如下

RocketMQ高可用集群搭建详解

运行项目,访问 http://localhost:8088/

RocketMQ高可用集群搭建详解

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

RocketMQ高可用集群搭建详解

目录下果然没有该文件夹,是版本bug。

解决方法:手动创建该文件夹。

觉得有帮助点个赞吧!!!

原创不易,转载请注明出处。

微信扫一扫下方二维码即可关注我的公众号
RocketMQ高可用集群搭建详解