HDFS高可用性机制|青训营笔记

224 阅读5分钟

这是我参与「第四届青训营」笔记创作活动的第9天,学习内容为《HDFS高可用性机制》,内容包括 元数据高可用、数据存储高可用。


思维导图如下:

HDFS高可用性机制.png

元数据高可用

高可用

高可用的需求

  1. 高可用在困境中仍可工作,降低用户感知。故障不可避免,灾难时有发生。
  2. 故障类型:硬件故障、软件故障、人为故障;
  3. 灾难(数据中心级别不可用):机房断电、机房空调停机、机房间网络故障/阻塞;
  4. 如果HDFS不可用:
  1. 无法核算广告账单,直接引入收入损失
  2. 无法生成数据报表,数据驱动无从谈起
  3. 无法进行模型训练,引起用户体验下滑

高可用的衡量

image.png

  1. 服务可用性指标
  1. MTTR:发现一次故障,用多久时间恢复;
  2. MTTF:平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制作业);
  3. MTBF:平均无故障时间,两次故障间的间隔,一般用于可修复系统(软件)。过短,不稳定,过长,系统稳定。
  1. 可用性的年化
  1. MTBF/(MTBF+MTTR)
  2. 可用性:全年中多少时间是可用的。分子:MTBF
  3. 全年不可用时间
  1. 可用性99.9:8.76小时不可用
  2. 可用性99.99:52.6分钟不可用
  3. 可用性99.999:5.26分钟不可用

高可用的形式

  1. 服务高可用:热备份、冷备份
  2. 故障恢复操作:人工切换、自动切换
  3. HDFS的设计中,采用中心化的元数据管理节点NameNode,容易成为故障中的单点

HDFS主备同步实现

HDFS NameNode高可用架构

  1. 架构

image.png

  1. 围绕3个问题看高可用:
  1. 节点状态如何更新
  2. 操作日志如何同步
  3. 如何做到自动切换

状态机复制和日志

image.png

  1. 状态机复制是实现容错的常规方法
  2. 组件:
  1. 状态机:一个状态机从初始状态开始,每一个输入都被传入转换函数和输出函数,以生成一个新的状态和输出。新输入被接收到前,状态保持不变,而输出同时被传输给恰当的接受者;
  2. 状态机复制:确定性的状态机具有「处理确定的输入后,状态唯一确定」的特性。状态机复制利用这个特性实现多个相同的状态机副本的同步更新;
  3. 变更日志:触发状态机更新的变更操作,具有全局确定的顺序;
  4. 共识协议:确保每个副本都能收到相同的日志的共识协议,常见的有 Paxos、Raft、ZAB。

NameNode状态持久化

  1. FSImage文件:较大的状态记录文件,GB级别,某一时刻NameNode全部需要持久化的数据的记录;
  2. EditLog文件:某段时间发生的变更日志的存储文件,KB-MB级别;
  3. Checkpoint机制:将旧的 FSImage 和 EditLog 合并生成新的 FSImage 的流程,在完成后旧的数据可以被清理以释放空间。

NameNode操作日志的生成消费

image.png

  1. 日志:目录树和文件信息的更新
  2. Active生成,Standby消费
  3. 存储为:物理日志与逻辑日志
  4. 日志系统
  1. 高可用
  2. 高扩展
  3. 高性能
  4. 强一致

NameNode块状态维护

image.png

  1. DN给主备都发送,主备接受有区别:Active既接受,也发起变更;Standby只接受,不发起变更
  2. Content State状态:主备切换后,避免DN的不确定状态

HDFS自动主备切换

  1. 分布式协调组件--Zookeeper
  1. 一般用于提供选主、协调、元数据存储
  2. 核心机制:Watch,监控leader节点,挂了就通知其他可用节点,选举leader
  1. 适配/自动主备切换流程--server侧
  1. 作为外部组件,驱动HDFS NameNode的主备切换
  2. 在ZK上注册节点,监控节点状态;跟部署在一起的NN监控其状态,发送RPC请求等待其回复
  3. 轮询谈话
  4. 脑裂问题
  5. Fence机制
  1. 适配/自动主备切换流程--client侧
  1. Client自动处理:自动提供HA容错,轮训,找的真正的Active节点NN

高可用日志系统BookKeeper简介

  1. BookKeeper架构

image.png

  1. Quorum机制--------多副本一致性读写:规则,读+写>总;写>总的半数
  2. BooKeeper Quorum:日志场景,顺序追加、只写

image.png

  1. BooKeeper Ensemble

image.png

  1. 轮询(Round-Robin)来确认 write quorum 实际对应的存储节点实例
  2. 数据均衡

数据存储高可用

单机存储的数据高可用机制

  1. 单机存储RAID
  2. 特点:廉价、高性能、大容量、高可用
  3. RAID方案:RAID0、RAID1、RAID3

HDFS的数据高可用机制

  1. HDFS多副本
  1. 优点:读写路径简单、副本修复简单、高可用
  2. 存储成本(3副本机制)
  1. HDFS Erasure Coding原理(纠错码)

image.png

  1. 将数据分段,通过特殊的编码方式存储额外的校验块,并条带化的组成块,存储在 DN 上
  2. 和多副本比较
  1. 读写速度:顺序读更快
  2. 成本:存储成本低
  3. 修复速度:有额外计算开销
  4. 读写路径的实现:更复杂

考虑网络架构的数据高可用

  1. 初始网络架构:机架、TOR、POD、数据中心
  2. 副本放置策略---机架感知
  1. 一个TOR故障导致整个机架不可用
  2. 降低跨Rack流量
  3. 链式写,远端写
  4. 产生一部分rack流量,但是仍有两个副本放在同一个rack上

案例:HDFS多机房容灾方案简介

  1. 解决的问题:容量问题、容灾问题
  2. HDFS双机房的设计
  1. 写入时,每个数据块在两个机房至少各有一个副本,数据实时写入到两个机房
  2. 读取时,优先读取本地副本,避免大量的跨机房读取
  1. 多机房部署的主件:zookeeper、BookKeeper、NameNode、DataNode
  2. 容灾期间的策略
  1. 容灾期间,限制跨机房写入
  2. 容灾期间,限制跨机房副本复制

总结:HDFS作为大数据离线分析场景的核心组件,其高可用确保了业务能稳定运行,HDFS上存储的数据随时可以访问。