HDFS高可用和高扩展机制分析 | 青训营笔记

77 阅读3分钟

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

一个“可以用”的系统和“好用”的系统,差距就是“高可用”和“高可扩展性”

1.元数据高可用

主备系统:基于日志、自动切换、实时热备

①高可用的需求

服务高可用的需求

  • 故障类型

    • 硬件故障
    • 软件故障
    • 人为故障
  • 灾难:数据中心级别不可用

    • 机房断电
    • 机房空调停机
    • 机房间网络故障、拥塞
  • 故障不可避免,灾难时有发生

  • 如果HDFS不可用

    • 无法核算广告账单,直接引发收入损失
    • 无法生产数据报表,数据驱动无从谈起
    • 无法进行模型训练,引起用户体验下降
  • 业务停止的损失极大,所以HDFS系统的高可用性至关重要

高可用的衡量

image.png

  • 服务可用性指标

    • MTTR(mean time to recover):发现一次故障,需要多久去恢复
    • MTTF(mean time to failure):平均一次故障要花费多久的时间
    • MTBF(mean time between failure):两次故障的时间,过短说明系统不够稳定

可用性的年化

  • 可用性:

image.png image.png

高可用的形式

  • 服务高可用

    • 热备份:有一个相同的服务在跑着,如果旧的服务出现故障,可以立刻切到新的服务上,立马接管
    • 冷备份:将服务中的关键数据(如:HDFS的整个部署)的备份在其他设备上进行重启,不如热备份:需要一个重启的时间
  • 故障恢复操作

    • 人工切换
    • 自动切换
  • 人工的反应、决策时间都更长,高可用需要让系统自动决策

  • HDFS的设计中,采用了中心化的元数据管理节点NameNode

  • NameNode容易成为故障中的单点(single point of failure)

②HDFS主备同步实现

HDFS NameNode高可用架构

image.png

  • 组件介绍

    • ActiveNameNode:主节点,提供服务,生产日志
    • StandbyNameNode:备节点,消费日志
    • ZooKeeper:为自动选主提供统一协调服务
    • BookKeeper:提供日志存储服务
    • ZKFC:NameNode探活、触发主备切换
    • HA Client:提供了自动切换的客户端
    • edit log:操作的日志
  • 围绕三个问题来看高可用

    • 节点状态如何更新
    • 操作日志如何同步
    • 如何做到自动切换

理论基础-状态机复制和日志

image.png

  • 状态机复制是实现容错的常规方法

  • 组件

    • 状态机及其副本
    • 变更日志
    • 共识协议

NameNode操作日志的生产消费

image.png

  • 目录树和文件信息的更新

  • Active生产,Standby消费

  • 物理日志与逻辑日志

  • 日志系统

    • 高可用
    • 高扩展性
    • 高性能
    • 强一致(有序)

NameNode块状态维护

  • 回顾

    • DataNode Heartbeat
    • DateNode Block Report
  • 区别

    • Active既接收,也发起变更
    • Standby只接收,不发起变更
  • Content Stale状态

    • 主备切换后,避免DN的不确定状态

③HDFS自动主备切换

分布式协调组件-ZooKeeper

image.png

  • 一般用于提供选主、协调、元数据存储
  • 使用它的组件:HDFS、YARN、HBase、Kafka、ClickHouse
  • HA核心机制:Watch