RocketMQ双主双从同步集群部署

2023-10-17 17:58:41 浏览数 (2)

RocketMQ双主双从同步集群部署

服务器环境:

服务器IP

操作系统

备注

192.168.8.16

Centos7.5

JDK(1.8 )、RocketMQ(5.1.2)

192.168.8.18

Centos7.5

JDK(1.8 )、RocketMQ(5.1.2)

RocketMQ下载地址:https://rocketmq.apache.org/download/

双主双从同步集群部署:

服务器IP

broker名称

备注

192.168.8.16

broker-a

a主节点

192.168.8.16

broker-b-s

b从节点

192.168.8.18

broker-b

b主节点

192.168.8.18

broker-a-s

a从节点

创建安装目录并存放安装包目录

代码语言:javascript复制
mkdir /domain

关闭防火墙、沙盒

代码语言:javascript复制
systemctl stop firewalld  && systemctl disable firewalld

vim /etc/selinux/config
#修改
ELINUX=disabled

#重启
reboot

一、安装JDK环境


1.1 上传安装包

1.2 解压安装包

代码语言:javascript复制
[root@localhost ~]# tar -zxf  /domain/jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@localhost ~]# mv /usr/local/jdk1.8.0_171  /usr/local/java

1.3 编写环境变量文件

代码语言:javascript复制
[root@localhost ~]# vim /etc/profile
#尾部添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
[root@localhost ~]# source /etc/profile

1.4 验证JDK版本

代码语言:javascript复制
[root@localhost ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

二、安装RocketMQ


1.1 解压安装包

代码语言:javascript复制
 unzip /domain/rocketmq-all-5.1.2-bin-release.zip -d /domain/

1.2 【192.168.8.16】修改配置文件

  • 修改运行内存可编辑runserver.sh与runbroker.sh(需要的修改,不需要跳过
代码语言:javascript复制
1、bin/runserver.sh
   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m"
2、bin/runnbroker.sh
   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1G -Xmn128m"
  • 创建rocketMQ存储目录
代码语言:javascript复制
mkdir /domain/rocketMQ
  • 修改conf目录中2m-2s-sync目录中的配置文件
代码语言:javascript复制
vim /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-a.properties
# 所属集群名字
brokerClusterName=test
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-a
# 0 表示Master, > 0 表示slave
brokerId=0
# 注册中心,可使用集群模式
namesrvAddr=192.168.8.16:9876;192.168.8.18: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=/domain/rocketMQ/store
# commitLog存储路径
storePathCommitLog=/domain/rocketMQ/commitlog
# 消费队列存储路径
storePathConsumeQueue=/domain/rocketMQ/consumequeue
# 消息索引存储路径
storePathIndex=/domain/rocketMQ/index
# checkpoint 文件存储路径
storeCheckpoint=/domain/rocketMQ/checkpoint
# abort 文件存储路径
abortFile=/domain/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配置
代码语言:javascript复制
cat /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-b-s.properties
# 所属集群名字
brokerClusterName=test
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-b-s
# 0 表示Master, > 0 表示slave
brokerId=1
# 注册中心,可使用集群模式
namesrvAddr=192.168.8.16:9876;192.168.8.18: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=/domain/rocketMQ/slave/store
# commitLog存储路径
storePathCommitLog=/domain/rocketMQ/slave/commitlog
# 消费队列存储路径
storePathConsumeQueue=/domain/rocketMQ/slave/consumequeue
# 消息索引存储路径
storePathIndex=/domain/rocketMQ/slave/index
# checkpoint 文件存储路径
storeCheckpoint=/domain/rocketMQ/slave/checkpoint
# abort 文件存储路径
abortFile=/domain/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

1.3 【192.168.8.18】修改配置文件

与192.168.8.16的区别在于修改的文件名不同,我把详细配置一样放在下面

  • 修改运行内存可编辑runserver.sh与runbroker.sh(需要的修改,不需要跳过
代码语言:javascript复制
1、bin/runserver.sh
   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m"
2、bin/runnbroker.sh
   JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1G -Xmn128m"
  • 创建rocketMQ存储目录
代码语言:javascript复制
mkdir /domain/rocketMQ
  • 修改conf目录中2m-2s-sync目录中的配置文件
代码语言:javascript复制
vim /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-b.properties
# 所属集群名字
brokerClusterName=test
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-b
# 0 表示Master, > 0 表示slave
brokerId=0
# 注册中心,可使用集群模式
namesrvAddr=192.168.8.16:9876;192.168.8.18: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=/domain/rocketMQ/store
# commitLog存储路径
storePathCommitLog=/domain/rocketMQ/commitlog
# 消费队列存储路径
storePathConsumeQueue=/domain/rocketMQ/consumequeue
# 消息索引存储路径
storePathIndex=/domain/rocketMQ/index
# checkpoint 文件存储路径
storeCheckpoint=/domain/rocketMQ/checkpoint
# abort 文件存储路径
abortFile=/domain/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配置
代码语言:javascript复制
cat /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-a-s.properties
# 所属集群名字
brokerClusterName=test
# broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配)
brokerName=broker-a-s
# 0 表示Master, > 0 表示slave
brokerId=1
# 注册中心,可使用集群模式
namesrvAddr=192.168.8.16:9876;192.168.8.18: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=/domain/rocketMQ/slave/store
# commitLog存储路径
storePathCommitLog=/domain/rocketMQ/slave/commitlog
# 消费队列存储路径
storePathConsumeQueue=/domain/rocketMQ/slave/consumequeue
# 消息索引存储路径
storePathIndex=/domain/rocketMQ/slave/index
# checkpoint 文件存储路径
storeCheckpoint=/domain/rocketMQ/slave/checkpoint
# abort 文件存储路径
abortFile=/domain/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

1.4 关键配置详解:

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 文件存储路径

1.5 启动两台服务器的nameServer

代码语言:javascript复制
cd /domain/rocketmq-all-5.1.2-bin-release/bin
nohup sh mqnamesrv -> namesrc.log  2>&1 &

1.6 分别启动两台服务器的broker的节点

1.6.1 【192.168.8.16】启动a主节点、b从节点
代码语言:javascript复制
#a主节点
cd /domain/rocketmq-all-5.1.2-bin-release/bin
nohup sh mqbroker -c /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-a.properties -> broker-a.log  2>&1 &
代码语言:javascript复制
#b从节点
cd /domain/rocketmq-all-5.1.2-bin-release/bin
nohup sh mqbroker -c /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-b-s.properties -> broker-b-s.log  2>&1 &
1.6.2 【192.168.8.18】启动b主节点、a从节点
代码语言:javascript复制
#b主节点
cd /domain/rocketmq-all-5.1.2-bin-release/bin
nohup sh mqbroker -c /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-b.properties -> broker-b.log  2>&1 &
代码语言:javascript复制
#a从节点
cd /domain/rocketmq-all-5.1.2-bin-release/bin
nohup sh mqbroker -c /domain/rocketmq-all-5.1.2-bin-release/conf/2m-2s-sync/broker-a-s.properties -> broker-a-s.log  2>&1 &

1.7 启动效果

两台都一样

1.8 常用启停命令:

代码语言:javascript复制
sh mqshutdown broker  停止broker

sh mqshutdown namesrv 停止namesrv

三、rocketmq-dashboard 控制台部署


下载地址: https://github.com/apache/rocketmq-dashboard

1.1 下载安装包到电脑主机编写application.yml配置文件

代码语言:javascript复制
文件位置:rocketmq-dashboard-mastersrcmainresourcesapplication.yml

右键使用记事本打开

修改以下内容为节点IP

代码语言:javascript复制
    namesrvAddrs:
      - 192.168.8.16:9876
      - 192.168.8.18:9876

编辑完成后保存退出!

1.2 将rocketmq-dashboard-master打包

1.2.1 如果主机有java环境、maven环境的直接进行打包就行

在pom.xml同级目录操作命令

代码语言:javascript复制
mvn clean package -Dmaven.test.skip=true

如果报错,根据报错原因进行解决:

  • 有可能是maven的版本过低,进行升级即可
  • 有可能用的自己的maven配置,部分依赖无法下载,通过指定项目本身pom.xml
代码语言:javascript复制
mvn clean package -Dmaven.test.skip=true -f C:Desktoprocketmq-dashboard-masterrocketmq-dashboard-masterpom.xml

打包成功后将jar包上传到服务器

1.2.2 linux安装maven进行打包

Maven工具安装:http://t.csdn.cn/IIZVH 将修改过application.yml配置的目录上传到服务器

代码语言:javascript复制
[root@localhost rocketmq-dashboard-master]# pwd
/root/rocketmq-dashboard-master/rocketmq-dashboard-master
[root@localhost rocketmq-dashboard-master]# ls
docs  frontend  LICENSE  NOTICE  package-lock.json  pom.xml  README.md  src  style  target

maven打包

代码语言:javascript复制
mvn clean package -Dmaven.test.skip=true -f pom.xml

成功界面:

如果有报错可能是因为maven版本太低,通过yum -y install maven安装版本为Apache Maven 3.0.5,版本太低导致报错,进行升级即可

1.3 启动rocketmq-dashboard 控制台

代码语言:javascript复制
cd /root/rocketmq-dashboard-master/rocketmq-dashboard-master/target
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar -> dashboard.log  2>&1 &

查看日志成功启动:

关闭防火墙

代码语言:javascript复制
方式一:建议测试环境
1、关闭防火墙。
systemctl stop firewalld
方式二:生产环境使用
1、开放指定的端口号:firewall-cmd --zone=public --add-port=8080/tcp --permanent
2、重启防火墙:firewall-cmd --reload
注意:使用方式二,就需要将nameServer 与 broker 的端口也需要开放出来。使用了那个端口就必须开放出来,否则会被防火墙给阻挡。

访问rocketmq-dashboard 控制台 访问http://ip:8080

1.4 开启鉴权登录

对resource下的application.yml文件进行编辑

对resource下的user.properties修改

用户名=密码,角色:1、管理员 2、普通用户

重新打包

代码语言:javascript复制
cd <pom.xml同级目录>
mvn clean package -Dmaven.test.skip=true -f pom.xml

运行rocketmq-dashboard 控制台

代码语言:javascript复制
cd /root/rocketmq-dashboard-master/rocketmq-dashboard-master/target

访问rocketmq-dashboard 控制台 访问http://ip:8080

0 人点赞