数据复制与刷盘策略

复制策略

​ 复制策略是Broker的Master与Slave间的数据同步方式。分为同步复制与异步复制

  • 同步复制(SYNC_MASTER):消息写入master后,master会等待slave同步数据成功后才向Producer返回成功ACK
  • 异步复制(ASYNC_MASTER):消息写入master后,master立即就向Producer返回成功ACK,无需等待slave同步数据成功

ACK:即一种消息确认字符,在数据通信中,消息接受站给消息发送站的一种传输类控制符,表示传输过来的数据已经接受无误。

刷盘策略

​ 刷盘策略指的是Broker中的消息的落盘方式,既消息发送到Broker内存后消息持久化到磁盘的方式。也会分同步刷盘和异步刷盘:

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

当选择异步复制、刷盘毫无疑问这样提高了效率,无需等待。一条消息进来后会存到PageCache(内存缓存)中,它会等到达到一定的数据量时再进行批量刷盘操作。

这种思想在数据同步领域都可以进行效仿。

集群模式

单Master模式

只有一个master时,严格意义来说不算是集群。单master的风险很大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。

多Master模式

这种集群模式没有Slave,都是Master,同一个Topic的各个Queue会平均分布在各个master节点上。比如2个或多个Master,这种模式的优缺点如下:

  • 优点:配置简单,单个master宕机或重启维护对应应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高
  • 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响

RAID 0 条带技术 + RAID 1 镜像技术

RAID10磁盘阵列:RAID磁盘阵列

多Master多Slave模式-异步复制

每个Master配置一个Slave,有多对Master-Slave,Master与Slave的关系是主备关系(master负责处理消息的读写请求,而Slave仅负责消息的备份和当master宕机后的角色切换)。HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:

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

很显然Slave从Master同步的延迟越短,其可能丢失的消息就越少

对于多Master的RAID磁盘阵列,若使用的也是异步复制策略,同样也存在这种延迟问题而丢失消息。但RAID阵列的秘诀是微秒级的(因为是由硬件支持的),所以其丢失的数据量会更少

多Master多Slave模式-同步双写

每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:

  • 优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
  • 缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT(real-time)会略高,且目前版本在主节点宕机后,Slave不能自动切换为Master。

最佳实践

我们可以结合多Master多Slave模式和RAID磁盘阵列的优点将Master配置RAID10磁盘阵列,然后再为其配置一个Slave,这样既利用了RAID10磁盘阵列的高效、安全性又解决了可能会影响订阅的问题。

集群搭建实践

目标

搭建一个双主双从异步复制的Broker集群。使用两台主机来完成集群的搭建,功能与briker角色分配如下表:

主机名 IP 功能 BROKER角色
rockertmqOS1 192.168.146.101 NameServer+Broker Master1+Slave2
rockertmqOS2 192.168.146.102 NameServer+Broker Master2+Slave1

在Broker角色中,M1和S1是错开的,因为如果M1和S1在同一台服务器上,而这台服务器挂了,那么备份也挂了,这样的主备毫无意义!!

克隆系统

  • 修改名称:vim /etc/hostname

  • 查看显卡:ifconfig

  • 修改配置文件:mv /etc/sysconfig/network-scripts/ifcfg-eno... /etc/sysconfig/network-scripts/ifcfg-ens33

  • 修改静态IP:vim /etc/sysconfig/network-scripts/ifcfg-ens33

  • 重启系统:reboot

修改配置文件

进入rocketmq的配置文件夹cd /opt/environment/rocketmq-4.9.2/conf/

可以看到它默认提供了三种模式

  • 2master-2slave-异步
  • 2master-2slave-同步
  • 2master

选择目标:2M+2S+ASYNC cd 2m-2s-async/

  • 修改broker-a.properties

# 指定整个broker集群的名称,或者说是RockerMQ集群的名称
brokerClusterName=DefaultCluster
# 指定master-slave集群的名称,一个RockerMQ集群可以包含多个m-s集群
brokerName=broker-a
# master的brokerId为0
brokerid=0
# 指定删除消息储存过期文件的时间为凌晨4点
deleteWhen=04
# 指定未发生更新的消息储存文件的保留时长为48小时,48小时后过期,将会被删除
fileReservedTime=48
# 指定当前broker为异步复制master
brokerRole=ASYNC_MASTER
# 指定刷盘策略为异步刷盘
flushDiskType=ASYNC_FLUSH
#指定name server的地址
namesrvAddr=192.168.146.101:9876;192.168.146.102:9876
  • 修改broker-b-s.properties
## 要添加的内容
namesrvAddr=192.168.146.101:9876;192.168.146.102:9876
# 指定Broker对外提供服务的端口,即Broker与Producer、Consumer通信的端口,默认为10911,由于当前主机同时充当着master1与slave2,而前面的master1使用的默认端口,这里需要修改成另一个端口号
listenPort=11911
# 指定消息存储相关的路径,默认路径为~/store目录,这里也另改个名字加以区分
storePathRootDir=~/store-s
storePathCommitLog=~/store-s/commitlog
storePathConsumeQueue=~/store-s/consumerqueue
storePathIndex=~/store-s/index
storeCheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
  • 克隆一台rocketmqOS2主机(基于OS1)配置rocketmqOS2的配置文件(brocker-a-s.properties、broker-b.properties)

配置内容与上面一致,对于其他的配置文件不用管

启动

  • 启动NameServer集群

分别启动roketmqOS1与rocketmqOS2两个主机中的NameServer

nohup sh bin/mqnamesrv &

  • 启动两个Mster

分别启动roketmqOS1与rocketmqOS2两个主机中的broker master,注意需要指定所配置的配置文件

OS1:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
OS2:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &## 查看日志
tail -f ~/logs/rocketmqlogs/broker.log
  • 启动两个Slave
OS1:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
OS2:nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &

如上图可以看到已经有1个Nameserve和2个Broker启动了

第三章:RocketMQ集群与搭建相关推荐

  1. Hbase高手之路 -- 第二章 -- HBase集群的搭建

    Hbase高手之路 – 第二章 – HBase集群的搭建 一. 下载并安装 1. 下载安装包 2. 上传服务器 3. 解压 tar -zxvf hbase-2.4.10-bin.tar.gz -C . ...

  2. 双RocketMq集群的搭建

    一.双Master RocketMq集群的搭建 1.服务器环境: 序号 IP 用户名 角色 模式 1 192.168.211.128 root nameServer1,brokerServer1 Ma ...

  3. Docker高级篇笔记(七)在docker里面进行redis三主三从的集群案例搭建步骤

    目录 搭建三主三从集群 数据读写存储 主从容错的切换迁移 主从扩容 主从缩容 搭建三主三从集群 1 先启动docker 2 拉取redis镜像 3 创建6个redis容器 docker run -d ...

  4. (三)RocketMQ集群部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...

  5. RocketMQ集群之搭建2m2s集群(配置说明)

    搭建2m2s集群 下面通过docker搭建2master+2slave的集群. #创建2个master #nameserver1 docker create -p 9876:9876 --name r ...

  6. RocketMQ集群(版本4.7.1)搭建教程

    快速搭建RocketMQ集群 前言:最近在学习了解RocketMQ,为了更好地对照了解,需要安装一套RocketMQ集群,自己实际上手操作一番.首先在google搜索一番,找了一篇教程,看了下,比较详 ...

  7. mysql集群多管理节点_项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    多管理节点MySQL的配置很easy,仅须要改动之前的博文中提高的三种节点的三个地方. 1)改动管理节点配置 打开管理节点C:\mysql\bin下的config.ini文件,将当中ndb_mgmd的 ...

  8. 第二章 DMDSC集群搭建

    第二章 DMDSC集群搭建 第一章 DMDSC集群介绍 文章目录 第二章 DMDSC集群搭建 五.DMDSC部署 5.1集群规划 5.2.存储规划 5.2.1划分存储(虚拟机一共分配了60G) 5.2 ...

  9. Rocketmq集群搭建

    Rocketmq集群搭建 拓扑 主机名 网卡名 IP 作用 mq-master01 ens33 192.168.162.10 broker-a mq-master02 ens33 192.168.16 ...

最新文章

  1. 基于实体模型开发主题管理简析
  2. Java多线程-新特性-线程池
  3. 10张让你大脑崩溃的图,敢接受挑战吗?
  4. java nature_Java中BufferedReader和scanner的对比 - nature
  5. excel导入sqlserver数据库大数据量,可每秒控制数量
  6. python统计元音总数_python – 元音序列计数
  7. WINDOWS下主机名找IP IP找主机名
  8. Microsoft Office Visio 2007 下载
  9. pe中怎么卸载服务器系统更新,如何卸载win7系统更新用pe装win7
  10. 运维-Linux简介
  11. vue项目在ie9中碰到的问题——axios请求拒绝访问
  12. 汽车配件小程序开发制作
  13. GNU Radio系列教程(一):什么是GNU Radio?为什么我需要用GNU Radio?
  14. 解决 Eclipse下Java heap space问题
  15. 宫崎步 brave heart 歌词加谐音
  16. 效率高到爆炸的IT运维软件您安装了吗?
  17. 浅谈一下如何进行一次数据调研
  18. ajax请求返回的数据格式,ajax请求服务器返回json数据格式
  19. 2021 vivo校招提前批笔试解析
  20. iview@2.13.0/1版本,Table组件IE9不兼容的问题

热门文章

  1. 云原生之kubectl命令详解(二)及pod的相关操作
  2. 2022-2028年全球与中国鱼饲料行业深度分析
  3. java面向对象银行案例_Java程序设计-面向对象分析案例:银行储蓄系统.ppt
  4. 查看电池系统信息,包括循环次数、电池状态等信息
  5. 【Redis源码剖析】 - Redis内置数据结构之压缩字典zipmap
  6. 家庭和学生版2021插入Word的Visio图打不开显示unknown对象求解——--->解决方法visio unknown(亲测有效)
  7. 如何使用ffmpeg为Mac进行视频硬解码/硬编码(在Qt环境)
  8. 聚类算法系列之密度聚类DBSCAN
  9. Google云盘大文件下载解决方法
  10. Java实现代码计时功能(Spring计时工具类--StopWatch学习总结)