rocketMQ集群部署

RocketMQ集群部署

       RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛。但是它是如何进行部署的呢,以及它的高可用是如何实现的呢。那么就由我来为大家讲解一哈RocketMQ是如何进行部署的。本篇文章中没有对mq中各个角色进行讲解,本文也默认大家对mq的各个角色已经有了一定的认识。博主在未来一周中会对mq的基础部分以及如何使用进行详解。

一、环境准备

虚拟机、JDK、RocketMQ环境包,

二、JDK、RocketMQ相关包准备

  版本 名称 官方下载地址
JDK 1.8

jdk-8u321-linux-x64.tar.gz

JDK官方下载地址
RocketMQ 4.5.2

rocketmq-all-4.5.2-bin-release.zip

rocketMQ官方下载地址

rocketmq-dashboard latest release rocketmq-dashboard-master.zip rocketMQ控制台下载地址

 

三、部署到Linxu系统并解压

上传文件可以使用XShell。

1、如果没有lrzsz工具,可以安装,否则:跳过这一步。命令:yum install lrzsz

2、上传:rz + 上传的文件

3、上传完所有的文件,进行解压。

4、jdk解压:tar -zxvf jdk-8u321-linux-x64.tar.gz  -C /opt/jdk

5、rocketMQ解压:unzip -d  /opt/rocketMQ rocketmq-all-4.5.2-bin-release.zip

6、rocketmq-dashboard在windows10解压。并修改一些配置,打包就可以使用了。具体的在本文最后一个目录有讲解。

7、配置JDK环境变量:(大家可能有疑惑为啥会配置JDK环境变量,原因:rocketMQ是JAVA语言开发出来的,所有要运行rocketMQ就必须安装JDK的环境。)

1、编辑/etc/profile文件
     命令:vim /etc/profile
2、配置环境变量:
     export JAVA_HOME=/opt/soft/jdk1.8.0_261
     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
效果:

 

9、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、修改mq的配置。 runserver.sh与runbroker.sh 

  原因:我启动的虚拟机的内存设置的是3G,而mq默认的JVM最小的堆内容是8G,太大了,不修改将无法启动。

  修改命令:vim /mq目录/bin/runserver.sh,或vim /mq目录/bin/runbroker.sh ,大家可以根据虚拟机大小自行修改。如果想了解更多的这个可以了解JVM相关的知识。

 

1 1、runserver.sh
2   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m"
3 2、runnbroker.sh
4   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=/opt/rocketmq/store # commitLog存储路径 storePathCommitLog=/opt/rocketmq/commitlog # 消费队列存储路径 storePathConsumeQueue=/opt/rocketmq/consumequeue # 消息索引存储路径 storePathIndex=/opt/rocketmq/index # checkpoint 文件存储路径 storeCheckpoint=/opt/rocketmq/checkpoint # abort 文件存储路径 abortFile=/opt/rocketm/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

 


broker-b-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=/opt/rocketmq/slave/store # commitLog存储路径 storePathCommitLog=/opt/rocketmq/slave/commitlog # 消费队列存储路径 storePathConsumeQueue=/opt/rocketmq/slave/consumequeue # 消息索引存储路径 storePathIndex=/opt/rocketmq/slave/index # checkpoint 文件存储路径 storeCheckpoint=/opt/rocketmq/slave/checkpoint # abort 文件存储路径 abortFile=/opt/rocketm/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=/opt/rocketmq/store 存储路径

storePathCommitLog=/opt/rocketmq/commitlog commitLog存储路径

storePathConsumeQueue=/opt/rocketmq/consumequeue 消费队列存储路径

storePathIndex=/opt/rocketmq/index消息索引存储路径

storeCheckpoint=/opt/rocketmq/checkpoint checkpoint 文件存储路径

abortFile=/opt/rocketm/abort abort 文件存储路径

4、192.168.0.130虚拟机重复上面的步骤即可。
5、两台虚拟机都已经部署完成了,开始对mq集群进行启动吧。先进入mq中bin目录中,如果配置了MQ的环境变量,就没必要进入bin目录中

1、先启动两台机子上的nameServer。nohup sh mqnamesrv &
2、在启动mq中129机子上的broker的节点。
集群中a主节点:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-a.properties &
集群中b从节点:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-b-s.properties &
3、启动的效果:

4、对130机子重复操作即可。

6、到这里,集群我们就部署完成了,但是在这里我们肯定有疑问我们怎么看到他就是部署成功了。要不我们写一段代码来进行测试。不要急,官方虽然提供了例子来操作,但是我们只能看到一堆的控制台数据呈现,不太好看。所以官方就提供了一个用于b端的页面的控制台。那我们就来对其进行配置部署吧。

五、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系统中。

3、启动dashborad。

nohup java -jar /opt/soft/rocketmq-dashboard-1.0.1-SNAPSHOT.jar &

查看 cat nohup.out ,看到这个就说明成功了。

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

 

 

posted @ 2022-03-14 23:11  爱吃蜂蜜的熊  阅读(1001)  评论(0编辑  收藏  举报