rocketmq-双主双从集群+dashborad搭建(云服务器)(代码片段)

HGW689 HGW689     2022-12-26     672

关键词:

文章目录

一、理论垫基础

在上一期中我们提到了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

输入: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

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


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 &


17rocketmq集群双主双从同步搭建(代码片段)

基于前面一主一从同步搭建我们企业级开发,一般采用的是双主双从同步,以及异步刷盘;同步消息保证消息不丢失,异步刷盘提高吞吐量;我们VM里再克隆两台机器;192.168.0.110机器作为m1主节点192.168.0.103... 查看详情

安装部署rocketmq集群(双主双从)

参考技术A在前面,我们介绍了如果快速安装单个RocketMQ。快速安装意味着这只是在测试环境下的小打小闹,我们在单机安装的基础上,尝试安装RocketMQ集群。本次安装为了方便,使用的是已经编译好的二进制包进行安装部署。Rock... 查看详情

rocketmq双主双从同步写安装部署

1,机器ip软件版本jdk-8u131-linux-x64.tar.gzrocketmq-all-4.2.0-bin-release.ziprocketmq-console-ng-1.0.0.jar10.15.10.238HNVM015238nameserver1rocketmq-masterarocketmq-slaveb10.15.10.239HNVM015239nameserver2rock 查看详情

rocketmq集群搭建2(代码片段)

1.修改配置配件本次搭的集群是双主双从的同步模式  双主双从的配置文件再上图所示的里面服务器:192.168.100.128内需配置(下图中的:broker-a.properties和broker-b-s.properties)   broker-a.properties中的配置文件如下#所... 查看详情

rocketmq4.5.1双主双从异步复制环境搭建(代码片段)

基础环境操作系统:CentOS7实例:192.168.63.129,192.168.63.130,192.168.63.131,192.168.63.132Java:jdk-8u191-linux-x64.tar.gz安装JDK先把系统里面自带的卸载掉 [[email protected]soft]#rpm-qa|grepjavapython-javapackages-3.4. 查看详情

部署:单主部署一主一从部署双主双从部署代码测试(代码片段)

一.RocketMQ单机部署Hosts添加信息我们首先进入/etc/hosts来添加信息vim/etc/hosts添加信息如下: 上传解压安装包 通过XFTP工具将apache-rocketmq.tar.gz传到/usr/local/software,然后添加/usr/local/apache-rocketmq目录,再将apache-rocketmq.ta 查看详情

mysql搭建主从复制(一主一从,双主双从)(代码片段)

主从复制原理Mysql中有一个binlog二进制日志,这个日志会记录下所有修改了的SQL语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器上执行一遍。流程图2|0搭建一主... 查看详情

rocketmq安装及集群搭建(代码片段)

...里写自定义目录标题一、下载安装1.下载2.基础概念3.启动RocketMQ二、安装RocketMQconsole1.使用git拉取项目2.修改配置文件3.打包4.启动项目三、搭建双主双从集群1.创建服务器1中的消息存储路径2.修改服务器1配置文件3.创建服务器2中... 查看详情

keepalived双主双从配置(代码片段)

双主双从配置:(机器ip地址为自己本身机器的ip请勿使用博主的IP)配置过程时间有点长,代码比较多,配置的时候请看清加油,打工人配置环境:keepalived1:192.66.66.101keepalived2:192.66.66.102web1&#... 查看详情

4读写分离---双主双从(mycat)(代码片段)

双主双从一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有它的从机s2负责所有读请求。当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。  角色        地址master1  &nbs... 查看详情

rocketmq单台,各种集群,可视化安装步骤(代码片段)

文章目录下载地址安装JDK1.8安装RocketMQ解压配置环境变量方便随时使用MQ命令配置MQ启动内存大小启动rocketmq测试关闭RocketMQRocketMQ可视化界面打包项目运行启动管理界面访问管理界面RocketMQ集群方案双主双从同步-和-异步复制方案... 查看详情

mysql主从复制搭建之一主一从双主双从搭建(代码片段)

1.MySQL主从复制原理1.1为什么要做主从复制?在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写&#x... 查看详情

mycat学习第二天之性能监控,读写分离,集群搭建(代码片段)

...制原理2.2MySQL一主一从搭建2.3MyCat一主一从读写分离2.4MySQL双主双从搭建2.5MyCat双主双从读写分离3.Mycat集群搭建 查看详情

rocket详细教程(代码片段)

目录1、RocketMQ整体介绍2、核心概念模型3、RocketMQ-源码包下载与结构说明4、RocketMQ-环境搭建(搭建一个实例)   4.1、Hosts添加信息   4.2、上传解压   4.3、创建存储路径   4.4、编辑RocketMQ配置文件   4.5、修改日志... 查看详情

rocketmq双主集群

*{margin:0;padding:0}body{font:13.34pxhelvetica,arial,freesans,clean,sans-serif;color:black;line-height:1.4em;background-color:#F8F8F8;padding:0.7em}p{margin:1em0;line-height:1.5em}table{font-size:inh 查看详情

rocketmq搭建(代码片段)

...4位操作系统,Linux/Unix/MacOS64位JDK1.8+1、下载安装包rocketmq-all-4.9.2-bin-release.zip2、加压安装包unziprocketmq-all-4.9.2-bin-release.zip3、默认配置修改修改rocketmq/bin目录下runbroker.sh、runserver.shjvm参数(按服务器内存大小适配置,... 查看详情

mmm双主-双从读写分离部署(代码片段)

...表1.4整体架构1.4hosts修改1.5NTP配置二部署MySQL2.1安装MySQL三双主复制部署3.1master01my.cf配置3.2Master02my.cf配置3.4Master02创建账号3.5启动双主复制3.3启动Master02的slave功能四其他节点配置4.1所有Slave节点配置配置4.2所有Slave节点创建账号4.2... 查看详情

思科hsrp和vrrp双主双备

??????????思科HSRP和VRRP双主双备??????R1#conftR1(config)#intfa0/1R1(config-if)#ipadd13.0.0.1255.255.255.0R1(config-if)#noshutR1(config-if)#exitR1(config)#*Mar?100:02:10.087:%LINK-3-UPDOWN:InterfaceFastEthern 查看详情