【RocketMQ】集群的搭建与高可用

article/2025/10/12 16:09:28

RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。

Master和Slave的区别:在Broker的配置文件中,参数brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是Slave,同时brokerRole参数也会说明这个Broker是Master还是Slave。

Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写入消息;Consumer可以连接 Master角色的Broker,也可以连接Slave角色的Broker来读取消息。

1658222980869.png

刷盘方式

RocketMQ的刷盘是把消息存储到磁盘上的,这样既能保证断电后恢复,又可以让存储的消息量不受内存的限制。RocketMQ为了提高性能,会尽可能地保证磁盘的顺序写。消息在通过Producer写入RocketMQ的时候,有两种写入的磁盘方式,同步刷盘和异步刷盘。

在properties文件中通过参数flushDiskType指定刷盘方式:

# 同步刷盘
flushDiskType=SYNC_FLUSH# 异步刷盘
flushDiskType=ASYNC_FLUSH

同步刷盘

SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。

异步刷盘

ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功,随后再异步的将缓存数据保存到磁盘。

异步刷盘的时机有两种情况:

  1. 定期将缓存中更新的数据进行刷盘;
  2. 当缓存中更新的数据条数达到某一设定值(阈值)后进行刷盘。

异步刷盘的方式可能会丢失消息,如果缓存中的数据还未来得及同步到磁盘的时候宕机,这样缓存中的数据就丢失了,但是性能很好,默认是异步刷盘。

同步方式

集群环境下需要部署多个Broker,Broker分为两种角色:

  • master:即可以写也可以读,其brokerId等于0,只能有一个。
  • slave:只允许读,其brokerId为非0,可以存在多个。

一个master与多个slave通过指定相同的brokerClusterName被归为一个broker set(broker集)。

通常生产环境中,我们至少需要2个broker set,2个broker集才能保证高可用。

Slave是复制Master的数据。一个Broker组有Master和Slave,消息需要从Master复制到Slave上,有同步和异步两种复制方式。

同步复制和异步复制是通过Broker配置文件里的brokerRole参数进行设置的,这个参数可以被设置成ASYNC_MASTER、 SYNC_MASTER、SLAVE三个值中的一个。

主从同步方式的相关配置:

# 0代表主
brokerId=0# 大于0都代表从
brokerId=1# 主从同步复制SYNC_MASTER
brokerRole=SYNC_MASTER# 主从异步复制ASYNC_MASTER
brokerRole=ASYNC_MASTER# SLAVE代表从节点
brokerRole=SLAVE

主从同步复制

主从同步复制方式(Sync Broker):生产者发送的每一条消息都至少同步复制到一个slave后才返回告诉生产者成功,即“同步双写”。

在同步复制方式下,如果Master出故障,Slave上有全部的备份数据,容易恢复,但是同步复制会增大数据写入延迟,降低系统吞吐量。

主从异步复制

主从异步复制方式(Async Broker):生产者发送的每一条消息只要写入master就返回告诉生产者成功,然后再“异步复制”到slave。

在异步复制方式下,系统拥有较低的延迟和较高的吞吐量,但是如果Master出了故障,有些数据因为没有被写入Slave,有可能会丢失。

集群部署模式

刷盘方式和同步方式可以两两组合,形成多种集群部署模式,下面列举一些常用的集群部署模式。

1658889812701.png

单master模式

也就是只有一个master节点,称不上是集群,一旦这个master节点宕机,那么整个服务就不可用。

多master模式

多个master节点组成集群,单个master节点宕机或者重启对应用没有影响。

优点:所有模式中性能最高(一个Topic的可以分布在不同的master,进行横向拓展),在多主的架构体系下,无论使用客户端还是管理界面创建主题,一个主题都会创建多份队列在多主中(默认是4个的话,双主就会有8个队列,每台主4个队列,所以双主可以提高性能,一个Topic的分布在不同的master,方便进行横向拓展。

缺点:单个master节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。

多master多slave异步复制模式

从节点(Slave)就是复制主节点的数据,对于生产者完全感知不到,对于消费者正常情况下也感知不到。只有当Master不可用或者繁忙的时候,Consumer会被自动切换到从Slave读。

在多master模式的基础上,每个master节点都有至少一个对应的slave。master节点可读可写,但是slave只能读不能写。

优点:一般情况下都是master消费,在master宕机或超过负载时,消费者可以从slave读取消息,消息的实时性不会受影响,性能几乎和多master一样。

缺点:使用异步复制的同步方式有可能会有消息丢失的问题。(Master宕机后,生产者发送的消息没有消费完,同时到Slave节点的数据也没有同步完)

多master多slave主从同步复制+异步刷盘

优点:主从同步复制模式能保证数据不丢失。

缺点:发送单个消息响应时间会略长,性能相比异步复制低10%左右。

对数据要求较高的场景,主从同步复制方式,保存数据热备份,通过异步刷盘方式,保证rocketMQ高吞吐量。

Dlegder模式

在RocketMQ4.5版本之后推出了Dlegder模式,类似于Zookeeper的集群选举模式。

虽然master-slave方式提供了一定的高可用性,但是如果集群中的master节点挂了,这时需要运维人员手动进行重启或者切换操作,即不能自动在集群的剩余节点中选出一个master,Dledger模式解决了这个问题。

DLedger基于raft协议,故天然支持主从切换,即主节点 (Leader) 发生故障,会重新触发选主,在集群内再选举出新的主节点。

搭建双主双从同步复制+异步刷盘

主机规划:

  • 192.168.100.100:MasterA、NameServerA
  • 192.168.100.101:MasterB、NameServerB
  • 192.168.100.102:SlaveA、dashboard
  • 192.168.100.103:SlaveB

配置文件RocketMQ已经自带了,位于conf/2m-2s-sync目录下,只需要稍微修改下即可。

如果机器是通过外网IP进行连接,需要在properties中指定自己的外网IP:brokerIP1=xxx.xxx.xxx.xxx

192.168.100.100(MasterA、NameServerA)

192.168.100.100(MasterA、NameServerA)的操作如下:

  1. 在conf/2m-2s-sync/broker-a.properties下添加namesrvAddr地址:
namesrvAddr=192.168.100.100:9876;192.168.100.101:9876
  1. 启动nameserver
$ nohup sh mqnamesrv &
  1. 启动broker
$ nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a.properties &

192.168.100.101(MasterB、NameServerB)

192.168.100.101(MasterB、NameServerB)的操作如下:

  1. 在conf/2m-2s-sync/broker-b.properties下添加namesrvAddr地址:
namesrvAddr=192.168.100.100:9876;192.168.100.101:9876
  1. 启动nameserver
$ nohup sh mqnamesrv &
  1. 启动broker
$ nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b.properties &

192.168.100.102(SlaveA、dashboard)

192.168.100.102(SlaveA、dashboard)的操作如下:

  1. 在conf/2m-2s-sync/broker-a-s.properties下添加namesrvAddr地址:
namesrvAddr=192.168.100.100:9876;192.168.100.101:9876
  1. 启动broker
$ nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties &
  1. 启动dashboard
$ nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar &

192.168.100.103(SlaveB)

192.168.100.103(SlaveB)的操作如下:

  1. 在conf/2m-2s-sync/broker-b-s.properties下添加namesrvAddr地址:
namesrvAddr=192.168.100.100:9876;192.168.100.101:9876
  1. 启动broker
$ nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6V1V3ru-1659147846043)(https://s3.bmp.ovh/imgs/2022/07/30/740dc6f9e87a7139.png)]
管理后台地址:http://192.168.100.102:8080

可以在管理后台里面手动添加namesrv的地址:192.168.100.100:9876、192.168.100.101:9876

1659147825980.png


http://chatgpt.dhexx.cn/article/qLL4nbT9.shtml

相关文章

Sentry 高可用部署

Sentry 高可用部署,部署分析基于Sentry 10.1.0.dev 05e720a7 对应dockerhub镜像版本分别为: getsentry/snuba:31c967e774759c0548652d986645fdff844e0a39 getsentry/sentry:8549f2a492c803bab77af26e7417272975b9369a getsentry/symbolicator:94cdbb7b54…

HA高可用

什么事应用程序的高可用 高可用性(high availability)通常用来描述一个系统经过专门的设计,从而减少停工的时间,而保持其服务的高度可用性 高可用程序的类型 主从方式(冷备) 两个相同的应用程序,一个对外提供服务,成为主程序,另一个平时不运行为备程序,就是一个主程序的备份,…

harbor高可用部署

harbor高可用简介 harbor目前有两种主流的高可用方案: 双主复制,harbor自带的镜像复制功能多harbor实例共享后端存储 双主复制架构在遇到大镜像时有同步延迟,并且一个实例故障后需要手动重新开启复制策略才能再次同步,下面以阿里…

HADOOP 高可用搭建

首先先说一下大概的步骤,就用四台为例,简单适合新手操作。 流程是:创建虚拟机,配置好;搭建linux系统;安装jdk(因为后面好多都依赖jkd);免密登录ssh;安装zook…

高可用详细概念及三种决策方式分析

文章目录 1.基本概念1.计算高可用2.存储高可用高可用状态决策1.独裁式2.协商式3.民主式 1.基本概念 这个定义的关键在于“无中断”,但恰好难点也在“无中断”上面,因为无论是单个硬件还是单 个软件,都不可能做到无中断,硬件会出故…

Nacos实现高可用

由于Nacos暂不支持Arm架构芯片的Mac集群搭建,本小节用Linxu云主机(Nacos比较吃内存,2个Nacos服务器集群,至少2G内存)环境演示。 通过前面的学习,我们已经了解了如何使用Nacos以及Nacos的功能等,…

浅谈高可用测试

前言 现今的互联网产品越来越注重可靠性,尤其是在生产环境中使用的系统,对高可用性都有一定的要求。而作为产品的提供方,在交付产品之前,也会对高可用进行验收测试。近期跟进过两个产品曾有高可用测试的需求,在此简单…

nginx高可用

Nginx高可用 为什么要使用nginx的高可用:因为nginx作为反向代理服务器时,有可能出现宕机的情况,而由于其反向代理的特性,就会导致其他服务器(tomcat等)无法被访问,这样项目就停止工作了。但是使…

RabbitMQ高可用

RabbitMQ高可用 各种消息队列对比使用推荐 RabbitMQ 高可用普通集群模式镜像集群模式保证消息队列的幂等性(消息不被重复消费)消息队列的可靠性传输生产者丢失数据RabbitMQ丢失数据消费者丢失数据 保证消息的顺序性消息积压问题 各种消息队列对比 特性ActiveMQRabbitMQRocketM…

系统高可用

系统高可用 1. 什么是高可用?可用性的判断标准是啥?1.1 可用性的判断标准是啥? 2. 哪些情况会导致系统不可用?3. 有哪些提高系统可用性的方法?3.1 注重代码质量,定时Review代码3.2 使用集群,减少…

HBase高可用

一、HBase高可用简介 HBase集群如果只有一个master,一旦master出现故障,将导致整个集群无法使用,所以在实际的生产环境中,需要搭建HBase的高可用,也就是让HMaster高可用,也就是需要再选择一个或多个节点也…

你管这破玩意儿叫高可用

大家好,我是坤哥 今天我们来聊一下互联网三高(高并发、高性能、高可用)中的高可用,看完本文相信能解开你关于高可用设计的大部分困惑 前言 高可用(High availability,即 HA)的主要目的是为了保障…

什么是高可用?高可用介绍:

前言: 高可用(High availability,即 HA)的主要目的是为了保障「业务的连续性」,即在用户眼里,业务永远是正常(或者说基本正常)对外提供服务的。高可用主要是针对架构而言&#xff0c…

HTML Responsive Web Page

注&#xff1a;参考网站 https://www.w3schools.com HTML Responsive Web Page index.html <!DOCTYPE html> <html><head><link rel"stylesheet" href"style.css"><title>Responsive web page</title><meta lan…

响应式布局【Responsive】 与 自适应布局 【adaptive】、单页面【SPA】 和多页面【MPA】

1、响应式布局 是一个网址能兼容多个terminate【终端】&#xff0c;而不是为每个终端做一个特定的版本 优点&#xff1a; 用户体验好节约开发时间、节省设计seo友好可以适用所有设备屏幕 缺点 设计与风格有局限性《自由度太低&#xff0c;局部性较大》灵活性有所欠缺 基于不…

Bootstrap:Responsive Design with Bootstrap(一)

1.Use Responsive Design with Bootstrap Fluid Containers 现在让我们回到我们的Cat Photo应用。这次&#xff0c;我们将用流行的响应式框架Bootstrap来美化它。 Bootstrap将会根据你的屏幕的大小来调整HTML元素的大小 —— 强调 响应式设计的概念。 通过响应式设计&#x…

responsive tables

以上内容原本是整理为ppt格式的&#xff0c;贴过来格式有点乱&#xff0c;请见谅。 其他responsive tables参考&#xff1a; http://gergeo.se/RWD-Table-Patterns/ 3种类型的代码参考 unseen column&#xff1a; http://runjs.cn/code/zrhodpx5 flip scroll&#xff1a; ht…

CSS之responsive image gallery

responsive image gallery 这次实例主要是练习如何讲不同的图片设置为一个栏目&#xff0c;并且能够根据屏幕的大小进行自适应的变换。需要注意的是&#xff0c;本次实例中运用到的重要的关键的内容是&#xff1a;float-left&#xff1b;box-sizing; media screen and (max-wi…

html5 响应式表格插件,响应式表格jQuery插件 – Responsive tables

响应式表格jQuery插件 – Responsive tables 4月 24, 2014 评论 (1) Sponsor 这个Responsive tables jQuery插件依赖于Bootstrap 3使用&#xff0c;比BS自带的自适应多了一些好用的功能&#xff0c;比如筛选显示&#xff0c;Focus选定、Table头滑动固定等&#xff0c;下来看看介…

SAP Fiori 设计准则里的 Responsive 表格概述

Responsive Table 是 SAP Fiori 中的默认表控件。 它包含一组 Line item 并且完全响应(fully responsive)。 根据具体情况&#xff0c;用户还可以从行项目导航到更多详细信息页面。 一个行项目包含多个数据点(data point)&#xff0c;这些数据点被分类到列中。 数据点是指一个…