RocketMQ 一二、集群搭建理论与RAID常识
第2章 RocketMQ的安装与启动
三、系统安装与启动与console图形化控制台的安装与启动
省略实操步骤
在linux下配置好了broker和NameServer,就是连不上console,试了十来个小时就是连不上,暂时先跳过
四、集群搭建理论
数据复制与刷盘策略
复制策略
复制策略是Broker的Master与Slave间的数据同步方式,分为同步复制和异步复制
- 同步复制: 消息写入master后,master会等待slave同步数据成功后才向producer返回成功ACK
- 异步复制: 消息写入master后,master立即向producer返回成功ACK,无需等待slave同步数据成功
刷盘策略
刷盘策略指的是broker中消息的落盘方式,即消息发送到broker内存后消息持久化到磁盘的方式。分为同步刷盘与异步刷盘:
同步刷盘:当消息持久化到broker的磁盘后才算是消息写入成功。
异步刷盘:当消息写入到broker的内存后即表示消息写入成功,无需等待消息持久化到磁盘。
1)异步刷盘策略会降低系统的写入延迟,RT减小,提高了系统的吞吐量
2)消息写入到Broker的内存,一般是写入到了PageCache中
3)对于异步刷盘策略,消息会在写入到PageCache后立即返回成功ack;单并不会立刻落盘,而是等PageCache达到一定量后再落盘
Broker集群模式
根据Broker集群中各节点间关系不同,其可分为以下类
1.单Master
只有一个broker(其本质上就不能称为集群)。这种方式也只能是在测试时使用,生产环境下不能使用,因为存在单点问题。
2.多Master
broker集群仅由多个master构成,不存在Slave。同一Topic的各个Queue会平均分布在各个master节点上。
优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10(非常可靠)时,即使机器宕机不可恢复情况下,消息也不几乎会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅(不可消费),消息实时性会受到影响。
以上优点的前提是,这些Master都配置了RAID磁盘阵列。如果没有配置,一旦出现某Master宕机,则会发生大量消息丢失的情况。
3.多Master多Slave模式 - 异步复制
broker集群由多个master构成,每个master又配置了多个slave(在配置了RAID磁盘阵列的情况下,一个master一般配置一个slave即可)。master与slave的关系是主备关系,即master负责处理消息的读写请求,而slave仅负责消息的备份与master宕机后的角色切换。
异步复制即前面所讲的复制策略中的异步复制策略,即消息写入master成功后,master立即向producer返回成功ACK,无需等待向slave同步数据的成功。
该模式的最大特点之一是,当master宕机后slave能够自动切换为master。不过由于slave从master的同步具有短暂的延迟(毫秒级),所以当master宕机后,这种异步复制方式可能会存在少量消息的丢失问题。
Slave从Master同步的延迟越短,其可能丢失的消息越少(因为在同步的过程中如果master发生宕机,同步延迟越短,在宕机中被截断的数据越少)
4.多Master多Slave模式同步双写
该模式是多Master多Slave模式的同步复制实现。所谓同步双写,指的是消息写入master成功后,master会等待slave同步数据成功后才向producer返回成功ACK,即master与slave都要写入成功后才会返回成功ACK,也即双写。
该模式与异步复制模式相比,优点是消息的安全性更高,不存在消息丢失的情况。但单个消息的RT略高,从而导致性能略低(大约低10%)。
该模式存在一个大的问题:对于目前的版本,Master宕机后,Slave不会自动切换到Master(截止21/7),这种设计决策是为了确保数据的一致性和可靠性。自动切换Slave节点为新的Master节点可能导致数据冲突和不一致性。
最佳实践
一般会为Master配置RAID10磁盘阵列,然后再为其配置一个Slave。即利用了RAID10磁盘阵列的高效、安全性,又解决了可能会影响订阅的问题。
1)RAID磁盘阵列的效率要高于Master-Slave集群。因为RAID是硬件支持的,但其搭建成本较高。
2)多Master+RAID阵列,与多Master多Slave集群的区别是什么?
多Master+RAID阵列,其仅仅可以保证数据不丢失,即不影响消息写入,但其可能会影响到消息的订阅。但其执行效率要远高于多Master多Slave集群
多Master多Slave集群,其不仅可以保证数据不丢失,也不会影响消息订阅。但其运行效率要低于多Master+RAID阵列
五、磁盘阵列RAID(补充扩展)
1.RAID历史
RAID 概念于1988年被提出 ,即廉价冗余磁盘阵列。由于当时大容量磁盘比较昂贵, RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格的不断降低, “廉价” 已经毫无意义。
因此, RAID 咨询委员会决定用“ 独立 ” 替代 “ 廉价 ” ,于是 RAID 变成了独立磁盘冗余阵列( Redundant Array of Independent Disks )。但这仅仅是名称的变化,实质内容没有改变。
2.RAID等级
RAID 这种设计思想很快被业界接纳, RAID 技术作为高性能、高可靠的存储技术,得到了非常广泛的应用。 RAID 主要利用镜像、数据条带和数据校验三种技术来获取高性能、可靠性、容错能力和扩展性,根据对这三种技术的使用策略和组合架构,可以把 RAID 分为不同的等级,以满足不同数据应用的需求。