RocketMQ集群部署

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

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,也可准备四个。

ipbroker名称说明
192.168.0.129broker-aa主节点
192.168.0.129broker-b-sb从节点
192.168.0.130broker-bb主节点
192.168.0.130borker-a-sa从节点

 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、效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值