第三章:RocketMQ集群与搭建
数据复制与刷盘策略
复制策略
复制策略是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集群与搭建相关推荐
- Hbase高手之路 -- 第二章 -- HBase集群的搭建
Hbase高手之路 – 第二章 – HBase集群的搭建 一. 下载并安装 1. 下载安装包 2. 上传服务器 3. 解压 tar -zxvf hbase-2.4.10-bin.tar.gz -C . ...
- 双RocketMq集群的搭建
一.双Master RocketMq集群的搭建 1.服务器环境: 序号 IP 用户名 角色 模式 1 192.168.211.128 root nameServer1,brokerServer1 Ma ...
- Docker高级篇笔记(七)在docker里面进行redis三主三从的集群案例搭建步骤
目录 搭建三主三从集群 数据读写存储 主从容错的切换迁移 主从扩容 主从缩容 搭建三主三从集群 1 先启动docker 2 拉取redis镜像 3 创建6个redis容器 docker run -d ...
- (三)RocketMQ集群部署实践
2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...
- RocketMQ集群之搭建2m2s集群(配置说明)
搭建2m2s集群 下面通过docker搭建2master+2slave的集群. #创建2个master #nameserver1 docker create -p 9876:9876 --name r ...
- RocketMQ集群(版本4.7.1)搭建教程
快速搭建RocketMQ集群 前言:最近在学习了解RocketMQ,为了更好地对照了解,需要安装一套RocketMQ集群,自己实际上手操作一番.首先在google搜索一番,找了一篇教程,看了下,比较详 ...
- mysql集群多管理节点_项目进阶 之 集群环境搭建(三)多管理节点MySQL集群
多管理节点MySQL的配置很easy,仅须要改动之前的博文中提高的三种节点的三个地方. 1)改动管理节点配置 打开管理节点C:\mysql\bin下的config.ini文件,将当中ndb_mgmd的 ...
- 第二章 DMDSC集群搭建
第二章 DMDSC集群搭建 第一章 DMDSC集群介绍 文章目录 第二章 DMDSC集群搭建 五.DMDSC部署 5.1集群规划 5.2.存储规划 5.2.1划分存储(虚拟机一共分配了60G) 5.2 ...
- Rocketmq集群搭建
Rocketmq集群搭建 拓扑 主机名 网卡名 IP 作用 mq-master01 ens33 192.168.162.10 broker-a mq-master02 ens33 192.168.16 ...
最新文章
- 基于实体模型开发主题管理简析
- Java多线程-新特性-线程池
- 10张让你大脑崩溃的图,敢接受挑战吗?
- java nature_Java中BufferedReader和scanner的对比 - nature
- excel导入sqlserver数据库大数据量,可每秒控制数量
- python统计元音总数_python – 元音序列计数
- WINDOWS下主机名找IP IP找主机名
- Microsoft Office Visio 2007 下载
- pe中怎么卸载服务器系统更新,如何卸载win7系统更新用pe装win7
- 运维-Linux简介
- vue项目在ie9中碰到的问题——axios请求拒绝访问
- 汽车配件小程序开发制作
- GNU Radio系列教程(一):什么是GNU Radio?为什么我需要用GNU Radio?
- 解决 Eclipse下Java heap space问题
- 宫崎步 brave heart 歌词加谐音
- 效率高到爆炸的IT运维软件您安装了吗?
- 浅谈一下如何进行一次数据调研
- ajax请求返回的数据格式,ajax请求服务器返回json数据格式
- 2021 vivo校招提前批笔试解析
- iview@2.13.0/1版本,Table组件IE9不兼容的问题
热门文章
- 云原生之kubectl命令详解(二)及pod的相关操作
- 2022-2028年全球与中国鱼饲料行业深度分析
- java面向对象银行案例_Java程序设计-面向对象分析案例:银行储蓄系统.ppt
- 查看电池系统信息,包括循环次数、电池状态等信息
- 【Redis源码剖析】 - Redis内置数据结构之压缩字典zipmap
- 家庭和学生版2021插入Word的Visio图打不开显示unknown对象求解——--->解决方法visio unknown(亲测有效)
- 如何使用ffmpeg为Mac进行视频硬解码/硬编码(在Qt环境)
- 聚类算法系列之密度聚类DBSCAN
- Google云盘大文件下载解决方法
- Java实现代码计时功能(Spring计时工具类--StopWatch学习总结)