这是我参与「第四届青训营」笔记创作活动的第9天,学习内容为《HDFS高可用性机制》,内容包括 元数据高可用、数据存储高可用。
思维导图如下:
元数据高可用
高可用
高可用的需求
- 高可用在困境中仍可工作,降低用户感知。故障不可避免,灾难时有发生。
- 故障类型:硬件故障、软件故障、人为故障;
- 灾难(数据中心级别不可用):机房断电、机房空调停机、机房间网络故障/阻塞;
- 如果HDFS不可用:
- 无法核算广告账单,直接引入收入损失
- 无法生成数据报表,数据驱动无从谈起
- 无法进行模型训练,引起用户体验下滑
高可用的衡量
- 服务可用性指标
- MTTR:发现一次故障,用多久时间恢复;
- MTTF:平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制作业);
- MTBF:平均无故障时间,两次故障间的间隔,一般用于可修复系统(软件)。过短,不稳定,过长,系统稳定。
- 可用性的年化
- MTBF/(MTBF+MTTR)
- 可用性:全年中多少时间是可用的。分子:MTBF
- 全年不可用时间
- 可用性99.9:8.76小时不可用
- 可用性99.99:52.6分钟不可用
- 可用性99.999:5.26分钟不可用
高可用的形式
- 服务高可用:热备份、冷备份
- 故障恢复操作:人工切换、自动切换
- HDFS的设计中,采用中心化的元数据管理节点NameNode,容易成为故障中的单点
HDFS主备同步实现
HDFS NameNode高可用架构
- 架构
- 围绕3个问题看高可用:
- 节点状态如何更新
- 操作日志如何同步
- 如何做到自动切换
状态机复制和日志
- 状态机复制是实现容错的常规方法
- 组件:
- 状态机:一个状态机从初始状态开始,每一个输入都被传入转换函数和输出函数,以生成一个新的状态和输出。新输入被接收到前,状态保持不变,而输出同时被传输给恰当的接受者;
- 状态机复制:确定性的状态机具有「处理确定的输入后,状态唯一确定」的特性。状态机复制利用这个特性实现多个相同的状态机副本的同步更新;
- 变更日志:触发状态机更新的变更操作,具有全局确定的顺序;
- 共识协议:确保每个副本都能收到相同的日志的共识协议,常见的有 Paxos、Raft、ZAB。
NameNode状态持久化
- FSImage文件:较大的状态记录文件,GB级别,某一时刻NameNode全部需要持久化的数据的记录;
- EditLog文件:某段时间发生的变更日志的存储文件,KB-MB级别;
- Checkpoint机制:将旧的 FSImage 和 EditLog 合并生成新的 FSImage 的流程,在完成后旧的数据可以被清理以释放空间。
NameNode操作日志的生成消费
- 日志:目录树和文件信息的更新
- Active生成,Standby消费
- 存储为:物理日志与逻辑日志
- 日志系统
- 高可用
- 高扩展
- 高性能
- 强一致
NameNode块状态维护
- DN给主备都发送,主备接受有区别:Active既接受,也发起变更;Standby只接受,不发起变更
- Content State状态:主备切换后,避免DN的不确定状态
HDFS自动主备切换
- 分布式协调组件--Zookeeper
- 一般用于提供选主、协调、元数据存储
- 核心机制:Watch,监控leader节点,挂了就通知其他可用节点,选举leader
- 适配/自动主备切换流程--server侧
- 作为外部组件,驱动HDFS NameNode的主备切换
- 在ZK上注册节点,监控节点状态;跟部署在一起的NN监控其状态,发送RPC请求等待其回复
- 轮询谈话
- 脑裂问题
- Fence机制
- 适配/自动主备切换流程--client侧
- Client自动处理:自动提供HA容错,轮训,找的真正的Active节点NN
高可用日志系统BookKeeper简介
- BookKeeper架构
- Quorum机制--------多副本一致性读写:规则,读+写>总;写>总的半数
- BooKeeper Quorum:日志场景,顺序追加、只写
- BooKeeper Ensemble
- 轮询(Round-Robin)来确认 write quorum 实际对应的存储节点实例
- 数据均衡
数据存储高可用
单机存储的数据高可用机制
- 单机存储RAID
- 特点:廉价、高性能、大容量、高可用
- RAID方案:RAID0、RAID1、RAID3
HDFS的数据高可用机制
- HDFS多副本
- 优点:读写路径简单、副本修复简单、高可用
- 存储成本(3副本机制)
- HDFS Erasure Coding原理(纠错码)
- 将数据分段,通过特殊的编码方式存储额外的校验块,并条带化的组成块,存储在 DN 上
- 和多副本比较
- 读写速度:顺序读更快
- 成本:存储成本低
- 修复速度:有额外计算开销
- 读写路径的实现:更复杂
考虑网络架构的数据高可用
- 初始网络架构:机架、TOR、POD、数据中心
- 副本放置策略---机架感知
- 一个TOR故障导致整个机架不可用
- 降低跨Rack流量
- 链式写,远端写
- 产生一部分rack流量,但是仍有两个副本放在同一个rack上
案例:HDFS多机房容灾方案简介
- 解决的问题:容量问题、容灾问题
- HDFS双机房的设计
- 写入时,每个数据块在两个机房至少各有一个副本,数据实时写入到两个机房
- 读取时,优先读取本地副本,避免大量的跨机房读取
- 多机房部署的主件:zookeeper、BookKeeper、NameNode、DataNode
- 容灾期间的策略
- 容灾期间,限制跨机房写入
- 容灾期间,限制跨机房副本复制
总结:HDFS作为大数据离线分析场景的核心组件,其高可用确保了业务能稳定运行,HDFS上存储的数据随时可以访问。