RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛。但是它是如何进行部署的呢,以及它的高可用是如何实现的呢。那么就由我来为大家讲解一哈RocketMQ是如何进行部署的,后续会讲解底层架构设计。
一、环境准备
linux环境、JDK、RocketMQ环境包
二、JDK、RocketMQ相关包准备
1.jdk 官方下载地址 Java Archive | Oracle
2.RocketMQ 官方下载地址 Downloading the Apache RocketMQ Releases - Apache RocketMQ
3.这里是基于jdk1.8 + RocketMQ 4.9.3为例
三、部署到Linxu系统并解压
上传文件可以使用XShell。
1、如果没有lrzsz工具,可以安装,否则:跳过这一步。命令:yum install lrzsz
2、上传:rz + 上传的文件
3、上传完所有的文件,进行解压。
4、jdk解压:tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/jdk
5、rocketMQ解压:unzip -d /usr/local/rocketMQ rocketmq-all-4.9.3-bin-release.zip
6、rocketmq-dashboard在windows10解压。并修改一些配置,打包就可以使用了。具体的在本文最后一个目录有讲解。
7、配置JDK环境变量:rocketMQ依赖JDK的环境
1、编辑/etc/profile文件
命令:vim /etc/profile
2、配置环境变量:
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3、重新加载配置:source /etc/profile
4、查看是否配置成功。java -version
8、rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。
单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,导致mq无法使用,则我们服务器无法接受信息与消费信息等。
多主集群:只部署mq主节点,无部署从节点。优点:配置简单,单个Master宕机或重启维护对应用无影响,即使机器宕机不可恢复情况下,也有其他主节点进行写入操作,
消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
双主双从同步:部署四个节点,每个主节点都有一个从节点,主与从节点的信息通过同步的方式进行保存。优点:消息不会丢失,即:主节点挂了后,从节点的消息也不会造成丢失,只不过没法接受新消息,只能消费,但是能保证我消费的消息一定是准确的。缺点:客户端接受服务器响应时间长。可用于消息安全高的场景。
双主双从异步:与双主双从一致,只不过在主从数据传输是通过异步的方式,优点:客户端能快速的接收到服务器的消息,缺点:主节点挂的情况,从节点会丢失一部分消息。可用于允许消息丢失,吞吐量高的情景。
四、双主双从同步部署集群
1、启动虚拟机,至少准备两个ip,也可准备四个。
| ip | broker名称 | 说明 |
| 192.168.0.129 | broker-a | a主节点 |
| 192.168.0.129 | broker-b-s | b从节点 |
| 192.168.0.130 | broker-b | b主节点 |
| 192.168.0.130 | borker-a-s | a从节点 |
2、修改m
2、修改mq的配置。
runserver.sh与runbroker.sh
原因:我启动的虚拟机的内存设置的是3G,而mq默认的JVM最小的堆内容是8G,太大了,不修改将无法启动。
修改命令:vim /mq目录/bin/runserver.sh,或vim /mq目录/bin/runbroker.sh ,大家可以根据虚拟机大小自行修改。如果想了解更多的这个可以了解JVM相关的知识。
1、runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m"
2、runnbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1G -Xmn128m"
3、修改conf目录中2m-2s-sync目录中的配置文件
broker-a.properties
# 所属集群名字
brokerClusterName=myRocketmqCluster
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=0
# 注册中心,可使用集群模式
namesrvAddr=192.168.0.129:9876;192.168.0.130:9876
# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10933
# 删除文件时间点,默认是凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
# 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,用于数据存储,consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,而是记录一个数据的位置,记录好之后再把消息存到commitlog文件里
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/usr/local/rocketMQ/store
# commitLog存储路径
storePathCommitLog=/usr/local/rocketMQ/commitlog
# 消费队列存储路径
storePathConsumeQueue=/usr/local/rocketMQ/consumequeue
# 消息索引存储路径
storePathIndex=/usr/local/rocketMQ/index
# checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMQ/checkpoint
# abort 文件存储路径
abortFile=/usr/local/rocketMQ/abort
# 限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
# Broker 的角色
# ASYNC_MASTER 异步复制Master
# SYNC_MASTER 同步双写Master
# SLAVE
brokerRole=SYNC_MASTER
# 刷盘方式
# ASYNC_FLUSH 异步刷盘
# SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
checkTransactionMessageEnable=false
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
slave配置
broker-a-s.properties
# 所属集群名字
brokerClusterName=myRocketmqCluster
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=1
# 注册中心,可使用集群模式
namesrvAddr=192.168.0.129:9876;192.168.0.130:9876
# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10900
# 删除文件时间点,默认是凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
# 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,用于数据存储,consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,而是记录一个数据的位置,记录好之后再把消息存到commitlog文件里
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/usr/local/rocketMQ/slave/store
# commitLog存储路径
storePathCommitLog=/usr/local/rocketMQ/slave/commitlog
# 消费队列存储路径
storePathConsumeQueue=/usr/local/rocketMQ/slave/consumequeue
# 消息索引存储路径
storePathIndex=/usr/local/rocketMQ/slave/index
# checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMQ/slave/checkpoint
# abort 文件存储路径
abortFile=/usr/local/rocketMQ/slave/abort
# 限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
# Broker 的角色
# ASYNC_MASTER 异步复制Master
# SYNC_MASTER 同步双写Master
# SLAVE
brokerRole=SLAVE
# 刷盘方式
# ASYNC_FLUSH 异步刷盘
# SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
checkTransactionMessageEnable=false
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
这里面的核心:
brokerClusterName:只要是同一个集群里面的节点,都必须是这一个名称,可以自定义
brokerName:broker的名称,同一个broker的主从节点名称保持一致。
brokerId:broker的id标识。0:主节点,大于0都是从节点
namesrvAddr:nameSrv的注册中心地址,可以是集群模式,多个ip之间使用英文的;分隔
listenPort:监听端口,同一个ip地址下,端口不能保持一致,需修改
brokerRole:broker的角色,ASYNC_MASTER 异步复制Master,SYNC_MASTER 同步双写Master,SLAVE从节点专用。
flushDiskType:数据刷盘方式。ASYNC_FLUSH 异步刷盘,SYNC_FLUSH 同步刷盘
storePathRootDir=/usr/local/rocketMQ/store 存储路径
storePathCommitLog=/usr/local/rocketMQ/commitlog commitLog存储路径
storePathConsumeQueue=/usr/local/rocketMQ/consumequeue 消费队列存储路径
storePathIndex=/usr/local/rocketMQ/index消息索引存储路径
storeCheckpoint=/usr/local/rocketMQ/checkpoint checkpoint 文件存储路径
abortFile=/usr/local/rocketMQ/abort abort 文件存储路径
4、192.168.0.130虚拟机重复上面的步骤即可。
5、两台虚拟机都已经部署完成了,开始对mq集群进行启动吧。先进入mq中bin目录中,如果配置了MQ的环境变量,就没必要进入bin目录中
先启动两台机子上的nameServer。
nohup sh mqnamesrv -> namesrc.log 2>&1 &
2、在启动mq中130机子上的broker的节点。
集群中a主节点:
nohup sh mqbroker -c /usr/local/rocketMQ/rocketmq-4.9.3/conf/2m-2s-sync/broker-a.properties -> broker-a.log 2>&1 &
集群中b从节点:
nohup sh mqbroker -c /usr/local/rocketMQ/rocketmq-4.9.3/conf/2m-2s-sync/broker-a-s.properties -> broker-a-s.log 2>&1 &
3、启动的效果:

4、对130机子重复操作即可。
5、到这里,集群我们就部署完成了,但是在这里我们肯定有疑问我们怎么看到他就是部署成功了。要不我们写一段代码来进行测试。不要急,官方虽然提供了例子来操作,但是我们只能看到一堆的控制台数据呈现,不太好看。所以官方就提供了一个用于b端的页面的控制台。那我们就来对其进行配置部署吧。
常用启停命令:
sh mqshutdown broker 停止broker
sh mqshutdown namesrv 停止namesrv
五、rocketmq-dashboard 控制台部署
下载地址:
https://github.com/apache/rocketmq-dashboard
1、将下载好的压缩包解压到本地中,对resource目录中的application.yml的配置进行修改,目前我们只对nameServer的配置修改一哈,其他的配置我们先不动,注重看我加粗的地方。
rocketmq:
config:
# Linux系统中启动的nameServerd地址与端口
namesrvAddrs:
- 192.168.0.130:9876
- 192.168.0.129:9876
2、打包成jar包并上传到Linux系统中。打包的时间比较久,耐心等待。
打包注意事项:必须在src同级目录下使用这个命令(也就是可以看到pom.xml的目录)。mvn clean package -Dmaven.test.skip=true
如果看到这个就说明打包成功了。那就使用rz上传到Linux系统中。

PS:如果打包失败如图:

可能使用的是你自己的maven配置,有些包下载不下来,这里最好指定使用项目本身的pom.xml
mvn clean package -Dmaven.test.skip=true -f D:\rabbit_dashboard\rocketmq-dashboard-master\pom.xml
3、启动dashborad。
nohup java -jar /usr/local/rocketMQ/rocketmq-dashboard-1.0.1-SNAPSHOT.jar -> dashboard.log 2>&1 &
查看 日志 ,看到这个就说明成功了。

4、关闭防火墙或开放端口号。
方式一:建议新手使用
1、关闭防火墙。
systemctl stop firewalld
方式二:生产环境使用
1、开放指定的端口号:firewall-cmd --zone=public --add-port=8080/tcp --permanent
2、重启防火墙:firewall-cmd --reload
注意:使用方式二,就需要将nameServer 与 broker 的端口也需要开放出来。使用了那个端口就必须开放出来,否则会被防火墙给阻挡。
5、效果,如果集群中把我们部署的都显示出来了,说明我们部署的没问题,放心的使用吧。


6、鉴权登录。
既然有b端可视化页面,那肯定也有我们登录验证撒,不然任何人知道我们的ip与端口都能看到了。官方是不可能这个玩的。那我们下面就来配置一哈登录校验。
1、还是对resource下的application.yml文件进行编辑。
rocketmq:
config:
loginRequired: true
2、对resource下的user.properties修改 这个配置文件是专门来登录账号的
用户名 密码 角色:1:管理员 0:普通用户
admin=123456,1
2、修改完了,重新打包上传运行即可。
3、效果

本文详细介绍了RocketMQ的集群部署过程,包括环境准备、JDK和RocketMQ包的下载、在Linux系统的部署与解压、双主双从同步部署集群的步骤,以及rocketmq-dashboard控制台的配置和部署。适合需要搭建RocketMQ集群的读者参考。

3496

被折叠的 条评论
为什么被折叠?



