本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 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版本
解压
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:
查看日志,默认目录在 ~/logs/rocketmqlogs/ 下:
tail -f ~/logs/rocketmqlogs/namesrv.log
启动 Broker:
查看日志
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.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 默认为我们提供了几个模板
从上至下分别是 两主两从异步复制(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
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 日志,如下
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。
解决方法:手动创建该文件夹。
觉得有帮助点个赞吧!!!
原创不易,转载请注明出处。
微信扫一扫下方二维码即可关注我的公众号