上面就是我参考的文档。

第一步  首先2主2从搭建需要至少2台的虚拟机

第二步  将虚拟机的环境搭建好,特别是Java环境,jdk最好是1.8版本

第三步  去官网下载rocketmq

docker部署rocketmq主从切换_文件存储

一定要下这种的,这种可以直接扔到服务器上 unzip就可以解压就可以用,另一个还需要编译,因为咋传这个资源都有重复的,所以就不传了。

第四步   修改rocketmq的配置文件

docker部署rocketmq主从切换_服务器_02

/home/rocketmq/conf/2m-2s-async 在这个目录下的

docker部署rocketmq主从切换_线程池_03

先改broker-a.properties的配置

#所属集群名字
 brokerClusterName=xxxxxx(自己想个集群名字)
 #broker名字,注意此处不同的配置文件填写的不一样
 brokerName=broker-a
 #0 表示Master, > 0 表示slave
 brokerId=0
 #nameServer 地址,分号分割
 namesrvAddr=namesrv1:9876;namesrv2:9876(这里跟namesrv启动的服务器以及要开的端口)
 #在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
 defaultTopicQueueNums=4
 #是否允许Broker 自动创建Topic,建议线下开启,线上关闭
 autoCreateTopicEnable=true
 #是否允许Broker自动创建订阅组,建议线下开启,线上关闭
 autoCreateSubscriptionGroup=true
 #Broker 对外服务的监听端口
 listenPort=10911
 #删除文件时间点,默认是凌晨4点
 deleteWhen=00 (我这里改为0点)
 #文件保留时间,默认48小时,单位是小时,这里保留的是3天
 fileReservedTime=72
 #commitLog每个文件的大小默认1G
 mapedFileSizeCommitLog=1073741824
 #ConsumeQueue每个文件默认存30W条,根据业务情况调整
 mapedFileSizeConsumeQueue=300000
 #destroyMapedFileIntervalForcibly=120000
 #redeleteHangedFileInterval=120000
 #检测物理文件磁盘空间
 diskMaxUsedSpaceRatio=88
#存储路径
 storePathRootDir=/home/rocketmq/store
 #commitLog存储路径
 storePathCommitLog=/home/rocketmq/store/commitlog
 #消费队列存储路径
 storePathConsumeQueue=/home/rocketmq/store/consumequeue
 #消息索引存储路径
 storePathIndex=/home/rocketmq/store/index
 #checkpoint 文件存储路径
 storeCheckpoint=/home/rocketmq/store/checkpoint
 #abort 文件存储路径
 abortFile=/home/rocketmq/store/abort
 #限制的消息大小
 maxMessageSize=65536
 # flushCommitLogLeastPages=4
 # flushConsumeQueueLeastPages=2
 # flushCommitLogThoroughInterval=10000
 # flushConsumeQueueThoroughInterval=60000
 # Broker 的角色
 #ASYNC_MASTER 异步复制Master
 #SYNC_MASTER 同步双写Master
 # SLAVE
 brokerRole=ASYNC_MASTER
 # 刷盘方式
 # - ASYNC_FLUSH 异步刷盘
 # - SYNC_FLUSH 同步刷盘
 flushDiskType=ASYNC_FLUSH
 #checkTransactionMessageEnable=false
 #发消息线程池数量
 #sendMessageTreadPoolNums=128
 #拉消息线程池数量
 #pullMessageTreadPoolNums=128


 

注意路径你们自己在那解压的文件就在那个路径下,我这是直接解压到home目录下的,因为虚拟机没空间了,我标红色的是特别注意的都需要修改的

mkdir logs  创建存放日志文件(下面都是,只是注意创建文件的路径要和你配置里一样路径)

mkdir store
 mkdir commitlog
 mkdir consumequeue
 mkdir index 
再改broker-a-s.properties的配置
#所属集群名字
brokerClusterName=xxxxx(名字需保持一致)
 #broker名字,注意此处不同的配置文件填写的不一样
 brokerName=broker-a-s
 #0 表示Master, > 0 表示slave
brokerId=1
 #nameServer 地址,分号分割
namesrvAddr=namesrv1:9876;1namesrv2:9876
 #在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
 defaultTopicQueueNums=4
 #是否允许Broker 自动创建Topic,建议线下开启,线上关闭
 autoCreateTopicEnable=true
 #是否允许Broker自动创建订阅组,建议线下开启,线上关闭
 autoCreateSubscriptionGroup=true
 #Broker 对外服务的监听端口
listenPort=10921
 #删除文件时间点,默认是凌晨4点
 deleteWhen=00
 #文件保留时间,默认48小时
 fileReservedTime=120
 #commitLog每个文件的大小默认1G
 mapedFileSizeCommitLog=1073741824
 #ConsumeQueue每个文件默认存30W条,根据业务情况调整
 mapedFileSizeConsumeQueue=300000
 #destroyMapedFileIntervalForcibly=120000
 #redeleteHangedFileInterval=120000
 #检测物理文件磁盘空间
 diskMaxUsedSpaceRatio=88
#存储路径
 storePathRootDir=/home/rocketmq/astore/store
 #commitLog存储路径
 storePathCommitLog=/home/rocketmq/astore/commitlog
 #消费队列存储路径
 storePathConsumeQueue=/home/rocketmq/astore/consumequeue
 #消息索引存储路径
 storePathIndex=/home/rocketmq/astore/index
 #checkpoint 文件存储路径
 storeCheckpoint=/home/rocketmq/astore/checkpoint
 #abort 文件存储路径
 abortFile=/home/rocketmq/astore/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

需注意的是主和从的配置除了brokerId、listenPort、brokerRole这几个是必须改的,但 存储路径 这个大家很容易弄混淆,若是主从都在一台服务器上,那主从的储存配置必须不同,否则一样无法启动。

其次因为我是模拟虚拟机,配置都不是很高,而mq默认的启动配置需要的内存都要求很高,所以若是直接默认启动,服务也会启动不了,因此需要修改

/home/rocketmq/bin
在这个目录下执行

vim runbroker.sh

docker部署rocketmq主从切换_线程池_04

修改这里配置降低启动配置。

以及

vim runserver.sh

docker部署rocketmq主从切换_服务器_05

都需要修改

修改成功后,便可以启动服务了。

同理2主2从,另一台也是如此配置。

先启动namesrv

mqnamesrv的启动命令 将日志打印至指定目录 方便启动失败后可以去看到底出现什么毛病
nohup sh /home/rocketmq/bin/mqnamesrv >/home/rocketmq/logs/mqnamesrv.log 2>&1 &

再执行jps -l命令看看服务是否启动

再启动主broker

将日志打印指定目录
nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a.properties > /home/rocketmq/logs/broker-a.log 2>&1 &
 

最后启动从broker

将日志打印指定目录

nohup sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a-s.properties > /home/rocketmq/logs/broker-a-s.log 2>&1 &

 

然后在服务器上jps -l看看 是否成功启动了两个broker 其中一个是主一个是从。

docker部署rocketmq主从切换_服务器_06

如图所示便是成功。

当然若是你是配置2主2从,那必须先把两个服务器上的namesrv都启动了再去启动broker,不然会少一个namesrv的服务注册,也会导致启动失败,因此启动优先级是 namesrv>broker-a>broker-a-s  (主要比从先启,这个不用我说了吧)

然后可以去找个 rocketmq控制台来看看你的集群部署,这个控制台也是有下的。

下好了,可以直接打开代码

docker部署rocketmq主从切换_线程池_07

找到application.properties修改里面的配置,port指的是这控制台启动所占用的端口号,name改为你前面部署的rocketmq集群的名字,namesrvaddr改为你部署的两台服务器的namesrv的ip地址和端口,isVIPChannel是指是否开通vip通道,有的话就开通没有就false就行。

配置什么都改完了,然后就可以打开网页查看你的rocketmq集群了

docker部署rocketmq主从切换_文件存储_08

这样就算是搭建成功啦,我一会去学怎么使用rocketmq。