broker 在集群模式下,需要实现两个功能点:
1、多节点broker之间commitLog 日志文件内容同步;无论是 写主读从,一写多读,多主模式等。 同一个group内 master-slave 集群内,数据需要同步
2、能够自动容灾,即主节点挂了之后能够自动产生新的主节点,不影响对外提供服务
数据同步:传统 Mater/Slave 模式就可以支持
自动选主及切换: Zookeeper组件, 以及基于Raft等 分布式一致性算法实现。
基于zookeeper组件,需要额外部署zk集群
raft 算法支持选主和日志复制等功能。rocketMQ DLedger 就是基于raft算法,实现的高可用的多副本的broker架构
DLedger 是如何实现raft算法的? rocketMQ 是如何将 commitLog 与 DLedger 相结合的?
broker架构图变化:
与原有Maser/Slave 结构相比,多了 RoleChangeHandler, commitLog变为 DLedgerCommitLog
DLedger 将 原有 commitLog 进行包装,产生一种新的数据格式的log。
不影响原有的commitLog的功能作用。同时实现DLedger自身功能
DLedgerCommitlog 结构: 给原有commitLog 加了一个 head。即commitLog内容作为DLedgerCommitlog 的body
Raft算法:分布式一致性算法。
主要功能体现在三个方面:1)选主; 2)日志复制; 3)安全性
选主
LeaderElector
角色(Role):
1) Leader 主节点:发送心跳,和日志;如果发现比leader更新的任期(term),则变为follower。</