RocketMQ-双主双从集群+DashBorad搭建(云服务器)

news2024/12/24 8:33:31

文章目录

  • 一、理论垫基础
    • 1. NameServer 集群
    • 2. Producer集群
    • 3. Consumer集群
    • 4. Broker集群
      • 4.1 节点间数据同步 以及 消息的持久化
      • 4.2 Broker的集群模式
        • 4.2.1、单Master模式
        • 4.2.2、多Master模式
        • 4.2.3、多Master多Slave模式-异步复制
        • 4.2.4、多Master多Slave模式-同步双写
        • 最佳实践
      • 4.3 RAID(补充知识)
        • 4.3.1 关键技术
  • 二、双主双从集群搭建【云服务器实战】
    • 1. 环境准备
      • 第一步、Host添加信息
      • 第二步、配置防火墙
      • 第三步、配置环境变量
      • 第四步、创建消息存储路径
    • 2. Broker 配置文件
      • 第一步、配置 Master1
      • 第二步、配置 Slave2
      • 第三步、配置 Master2
      • 第四步、配置 Slave1
    • 3. 服务启动
      • 第一步、启动NameServer集群
      • 第二步、启动Broker集群
      • 第三步、验收
    • 4. 集群监控平台搭建
      • 第一步、下载并解压
      • 第二步、修改配置文件
      • 第三步、编译打包并部署

一、理论垫基础

在上一期中我们提到了RocketMQ的一些基础知识,在本篇博客中基于理论实战部署一下吧~
在这里插入图片描述
由RocketMQ网络部署图得知,RocketMQ中主要涉及到四种角色:NameServer注册服务器、Broker服务器、Producer生产者、Consumer消费者。每种角色都可以单独搭建集群,下面我们详细介绍一个NameServer集群、Broker集群、Producer集群、Consumer集群。

1. NameServer 集群

NameServer通常会有多个实例部署,不过 NameServer 是无状态的,即 NameServer 集群中的各个节点间是无差异的,各节点间相互不进行信息通讯。在 NameServer 内部维护着一个 Broker 列表,用来动态存储 Broker的信息。当 Broker 节点启动时,会轮询 NameServer 列表,与每个 NameServer 节点建立长连接,并发起 注册请求。所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,客户端仍然可以向其它NameServer获取路由信息。

2. Producer集群

Producer 与 NameServer集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 取 Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

3. Consumer集群

Consumer 与 NameServer 集群中的其中一个节点(随机选择)建立长连接,定期从 NameServer 取 Topic 路由信息,并向提供 Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。

4. Broker集群

对于整个RocketMQ集群的部署,Name server、producer、consumer之间都是无状态的,集群中的每个节点都是一样的。

Broker 的部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master与Slave的对应关系通过指定相同的BrokerName,即多个节点指定相同的BrokerName表示是同一组的。节点的区分是由不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与NameServer集群中的所有节点建立长连接,定期注册Topic信息到所有NameServer。

4.1 节点间数据同步 以及 消息的持久化

在这里插入图片描述

复制策略

既然 Broker 分为主从节点,那么Master与Slave 之间是如何进行数据同步呢?

关于 Broker 的Master与Slave间的数据同步方式我们称为复制策略,分为同步复制与异步复制两种方式。

  • 同步复制,即消息写入Master后,Master会等待Slave同步数据成功后才向Producer返回成功ACK;
  • 异步复制,即消息写入Master后,Master立即向Producer返回成功ACK,无需等待Slave同步数据成功。

其中异步复制策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量。

刷盘策略

当消息发送到broker内存后消息如何持久化到磁盘呢?

刷盘策略,指的是Broker中消息的落盘方式,即消息发送到Broker内存后消息持久化到磁盘的方式。也分为同步刷盘与异步刷盘两种方式。

  • 同步刷盘,即当消息持久化到Broker的磁盘后才算是消息写入成功;
  • 异步刷盘,即当消息写入到Broker的内存后即表示消息写入成功,无需等待消息持久化到磁盘。

消息写入到Broker的内存,一般是写入了PageCache。对于异步刷盘策略,消息会写入到PageCache后立即返回成功ACK,但并不会立即做落盘操作,而是当PageCache到达一定量时才会自动进行落盘。异步刷盘策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量。

4.2 Broker的集群模式

根据Broker集群中各个节点间关系的不同,Broker集群可以分为以下几类:

4.2.1、单Master模式

只有一个 Broker (其本质上就不能称为集群) .

这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。

4.2.2、多Master模式

broker集群仅由多个master构成,不存在Slave。

同一Topic的各个Queue会平均分布在各个master节点上。

  • 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器 宕机不可恢复情况下,由于RAID10盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步 刷盘一条不丢),性能最高;
    (以上优点的前提是,这些Master都配置了RAID磁盘阵列。如果没有配置,一旦出现某Master宕机,则会发生大量消息丢失的情况。)
  • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅(不可消费), 消息实时性会受到影响。

4.2.3、多Master多Slave模式-异步复制

​ broker集群由多个master构成,每个master又配置了多个slave(在配置了RAID磁盘阵列的情况下,一 个master一般配置一个slave即可)。

master与slave的关系是主备关系:

  • master负责处理消息的读写请求 ;
  • slave仅负责消息的备份与master宕机后的角色切换。

HA采用异步复制方式,主备之间有短暂消息延迟(毫秒级),这种模式的优缺点如下:

  • 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应透明,不需要人工干预,性能同多Master模式一样。
  • 缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

异步复制 即前面所讲的复制策略中的异步复制策略,即消息写入master成功后,master立即向producer返回成功ACK,无需等待slave同步数据成功。 该模式的最大特点之一是,当master宕机后slave能够自动切换为master。不过由于slave从master的同步具有短暂的延迟(毫秒级),所以当master宕机后,这种异步复制方式可能会存在少量消息的丢失问题。( Slave从Master同步的延迟越短,其可能丢失的消息就越少对于Master的RAID磁盘阵列,若使用的也是异步复制策略,同样也存在延迟问题,同样也可能会丢失消息。但RAID阵列的秘诀是微秒级的(因为是由硬盘支持的),所以其丢失的数据量会更少。)

4.2.4、多Master多Slave模式-同步双写

​ 该模式是多Master多Slave模式的 同步复制 实现。所谓同步双写,指的是消息写入master成功后, master会等待slave同步数据成功后才向producer返回成功ACK,即: master与slave都要写入成功后才会返回成功ACK,也即双写。

​ 该模式与异步复制模式相比,优点是消息的安全性更高,不存在消息丢失的情况。但单个消息的RT略高,从而导致性能要略低(大约低10%)。 该模式存在一个大的问题:对于目前的版本,Master宕机后,Slave不会自动切换到Master。

最佳实践

一般会 为Master配置RAID10磁盘阵列,然后再为其配置一个Slave。 即利用了RAID10磁盘阵列的高效、安全性,又解决了可能会影响订阅的问题。

  1. RAID磁盘阵列的效率要高于Master-Slave集群。因为RAID是硬件支持的。也正因为如此, 所以RAID阵列的搭建成本较高。
  2. 多Master+RAID阵列,与多Master多Slave集群的区别是什么?
    • 多Master+RAID阵列,其仅仅可以保证数据不丢失,即不影响消息写入,但其可能会影响到消息的订阅。但其执行效率要远高于多Master多Slave集群
    • 多Master多Slave集群,其不仅可以保证数据不丢失,也不会影响消息写入。其运行效率要低 于多Master+RAID阵列

4.3 RAID(补充知识)

关于RAID相关的知识科班同学可以跳过啦~

RAID历史

​ 1988 年美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文 “A Case of Redundant Array of Inexpensive Disks” 中提出RAID 概念 ,即廉价冗余磁盘阵列( Redundant Arrayof Inexpensive Disks )。由于当时大容量磁盘比较昂贵, RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格的不断降低, “廉价” 已经毫无意义。因此, RAID咨询委员会( RAID Advisory Board, RAB )决定用 “ 独立 ” 替代 “ 廉价 ” ,于时 RAID 变成了独立磁盘冗余阵列( Redundant Array of Independent Disks )。但这仅仅是名称的变化,实质内容没有改变。

RAID等级

​ RAID这种设计思想很快被业界接纳, RAID技术作为高性能、高可靠的存储技术,得到了非常广泛的应用。 RAID主要利用镜像、数据条带和数据校验三种技术来获取高性能、可靠性、容错能力和扩展性,根据对这三种技术的使用策略和组合架构,可以把 RAID分为不同的等级,以满足不同数据应用的需求。
​ D. A. Patterson 等的论文中定义了 RAID0 ~ RAID6 原始 RAID 等级。随后存储厂商又不断推出 RAID7 、 RAID10、RAID01 、 RAID50 、 RAID53 、 RAID100 等 RAID 等级,但这些并无统一的标准。目前业界与学术界公认的标准是 RAID0 ~ RAID6 ,而在实际应用领域中使用最多的 RAID 等级是 RAID0 、 RAID1 、 RAID3 、 RAID5 、 RAID6 和 RAID10。 RAID每一个等级代表一种实现方法和技术,等级之间并无高低之分。在实际应用中,应当根据用户的数据应用特点,综合考虑可用性、性能和成本来选择合适的RAID 等级,以及具体的实现方式。

4.3.1 关键技术

镜像技术

​ 镜像技术是一种冗余技术,为磁盘提供数据备份功能,防止磁盘发生故障而造成数据丢失。

​ 对于 RAID 而言,采用镜像技术最典型地的用法就是,同时在磁盘阵列中产生两个完全相同的数据副本,并且分布在两个不同的磁盘上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可 正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本通常会导致一定的 I/O 性能下降。 镜像技术提供了非常高的数据安全性,其代价也是非常昂贵的,需要至少双倍的存储空间。高成本限制了镜像的广泛应用,主要应用于至关重要的数据保护,这种场合下的数据丢失可能会造成非常巨大的损失。

数据条带技术

​ 数据条带化技术是一种自动将 I/O操作负载均衡到多个物理磁盘上的技术。更具体地说就是,将一块连续的数据分成很多小部分并把它们分别存储到不同磁盘上。这就能使多个进程可以并发访问数据的多个不同部分,从而获得最大程度上的 I/O 并行能力,极大地提升性能。

数据校验技术

​ 数据校验技术是指, RAID 要在写入数据的同时进行校验计算,并将得到的校验数据存储在 RAID 成员 磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中。当其中一部分数据出错时, 就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。
数据校验技术相对于镜像技术的优势在于节省大量开销,但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,且必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。

二、双主双从集群搭建【云服务器实战】

本次基于两台云服务器搭建RocketMQ集群,Broker采取双主双从,同步双写方式。先看看总体架构:
在这里插入图片描述
RocketMQ集群工作流程

  1. 启动NameServer。NameServer启动后监听端口,等待Broker、Producer、Consumer连接,相当于一个路由控制中心。
  2. 启动 Broker。与所有 NameServer 保持长连接,定时发送心跳包。心跳包中包含当前 Broker 信息(IP+端口等)以及存储所有 Topic 信息。注册成功后,NameServer 集群中就有 Topic跟Broker 的映射关系。
  3. 首发消息前,先创建 Topic ,创建Topic时需要指定该 Topic 要存储在哪些 Broker 上,也可以在发送消息时自动创建Topic。
  4. 生产者发送消息。启动时先跟 NameServer 集群中的其中一台建立长连接,并从 NameServer 中获取当前发送的 Topic存在于哪些 Broker 上,轮询从队列列表中选择一个队列,然后与队列所在的 Broker建立长连接从而向 Broker发消息。
  5. 消费者接受消息。跟其中一台Nam

1. 环境准备

首先我们需要准备两台云服务器,小编使用的分别是两核4G的腾讯云 和 1核两G的阿里云 ,系统都是 CentOS7。

序号IP角色架构模式服务器商
1124.222.223.222Nameserver、BrokerMaster1、Slave2腾讯云
247.96.232.192Nameserver、BrokerMaster2、Slave1阿里云

在这里插入图片描述
服务器需要具备java环境、RocketMQ包,以及足够的空闲内存。关于java、RocketMQ的下载不是本文的重点就不再一一演示了~
在这里插入图片描述

第一步、Host添加信息

1、需要在两台Host添加以下信息:

vim /etc/hosts

配置如下:

# nameserver
124.222.223.222 rocketmq-nameserver1
47.96.232.192 rocketmq-nameserver2
# broker
124.222.223.222 rocketmq-master1
124.222.223.222 rocketmq-slave2
47.96.232.192 rocketmq-master2
47.96.232.192 rocketmq-slave1

配置完成后,重启网卡:

systemctl restart network

大家根据自己的服务器ip更换以上hosts文件内容。

第二步、配置防火墙

节点之间需要通信,需要开放相关的端口,或者简单粗暴的方式——直接关闭防火墙。小编为了安全,只开放特定的端口号,RocketMQ默认使用3个端口:8976109111101111009

  • nameserver默认使用 9876 端口;
  • Master 默认使用 10911 端口;
  • Slave 默认使用 11011 端口。
    在这里插入图片描述

第三步、配置环境变量

vim /etc/profile

在profile文件的末尾加入以下命令:

# rocketMQ
ROCKETMQ_HOME=/soft/RocketMQ/rocketmq-all-4.9.0-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1sCn9c9p-1671715596559)(RocketMQ-RocketMQ集群搭建.assets/image-20221218195618242.png)]

输入:wq!保存并推出,并使得配置立刻生效:

source /etc/profile

这一步仅是方便在服务器任何路径下都可以执行rocketmq的bin目录下的命令,可跳过。

第四步、创建消息存储路径

RocketMQ消息持久化的位置默认是在/root/store/commitlog,为了方便操作我们自定义消息的存储路径~

# 在第一台服务器执行
mkdir /soft/RocketMQ/store-a
mkdir /soft/RocketMQ/store-a/commitlog
mkdir /soft/RocketMQ/store-a/consumequeue
mkdir /soft/RocketMQ/store-a/index

mkdir /soft/RocketMQ/store-b-s
mkdir /soft/RocketMQ/store-b-s/commitlog
mkdir /soft/RocketMQ/store-b-s/consumequeue
mkdir /soft/RocketMQ/store-b-s/index

# 在第二台服务器执行
mkdir /soft/RocketMQ/store-b
mkdir /soft/RocketMQ/store-b/commitlog
mkdir /soft/RocketMQ/store-b/consumequeue
mkdir /soft/RocketMQ/store-b/index

mkdir /soft/RocketMQ/store-a-s
mkdir /soft/RocketMQ/store-a-s/commitlog
mkdir /soft/RocketMQ/store-a-s/consumequeue
mkdir /soft/RocketMQ/store-a-s/index

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQKPOKnR-1671717131825)(RocketMQ-RocketMQ集群搭建.assets/image-20221219223509303.png)]

提示:以上操作两台服务器都执行一遍~


2. Broker 配置文件

我们查看一下conf 下的文件,我们本次搭建双主双从的方式故选择 2m-2s-sync
在这里插入图片描述
进入 2m-2s-sync ,在对应的服务器上配置对应的配置文件。如在124.222.223.222服务器上实现Master1、Slave2,修改 broker-a.propertiesbroker-b-s.properties即可。
在这里插入图片描述

第一步、配置 Master1

124.222.223.222服务器上修改broker-a.properties配置文件

vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a.properties

修改配置如下:

#暴露外网的IP
brokerIP1=124.222.223.222
brokerIP2=124.222.223.222
#所属集群名字
brokerClusterName=rocketmq-cluster
#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
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/soft/RocketMQ/store-a
#commitLog 存储路径
storePathCommitLog=/soft/RocketMQ/store-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/soft/RocketMQ/store-a/consumequeue
#消息索引存储路径
storePathIndex=/soft/RocketMQ/store-a/index
#checkpoint 文件存储路径
storeCheckpoint=/soft/RocketMQ/store-a/checkpoint
#abort 文件存储路径
abortFile=/soft/RocketMQ/store-a/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

第二步、配置 Slave2

124.222.223.222服务器上修改broker-b-s.properties配置文件

vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b-s.properties

修改配置如下:

#暴露外网的IP
brokerIP1=124.222.223.222
brokerIP2=124.222.223.222
#所属集群名字
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
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/soft/RocketMQ/store-b-s
#commitLog 存储路径
storePathCommitLog=/soft/RocketMQ/store-b-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/soft/RocketMQ/store-b-s/consumequeue
#消息索引存储路径
storePathIndex=/soft/RocketMQ/store-b-s/index
#checkpoint 文件存储路径
storeCheckpoint=/soft/RocketMQ/store-b-s/checkpoint
#abort 文件存储路径
abortFile=/soft/RocketMQ/store-b-s/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

第三步、配置 Master2

47.96.232.192服务器上修改broker-b.properties配置文件

vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b.properties

修改配置如下:

#暴露外网的IP
brokerIP1=47.96.232.192
brokerIP2=47.96.232.192
#所属集群名字
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
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/soft/RocketMQ/store-b
#commitLog 存储路径
storePathCommitLog=/soft/RocketMQ/store-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/soft/RocketMQ/store-b/consumequeue
#消息索引存储路径
storePathIndex=/soft/RocketMQ/store-b/index
#checkpoint 文件存储路径
storeCheckpoint=/soft/RocketMQ/store-b/checkpoint
#abort 文件存储路径
abortFile=/soft/RocketMQ/store-b/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

第四步、配置 Slave1

47.96.232.192服务器上修改broker-a-s.properties配置文件

vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a-s.properties

修改配置如下:

#暴露外网的IP
brokerIP1=47.96.232.192
brokerIP2=47.96.232.192
#所属集群名字
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
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/soft/RocketMQ/store-a-s
#commitLog 存储路径
storePathCommitLog=/soft/RocketMQ/store-a-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/soft/RocketMQ/store-a-s/consumequeue
#消息索引存储路径
storePathIndex=/soft/RocketMQ/store-a-s/index
#checkpoint 文件存储路径
storeCheckpoint=/soft/RocketMQ/store-a-s/checkpoint
#abort 文件存储路径
abortFile=/soft/RocketMQ/store-a-s/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

3. 服务启动

第一步、启动NameServer集群

分别在 124.222.223.222、47.96.232.192服务器上启动NameServer

创建用来存放nameserver日志的文件

[root@hgwtencent /]# cd /soft/RocketMQ/
[root@hgwtencent RocketMQ]# mkdir -p store/log
[root@hgwtencent RocketMQ]# touch store/log/namesrv.log
[root@hgwtencent RocketMQ]# touch store/log/broker1.log
[root@hgwtencent RocketMQ]# touch store/log/broker2.log

启动 NameServer~

[root@hgwtencent RocketMQ]# cd /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/bin
[root@hgwtencent rocketmq-all-4.9.0-bin-release]# nohup sh mqnamesrv > ../../store/log/namesrv.log 2>&1 &

第二步、启动Broker集群

1、在124.222.223.222上启动master1和slave2

[root@hgwtencent bin]# cd /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/bin/
[root@hgwtencent bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a.properties > ../../store/log/broker1.log 2>&1 &
[root@hgwtencent bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b-s.properties  > ../../store/log/broker2.log 2>&1 &

2、在47.96.232.192 上启动master2和slave1

[root@hgwalibabacloud 2m-2s-sync]# cd /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/bin/
[root@hgwalibabacloud bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b.properties  > ../../store/log/broker1.log 2>&1 &
[root@hgwalibabacloud bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a-s.properties  > ../../store/log/broker2.log 2>&1 &

第三步、验收

启动后通过JPS查看启动进程
在这里插入图片描述
查看日志

# 查看nameServer日志
tail -500f ~/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail -500f ~/logs/rocketmqlogs/broker.log

在这里插入图片描述
关闭命令

mqshutdown broker
mqshutdown namesrv

4. 集群监控平台搭建

这里需要将两台服务器的11009端口开放,rocketmq-Dashboard管理页面默认端口为8080,小伟这因为8080被占用故调整为7777

第一步、下载并解压

rocketmq-console已经不在原先的仓库了,已经被迁移到RocketMQ Dashboard。进入到这个dashboard仓库:https://github.com/apache/rocketmq-dashboard。下载zip包并解压。
在这里插入图片描述

第二步、修改配置文件

修改rocketmq.config.namesrvAddr=后面为你的NameServer集群地址

在这里插入图片描述

第三步、编译打包并部署

进入 /rocketmq-dashboard-master 目录

cd /Users/gwh/Documents/Software/tools/rocketmq/rocketmq-dashboard-master   

执行编辑打包命令:mvn clean package -Dmaven.test.skip=true

mvn clean package -Dmaven.test.skip=true

等待命令执行完成之后在/rocketmq-dashboard-master/target 目录下就可以看到打好的jar包啦!上传到服务器run起来~
在这里插入图片描述

nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar &> store/log.log &

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APM32F103 RTC内部时钟源报警中断例程测试

APM32F103 RTC内部时钟源报警中断例程测试✨相关篇推荐《【开源电路】STM32F103VCT6开发板》📌关篇《APM32F103 RTC内部时钟源秒中断例程测试》📌本案例来源于官方的SDK固件包:https://www.geehy.com/support/apm32 🎈源码位置&am…

二极管:烧IC与我相干!

趁“羊”未到,还有心力接着上节继续讲。 话说,烧IC,不只本身IC烧,还火烧连营连带后端IC一并烧,为何呢!? 那得回到过去,必须翻翻《硬件先生》中的《电源知识-DC-DC》,从D…

GPU与CPU的性能比较及影响因素

CPU的主要指标是主频和线程。 Intel:后缀F表示无核显,后缀K代表可以超频,H代表移动端;AMD:后缀G代表有核显,后缀X代表加强版,后缀XT代表超级加强版。 CPU 常见计算操作: 数据加载、…

4.0、Hibernate-延迟加载 2

4.0、Hibernate-延迟加载 2 消费者 和 订单 属于 一对多 的 关系,通过上一章节 3.0 的内容我们知道了可以通过设置 customer 来实现延迟加载,本章节来介绍一下如何设置 orders 去实现延迟加载; one-to-many 的 lazy 默认是 true 是开启的&…

%29 身份认证

1、Web 开发模式 (1)、基于服务器渲染的开发模式:服务器发送给客户端的 HTML 页面,是在服务器通过字符串的拼接,动态生成的(企业级网站) (2)、基于前后端分离的开发模式&…

登录过程(vuex存储token、token持久化)

登录过程(vuex存储数据) 点击登录按钮通过表单校验 this.$refs.loginForm.validate(valid > {if (valid) {//按钮动画加载,禁用 this.loading true// 调用vuex的action发送登录请求this.$store.dispatch(user/login, this.loginForm).then(() > {this.$router.push({ p…

内存分配函数(动态内存分配)详解

目录 🎑为什么要进行动态内存开辟? 🎑malloc和free 🎠malloc函数 🎠free函数 🎠malloc函数和free函数的实际应用 🎑calloc函数 🎑realloc函数 🎠realloc函数的使用示例 &…

通过脚手架vue-cli创建一个vue项目

我需要在vue-demo文件下新建vue项目 步骤一 ①在该文件夹下打开集成终端 输入创建命令 命令 vue create 项目名称 ,注意不要使用驼峰命名法 如果是第一次配置,有面的提示,这里说你这样速度会很慢的,用不用镜像啊,这…

样品制备丨艾美捷硝酸盐/亚硝酸盐荧光法检测试剂盒

一氧化氮(NO)是由一氧化氮合酶(NOS)在生物系统中合成的。NOS是一种非常复杂的酶,作用于分子氧、精氨酸和NADPH,产生NO、瓜氨酸和NADP。这个过程需要五个额外的辅因子(FMN、FAD、血红素、钙调素和…

制造业ERP管理系统在企业采购管理中的作用是什么?

对于任何一家企业,采购都是头等大事。企业的采购工作往往是决定了企业产品的交货速度、成本和质量,特别是在制造行业,采购成本甚至占比产品成本的60%以上,降低采购成本是提高企业竞争力的关键。因此,对于企业采购领域的…

Effective C++条款34:区分接口继承和实现继承

Effective C条款34:区分接口继承和实现继承(Differentiate between inheritance of interface and inheritance of implementation)条款34:区分接口继承和实现继承1、纯虚函数2、虚函数(非纯)2.1 将默认实现…

2022 IoTDB Summit:中国核电刘旭嘉《工业时序数据库 Apache IoTDB 在核电的应用实践》...

12 月 3 日、4日,2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本,并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例,深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

middlebury立体匹配评估使用方法总结(三)——线上版教程

系列文章目录 middlebury立体匹配评估使用方法总结(一)——网站说明 middlebury立体匹配评估使用方法总结(二)——python版离线教程 middlebury立体匹配评估使用方法总结(三)——线上版教程 文章目录系列文…

TableLayout布局

表格布局-TableLayout 1.TableLayout简介 1.简介 表格的形式,整齐可以嵌套继承于线性布局2.行数如何确定? tableRow,来指定行数列数由最多的那个决定layout_column来指定具体的列数,从0开始2.TableLayout的常见属性 所有的都是从0…

VMware ESxi 服务器迁移【手动版】

VMware ESxi 迁移【手动版】 应用场景 两个不同环境下的服务器进行迁移 因为不能直接对拷,需要在中间机上转一下 才有了这么一出 第一步 搭建NFS 在中间机上安装NFS(或者其他磁盘挂载方式) 目的呢是把源服务器上的系统拷贝到中间机上&#x…

android入门之broadcast

1. 前言 广播Broadcast是android四大组件之一。是用来互相通信(传递信息)的一种机制。 通信包括: a) 组件间(应用内)通信 b) 进程间通信 2. 广播Brocast的基本使用方式 广播发送者:Acvitity、Service等…

pdf文档页码怎么添加?分享这几个pdf加页码方法给你

不管是还在校园里的学生,还是已经步入职场的小伙伴,都会遇到要对一些文档进行编辑处理,例如有时需要将word、excel、ppt等格式的文档与pdf文件进行相互转换,有时又需要对pdf文件进行编辑文档增加页眉页脚、拆分合并、加密解密等操…

基于Python+Echarts+Pandas 搭建一套图书分析大屏展示系统(附源码)

今天给大家分享的是基于 Flask、Echarts、Pandas 等实现的图书分析大屏展示系统。 项目亮点 采用 pandas、numpy 进行数据分析 基于 snownlp、jieba 进行情感分析 后端接口选用 RESTful 风格,构建 Swagger 文档 基于 Flask、Echarts 构建 Web 服务,采…

2022年债券估值工具和方法

第一章 债券估值原理概述 债券估值是决定债券公平价格[1]的过程。债券公平价格是债券的预期现金流经过合适的折现率折现以后的现值,其原理是未来现金流流出折现到今日与今日现金流流出相等。因此,债券的估值模型可以表示为: 资料来源&#x…

新冠阳性的第四篇博客,SpringBoot 任务(异步、定时、邮件)

新冠阳性的第四篇博客,SpringBoot 任务(异步、定时、邮件)1.异步任务2.邮件任务3.定时任务1.异步任务 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动&#x…