RocketMQ双主双从环境搭建

news/2024/7/5 10:37:57

环境要求

64位操作系统,推荐 Linux/Unix/macOS

64位 JDK 1.8+

服务器准备

准备4台服务器两台master两台slave,如果服务器紧凑,则至少需要两台服务器相互master-slave

IP

HOSTS

172.*******.120

rocketmq-nameserver1 rocketmq-master1 rocketmq-master-salve2

172.*******.142

rocketmq-nameserver2 rocketmq-master2 rocketmq-master-salve1

准备版本包

配置hosts,上传RocketMQ包并解压(https://rocketmq.apache.org/zh/download/#rocketmq)选择Binary 下载,上传至/data/public/rocketmq

修改配置文件

生产高可用双主双从采用 SYNC_MASTER 同步双写SYNC_FLUSH 同步刷盘进行

172.******.120机器

修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-a.properties

#所属集群名字

brokerClusterName=test-rocketmq-cluster

#broker 名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer 地址,分号分割

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

#安装可视化界面使用,需要是IP,不能是host

#设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可)

brokerIP1=172.******.120

brokerIP2=172.******.120

#在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭

#进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核等等,所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。

autoCreateTopicEnable=false

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=fasle

#Broker 对外服务的监听端口

listenPort=10911

#删除文件时间点,默认凌晨 4 点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog 每个文件的大小默认 1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/public/rocketmq/store

#commitLog 存储路径

storePathCommitLog=/data/public/rocketmq/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/public/rocketmq/store/consumequeue

#消息索引存储路径

storePathIndex=/data/public/rocketmq/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/public/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/data/public/rocketmq/store/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=SYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

#sendMessageThreadPoolNums=128

#拉消息线程池数量

#pullMessageThreadPoolNums=128

修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-b-s.properties

#所属集群名字

brokerClusterName=test-rocketmq-cluster

#broker 名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

#0 表示 Master,>0 表示 Slave

brokerId=1

#nameServer 地址,分号分割

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

#安装可视化界面使用,需要是IP,不能是host

#设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可)

brokerIP1=172.******.120

#在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭

#进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核等等,所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。

autoCreateTopicEnable=fasle

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=fasle

#Broker 对外服务的监听端口,如果从节点是单独服务器,则可以使用默认端口19011

listenPort=10922

#删除文件时间点,默认凌晨 4 点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog 每个文件的大小默认 1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/public/rocketmq/slave/store

#commitLog 存储路径

storePathCommitLog=/data/public/rocketmq/slave/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/public/rocketmq/slave/store/consumequeue

#消息索引存储路径

storePathIndex=/data/public/rocketmq/slave/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/public/rocketmq/slave/store/checkpoint

#abort 文件存储路径

abortFile=/data/public/rocketmq/slave/store/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=SYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

#sendMessageThreadPoolNums=128

#拉消息线程池数量

#pullMessageThreadPoolNums=128

 172.******.142机器

修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-b.properties

#所属集群名字

brokerClusterName=test-rocketmq-cluster

#broker 名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer 地址,分号分割

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

#安装可视化界面使用,需要是IP,不能是host

#设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可)

brokerIP1=172.******.142

brokerIP2=172.******.142

#在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭

#进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核等等,所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。

autoCreateTopicEnable=false

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=false

#Broker 对外服务的监听端口

listenPort=10911

#删除文件时间点,默认凌晨 4 点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog 每个文件的大小默认 1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/public/rocketmq/store

#commitLog 存储路径

storePathCommitLog=/data/public/rocketmq/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/public/rocketmq/store/consumequeue

#消息索引存储路径

storePathIndex=/data/public/rocketmq/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/public/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/data/public/rocketmq/store/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=SYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

#sendMessageThreadPoolNums=128

#拉消息线程池数量

#pullMessageThreadPoolNums=128

修改vim /data/public/rocketmq/conf/2m-2s-sync/broker-a-s.properties

#所属集群名字

brokerClusterName=test-rocketmq-cluster

#broker 名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=1

#nameServer 地址,分号分割

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

#安装可视化界面使用,需要是IP,不能是host

#设置broker节点所在服务器的ip地址(**这个非常重要,主从模式下,从节点会根据主节点的brokerIP2来同步数据,#如果不配置,主从无法同步,brokerIP1设置为自己外网能访问的ip,服务器双网卡情况下必须配置,比如阿里云这$种,#主节点需要配置ip1和ip2,从节点只需要配置ip1即可)

brokerIP1=172.******.142

#在发送消息时,自动创建服务器不存在的 topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭

#进行发消息时,必须要指定topic,对于topic的设置有一个开关autoCreateTopicEnable,一#般在开发测试环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致#topic的设置不容易规范管理,没有统一的审核。所以在正式环境中会在Broker启动时#设置参数autoCreateTopicEnable = false。这样当需要增加topic时就需要在web管理界面上#添加即可。

autoCreateTopicEnable=false

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=false

#Broker 对外服务的监听端口,如果从节点是单独服务器,则可以使用默认端口19011

listenPort=10922

#删除文件时间点,默认凌晨 4 点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=120

#commitLog 每个文件的大小默认 1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/public/rocketmq/slave/store

#commitLog 存储路径

storePathCommitLog=/data/public/rocketmq/slave/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/public/rocketmq/slave/store/consumequeue

#消息索引存储路径

storePathIndex=/data/public/rocketmq/slave/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/public/rocketmq/slave/store/checkpoint

#abort 文件存储路径

abortFile=/data/public/rocketmq/slave/store/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=SYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

#sendMessageThreadPoolNums=128

#拉消息线程池数量

#pullMessageThreadPoolNums=128

创建目录(两台机器都要创建)

#创建主节点目录

mkdir /data/public/rocketmq/store:实际数据存储的位置

mkdir /data/public/rocketmq/store/commitlog:

mkdir /data/public/rocketmq/store/consumequeue:类似于数据库索引的文件结构,

mkdir /data/public/rocketmq/store/index:用于快速查询索引

#创建从节点目录

    mkdir /data/public/rocketmq/slave

mkdir /data/public/rocketmq/slave/store:实际数据存储的位置

mkdir /data/public/rocketmq/slave/store/commitlog:

mkdir /data/public/rocketmq/slave/store/consumequeue:类似于数据库索引的文件结构,

mkdir /data/public/rocketmq/slave/store/index:用于快速查询索引

修改启动参数脚本

组件建议内存至少8g,但是我们在开发环境就写成1g,小于1g可能起不来

vim /data/public/rocketmq/bin/runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

 

vim /data/public/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:PermSize=128m -XX:MaxPermSize=320m"

 

启动

顺序是先启动nameserver,再启动broker。关闭则是先关闭broker在关闭nameserver。生产环境切勿删除store文件夹,生产环境禁止使用kill -9 命令删除broker进程,使用bin/下的mqshutdown命令;

172.******.120机器172.*******.142机器

启动nameserver

# 首先启动Name Server

nohup sh mqnamesrv &

### 验证Name Server 是否启动成功

tail -f /root/logs/rocketmqlogs/namesrv.log

The Name Server boot success. serializeType=JSON

##关闭 sh mqshutdown namesrv

 

启动broker

172.******.120主节点正常启动

备注:nohup sh mqbroker -n 172.31.241.120:9876 -c /data/public/rocketmq/conf/2m-2s-sync/broker-a.properties &

##启动broker

nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-a.properties &

##查看启动是否成功

tail -5f /root/logs/rocketmqlogs/broker.log

##关闭sh mqshutdown broker

 

172.******.142的主节点启动

##启动broker

nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-b.properties &

##查看启动是否成功

tail -5f /root/logs/rocketmqlogs/broker.log

##关闭sh mqshutdown broker

 

172.******.120从节点

##启动broker

nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-b-s.properties &

##查看启动是否成功

tail -5f /root/logs/rocketmqlogs/broker.log

##关闭sh mqshutdown broker

 

172.******.142从节点

##启动broker

nohup sh mqbroker -c /data/public/rocketmq/conf/2m-2s-sync/broker-a-s.properties &

##查看启动是否成功

tail -5f /root/logs/rocketmqlogs/broker.log

##关闭sh mqshutdown broker

 

部署可视化界面

源码包下载地址:

下载完成后进行修改配置并打包部署即可:

仅需要修改这个配置即可

rocketmq.config.namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

注意users.properties中配置的是用户名密码(如果要启用可视化界面的登录,则需要打开application.properties文件中rocketmq.config.loginRequired=true即可)

规则:用户角色=用户名,密码

例如admin角色的用户名是admin,密码是1

则配置为admin=admin,1

访问界面:http://172.******.120:8080即可

注意:

如果发现依旧不是双主双从,则排查防火墙端口是否开放。一定要开启10911,10909,10912三个端口,其中10911为broker通信端口,10909是一个虚拟ip(vip)端口根据源码显示有一个源端口号-2的操作,10912为主从同步通信端口,单节点可以不开启。集群模式下不开启10912,从节点同步不了主节点数据。

#查看firewall服务状态

systemctl status firewalld

出现Active: active (running)切高亮显示则表示是启动状态。

 

出现 Active: inactive (dead)灰色表示停止,看单词也行。

 

#查看firewall的状态

firewall-cmd --state

#关闭防火墙

systemctl stop firewalld.service

#开启防火墙

systemctl start firewalld

#查询端口是否开放

firewall-cmd --query-port=10911/tcp

#开放指定端口

firewall-cmd --permanent --zone=public --add-port=9876/tcp

firewall-cmd --permanent --zone=public --add-port=10911/tcp

firewall-cmd --permanent --zone=public --add-port=10909/tcp

firewall-cmd --permanent --zone=public --add-port=10912/tcp

firewall-cmd --permanent --zone=public --add-port=10922/tcp

# 立即生效

firewall-cmd --reload

# 移除端口

firewall-cmd --permanent --remove-port=9876/tcp

firewall-cmd --permanent --remove-port=10911/tcp

firewall-cmd --permanent --remove-port=10909/tcp

firewall-cmd --permanent --remove-port=10912/tcp

firewall-cmd --permanent --remove-port=10922/tcp


http://lihuaxi.xjx100.cn/news/1117206.html

相关文章

前端工程化 搭建私有组件库 组件从开发到发布私有npm仓库的全过程

前言 基于Vue3.0 TS的组件从开发组件库到发布私有npm仓库的全过程 环境 这里列出本文所使用的环境版本 vue 3.0 vue/cli 4.5.9 nodeJs 14.15.1 npm 6.14.8 vue --version vue/cli 4.5.9 npm -v 6.14.8 node -v v14.15.1 步骤 创建项目 使用 vue-cli 创建一个 vue3 项目&a…

AUTOSAR知识点 之 PDUR (一):基础知识

目录 1、概述 1.1、基本概念 1.2、内部组成 2、功能SPEC 2.1、与其他模块的依赖 2.2、I-PDU浅析

【FOF管理策略与技术】第1章 FOF的基本概念

第1章 FOF的基本概念 文章目录 第1章 FOF的基本概念一、FOF的定义与分类1 FOF的定义1.1、FOF的两个显著特点1.2、FOF天生的不足之处 2 FOF的分类2.1、按投资标的区分2.2、按所投资基金的管理权归属区分2.3、按投资基金种类的不同区分2.4、按FOF与其标的基金的管理运作方式(主动…

TIM输入捕获-STM32

TIM输入捕获-STM32 IC(Input Capture) 输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕…

第8章 函数探幽

1. 引用的本质 int a 1; int& copy a; //实际是:指针常量 int* const copy &a; 引用一旦指定后,就不能再作为其他变量的引用 2. 关于const和引用 非引用--无返回||引用-无返回类似 //1.可行 void test(int a); int a 1; test(a);//2.可行…

开关电源基础07:离线式开关电源变压器设计(1)

说在开头:关于第六届索尔维会议(2) 爱因斯坦一天都挺开心的,反正难题出给了玻尔,他还在自己的房间里拉起了小提琴,有人说爱因斯坦小提琴拉的跟锯木头一样,那也不至于那么夸张,但是水…

【算法】Smallest Integer Divisible by K 可被 K 整除的最小整数

文章目录 Smallest Integer Divisible by K 可被 K 整除的最小整数问题描述:分析代码 Tag Smallest Integer Divisible by K 可被 K 整除的最小整数 问题描述: 问题 给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的【最小正整数…

杂记 2023.5.10

目录 韦伯和斯托亚科维奇是谁? 介绍一下kali FastDFS和Sentinel是什么? Inferno 找工作的影响因素 1. 背景: 2. 学习过程: 2.1 计算机基础: 2.2 语言: 2.3 数据库等: 2.4 JVM&#…