HDFS 元数据高可用 | 青训营笔记

123 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

高可用的需求

服务高可用的需求

image-20220805202606209

故障类型:

  • 软件故障
  • 硬件故障
  • 人为故障

灾难:数据中心级别不可用

  • 机房断电
  • 空调机房停机
  • 机房间网络故障、拥塞

故障不可避免,灾难时有发生

而如果HDFS系统不可用:

  • 无法核算广告账单,直接引发收入损失
  • 无法生产数据报表,数据驱动无从谈起
  • 无法进行模型训练,引起用户体验下滑

业务停止的损失极大,所以HDFS系统的高可用性就至关重要

高可用的衡量

image-20220824212939097

故障度量的指标

  • MTTR(Mean Time To Repair):平均修复时间,系统能多快恢复。
  • MTTF(Mean Time To Failure):平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制造业)
  • MTBF(Mean Time Between Failures):平均无故障时间,两次故障间的间隔,一般用于可修复的系统(软件)

可用性的年化

image-20220824213004658

高可用的形式

➢服务高可用

  • 热备份
  • 冷备份

➢故障恢复操作

  • 人工切换
  • 自动切换

人工的反应、决策时间都更长,高可用需要让系统自动决策。 HDFS的设计中,采用了中心化的元数据管理节点NameNode. NameNode容易成为故障中的单点( single point of failure )

HDFS 主备同步实现

HDFS NameNode 高可用架构

image-20220824213230510

  • Active NameNode:提供服务的 NameNode 主节点,生产 editlog。
  • Standby NameNode:不提供服务,起备份作用的 NameNode 备节点,消费 editlog
  • editlog:用户变更操作的记录,具有全局顺序,是 HDFS 的变更日志。
  • ZooKeeper:开源的分布式协调组件,主要功能有节点注册、主节点选举、元数据存储。
  • BookKeeper:开源的日志存储组件,存储 editlog
  • ZKFC:和 ZK、NN 通信,进行 NN 探活和自动主备切换。
  • HA Client:处理 StandbyException,在主备节点间挑选到提供服务的主节点。

HDFS 自动主备切换

自动主备切换流程 - Server 侧

ZKFailoverController 作为外部组件,驱动HDFS NameNode的主备切换

脑裂问题:多个节点都认为自己是 active,都会去写日志

Fence 机制:会阻止多个节点同时写日志

自动主备切换流程 - Client 侧

过去,只存一个 ND 的地址,但现在会存一组,然后依次轮询,如果是 Standby 就一直往后找,直到找到一个 active