搭建网站要哪些知识,seo网络推广外包公司,微信上的网站怎么做,东丽手机网站建设简介 RocketMQ 4.5 版本之前#xff0c;RocketMQ 的broker是 Master/Slave部署架构#xff0c;一组 broker 有一个 Master #xff0c;有0到若干Slave#xff0c;Slave复制Master消息存储#xff0c;随时替代下线的Master。Master/Slave部署架构提供一定的高可用性#x… 简介 RocketMQ 4.5 版本之前RocketMQ 的broker是 Master/Slave部署架构一组 broker 有一个 Master 有0到若干SlaveSlave复制Master消息存储随时替代下线的Master。Master/Slave部署架构提供一定的高可用性但这样的部署架构主节点下线需要手动进行重启或者手动切换需要一个新的多副本架构支持自动切换解决方案基本可以分为两种
独立的分布式协调组件如 zookeeper实现选主和分布式存储该方案引入外部组件增加运维成本。可嵌入的分布式组件如 raft raft 协议相比前者的优点是不需要引入外部组件自动选主逻辑集成到各个节点的进程中节点之间通过通信就可以完成选主。
rocketmq选择 raft目前有 dledger和jraft两个实现本文分析dledger控制器broker是rocketmq的核心组件负责消息的存储接收消息分发消息dledger控制器提供broker的选主监管, 元数据保存等服务保障broker高可用。
本文分分析基于rocketmq 5.2.0关于dledger原理分析可参看参考资料
关键词
raft/dledger/jraft dledger/jraft 都是raft实现其中jraft是蚂蚁金服的作品改造自百度的braft代码比较难懂dledger是openmessage的一个组件一开始就是java实现代码相对易读特性没有jraft丰富
选主/日志复制/状态机 raft特性可参看参考资料了解
参考资料
https://blog.csdn.net/szlhj/category_12714458.html dledger源码原理分析包括选主心跳日志复制状态机
dledger
本文分析dledger控制器本章简单介绍一下dledger 应用/client client是dledger提供给应用访问节点的组件
以下是节点内组件
rpc服务
rpc服务内置rpc client/rpc server对外接收外部rpc访问包括client和节点间通讯对内解释rpc请求转发给Server对外发送rpc请求到其他节点
Server
主程序负责节点启动其他组件的启动写入日志请求初步处理等
Elector
选举类负责集群主节点选举
EntryPusher
日志写入器内置分发器和处理器分发器主节点用于复制日志到跟随者处理器跟随者使用写入日志
存储
存储日志条目有两个实现基于内存和基于文件
快照/状态机
新版本的dledger提供状态机dledger成为通用的raft组件不再是转为rocketmq使用
技术架构 上图dledger控制器模式的技术架构图只关注dledger控制器与broker部分dledger控制器集群提供broker选主和分布式存储同步支撑broker的高可用。
上图的broker指向dledger控制器的蓝色虚线箭头代表broker向控制器的rpc调用调用分两类上报和获取上报数据大部分走raft写 dledger主节点处理然后复制*1到其他非主节点过半的dledger worker复制完成提交日志共识点同时所有的dledger节点包括leader和worker应用(apply)共识点日志到各自的状态机*2
状态机是dledger应用端的接口接收已提交的共识日志在这里”dledger应用”是控制器日志是broker上报的信息控制器的状态机最终汇集日志到ReplicasInfoManager的replicaInfoTable和syncStateSetInfoTable。
*1 关于dledger日志写入和复制原理可参考 dledger原理源码分析系列(四)-日志写入和复制-CSDN博客
*2 关于dledger状态机原理可参考 dledger原理源码分析系列(五)-状态机-CSDN博客 原理分析
本节分析broker高可用需解决的问题raft控制器怎样解决
问题
本节分析broker高可用问题
发现broker下线
broker下线可能是自身崩溃或者网络故障
broker 选主
发现broker master下线需选出master在新master的引领下恢复broker组正常
消息存储可用性
broker健康是高可用的基础但对于slave还不够slave复制master消息存储进度过低不可用需排除进度跟上重新加入
解决
上节分析broker高可用需解决的问题本节分析raft控制器和broker解决问题的方案
下图展示用例如何保障broker高可用 broker侧
broker启动/恢复 无论启动还是恢复注册到控制器注册 broker注册到控制器受控制器监管注册需要获取brokerId应用brokerIdbroker获得标识心跳 定时向控制器发送心跳控制器记录和处理这是发现broker下线的关键手段同步broker副本数据 同步副本室心跳的补充控制器扫描心跳发现broker下线选举通知broker选主结果但通知服务是oneway模式不保证通知成功同步broker副本信息比较自身的master epoch和其他broker的如果有更新的master epoch说明自身错过了新master通知发起选举同步SynStateSet master定时任务变更为master/slave 控制器选主broker后通知broker角色变更master/slave组进入正常工作状态自动切换完成
控制器侧
扫描心跳 控制器定时扫描broker的心跳这是发现broker下线的用例选主 不同于dledger的共识选举broker选主是控制器根据策略选某个broker作为master不需要多数的3节点及以上
总结
broker启动或重启恢复注册到控制器之后定时发送心跳到控制器控制器记录broker心跳定时扫描心跳记录未接收到broker 2个周期(可配置)的心跳认为broker下线发起broker选主选主结束通知brokerbroker依据选主结果切换为master/slave实现broker高可用(自动切换)。 同步broker副本信息 这是心跳的补充控制器扫描心跳发现broker下线选举通知broker选主结果但通知服务是oneway模式不保证通知成功同步broker副本信息比较自身的master epoch和其他broker的如果有更新的master epoch说明自身错过了新master通知 更新SyncStateSet broker master负责 master负责复制消息日志到组内slave拥有slave复制进度的一手资料不断更新到控制器为重选master恢复准备
NEXT
下一篇源码分析