🎈 作者:互联网-小啊宇
🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护等领域。
🎈 博客首页:CSDN【互联网-小阿宇】 、阿里云【互联网-小阿宇】
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
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从节点 |
创建安装目录并存放安装包目录
mkdir /domain
关闭防火墙、沙盒
systemctl stop firewalld && systemctl disable firewalld
vim /etc/selinux/config
#修改
ELINUX=disabled
#重启
reboot
一、安装JDK环境
1.1 上传安装包
1.2 解压安装包
[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 编写环境变量文件
[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版本
[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 解压安装包
unzip /domain/rocketmq-all-5.1.2-bin-release.zip -d /domain/
1.2 【192.168.8.16】修改配置文件
- 修改运行内存可编辑runserver.sh与runbroker.sh(
需要的修改,不需要跳过
)
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存储目录
mkdir /domain/rocketMQ
- 修改conf目录中2m-2s-sync目录中的配置文件
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配置
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(
需要的修改,不需要跳过
)
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存储目录
mkdir /domain/rocketMQ
- 修改conf目录中2m-2s-sync目录中的配置文件
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配置
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
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从节点
#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 &
#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从节点
#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 &
#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 常用启停命令:
sh mqshutdown broker 停止broker
sh mqshutdown namesrv 停止namesrv
三、rocketmq-dashboard 控制台部署
下载地址:
https://github.com/apache/rocketmq-dashboard
1.1 下载安装包到电脑主机编写application.yml配置文件
文件位置:rocketmq-dashboard-master\src\main\resources\application.yml
右键使用记事本打开
修改以下内容为节点IP
namesrvAddrs:
- 192.168.8.16:9876
- 192.168.8.18:9876
编辑完成后保存退出!
1.2 将rocketmq-dashboard-master打包
1.2.1 如果主机有java环境、maven环境的直接进行打包就行
在pom.xml同级目录操作命令
mvn clean package -Dmaven.test.skip=true
如果报错,根据报错原因进行解决:
- 有可能是maven的版本过低,进行升级即可
- 有可能用的自己的maven配置,部分依赖无法下载,通过指定项目本身pom.xml
mvn clean package -Dmaven.test.skip=true -f C:\Desktop\rocketmq-dashboard-master\rocketmq-dashboard-master\pom.xml
打包成功后将jar包上传到服务器
1.2.2 linux安装maven进行打包
Maven工具安装:http://t.csdn.cn/IIZVH
将修改过application.yml配置的目录上传到服务器
[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打包
mvn clean package -Dmaven.test.skip=true -f pom.xml
成功界面:
如果有报错可能是因为maven版本太低,通过yum -y install maven安装版本为Apache Maven 3.0.5,版本太低导致报错,进行升级即可
1.3 启动rocketmq-dashboard 控制台
cd /root/rocketmq-dashboard-master/rocketmq-dashboard-master/target
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar -> dashboard.log 2>&1 &
查看日志成功启动:
关闭防火墙
方式一:建议测试环境
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、普通用户
重新打包
cd <pom.xml同级目录>
mvn clean package -Dmaven.test.skip=true -f pom.xml
运行rocketmq-dashboard 控制台
cd /root/rocketmq-dashboard-master/rocketmq-dashboard-master/target
访问rocketmq-dashboard 控制台
访问http://ip:8080