rocketMQ集群双主双从同步模式(2m-2s-sync)搭建

目标:

简单搭建一个双主双从同步的rocketMq集群。

包含一个nameserver集群,一个broker集群。部署一个监控端。

 
去apache官网( http://rocketmq.apache.org/release_notes/release-notes-4.6.0/)
下载最新的rocketmq发行版,
我用的是4.6版本(   rocketmq-all-4.6.0-bin-release.zip);
下载二进制包(zip),解压路径我指定的是/usr/local/mq/rocketmq/目录下
另外需要JDK环境,此处不做详细说明;
 

一、准备工作

1)、服务器环境
规划:本地启动两台虚拟机;
序号
IP
角色
架构模式
1
192.168.75.128
nameserver,brokerserver
Master1,Slave2
2
192.168.75.129
nameserver,brokerserver
Master2,Slave1
 2)、Host添加信息(两台机器都要执行)
编辑hosts文件,添加域名信息
vim /etc/hosts
# nameserver
192.168.75.128 rocketmq-nameserver1
192.168.75.129 rocketmq-nameserver2
# broker
192.168.75.128 rocketmq-master1
192.168.75.128 rocketmq-slave2
192.168.75.129 rocketmq-master2
192.168.75.129 rocketmq-slave1
保存之后,重启网卡服务
systemctl restart network
 
3)、防火墙配置(两台机器都要执行)
可以开放端口,此处本地实现,简单粗暴点儿,直接关闭防火墙;
#检查状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#禁止防火墙开机启动
systemctl disable firewalld
 
4)、环境变量配置
编辑profile文件,添加rocketmq环境变量
vim /etc/profile 
# set rocketmq
ROCKETMQ_HOME=/usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
保存之后执行命令重新加载
source /etc/profile
   
5)、创建消息存储路径
因为同一台机器主从节点共用存储路径会冲突报错,这里我们分别创建两个目录避坑,我们在下一步中配置文件就用对应的路径就可以了;
#主节点使用目录
mkdir /usr/local/mq/rocketmq/mstore
mkdir /usr/local/mq/rocketmq/mstore/commitlog
mkdir /usr/local/mq/rocketmq/mstore/consumequeue
mkdir /usr/local/mq/rocketmq/mstore/index
 
#从节点使用目录
mkdir /usr/local/mq/rocketmq/store
mkdir /usr/local/mq/rocketmq/store/commitlog
mkdir /usr/local/mq/rocketmq/store/consumequeue
mkdir /usr/local/mq/rocketmq/store/index
 

二、broker配置文件

配置文件修改如下:
配置文件位置在conf文件目录下。
我们使用2m-2s-sync文件夹里面的配置,这个就是对应双主-双从-同步集群
下面配置文件可直接使用:
各配置文件主要区别有主要有以下几个点:brokerName、brokerId、listenPort、brokerRole、flushDiskType、存储路径;
 
首先对192.168.75.128机器上要部署的master1和slave2配置文件进行修改:
 
编辑broker-a.properties:
 
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样;主从节点一样,也就是这个值区分broker组的;
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave;同一个组中区分主从的标识,只能有一个主;
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/mq/rocketmq/store
#commitLog存储路径
storePathCommitLog=/usr/local/mq/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/mq/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/mq/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/usr/local/mq/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/mq/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=ASYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

编辑broker-b-s.properties:
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/mq/rocketmq/store
#commitLog存储路径
storePathCommitLog=/usr/local/mq/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/mq/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/mq/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/usr/local/mq/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/mq/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

然后对192.168.75.129机器上要部署的master2和slave1配置文件进行修改:
 
编辑broker-b.properties:
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/mq/rocketmq/mstore
#commitLog存储路径
storePathCommitLog=/usr/local/mq/rocketmq/mstore/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/mq/rocketmq/mstore/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/mq/rocketmq/mstore/index
#checkpoint 文件存储路径
storeCheckPoint=/usr/local/mq/rocketmq/mstore/checkpoint
#abort 文件存储路径
abortFile=/usr/local/mq/rocketmq/mstore/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=ASYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

编辑broker-a-s.properties:
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/mq/rocketmq/store
#commitLog存储路径
storePathCommitLog=/usr/local/mq/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/mq/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/mq/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/usr/local/mq/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/mq/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER    异步复制Master
#- SYNC_MASTER     同步双写Master
#- SLAVE    从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH    异步刷盘
#- SYNC_FLUSH     同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

 

三、修改启动脚本

修改配置文件runserver.sh,runbroker.sh
主要是修改JVM参数:因为rocketmq默认配置的JVM参数太大,本地资源有限,所以就改小点儿;
cd /usr/local/mq/rocketmq/rocketmq-all- 4.6.0-bin-release/bin
进入编辑 vim runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
进入编辑 vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
两台机器上的都要修改;

四、服务启动

启动nameserver集群
分别在192.168.75.128和192.168.75.129上启动nameServer
cd /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/bin
nohup sh mqnamesrv &
启动broker集群
在192.168.75.128上启动master1和slave2
master1:
cd /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/bin
nohup sh mqbroker -c /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/conf/2m-2s-sync/broker-a.properties &
slave2:
cd /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/bin
nohup sh mqbroker -c /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/conf/2m-2s-sync/broker-b-s.properties &
在192.168.75.129上启动master2和slave1
master2:
cd /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/bin
nohup sh mqbroker -c /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/conf/2m-2s-sync/broker-b.properties &
slave1:
cd /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/bin
nohup sh mqbroker -c /usr/local/mq/rocketmq/rocketmq-all-4.6.0-bin-release/conf/2m-2s-sync/broker-a-s.properties &

五、部署一个服务监控端

https://github.com/apache/rocketmq-externals
去这个网址下载rocketmq扩展项目代码;
本地解压目录如下
rocketMQ集群双主双从同步模式(2m-2s-sync)搭建_第1张图片
我们需要的就是rocketmq-console这个项目;
该项目是springboot开发的,我们进入项目目录下本地用maven,打个jar包,然后将jar包上传到服务器启动就可以了;
此处要【注意】:该项目需要对接nameserver集群进行监控,所以要去配置nameserver集群地址:
去resource下找到application.properties文件进行编辑
指定nameSrvAddr为你的nameserver集群信息就可以了,用分号分隔;
然后回到项目根目录打包
mvn package -Dmaven.test.skip=true
等待打包完成.......
去target下面拷贝jar包上传到任意一台虚机任意位置
然后用nohup java -jar  rocketmq-console-ng-1.0.1
启动完成,在本地浏览器访问8080端口就可以了(默认为8080端口);
 
 
 
 
 
 

你可能感兴趣的:(rocketMQ)