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

210 阅读4分钟

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

一.元数据高可用

1.高可用的衡量

  • 服务可用性指标:MTTR MTTF(平均故障的时间) MTBF(两次故障的时间)

image.png

  • 可用性的年化:

image.png

全年不可用时间:
可用性 99.9%,全年8.76小时不可用
可用性 99.99% 全年52.6小时不可用
可用性 99.999% 全年5.26小时不可用

2.高可用的形式

服务高可用:

  • 热备份:有两个相同的服务,如果一个服务故障,切换到另一个服务(较好)
  • 冷备份:将服务中关键数据备份,将备份在别的服务重启 故障恢复操作:人工的反应、决策时间都长
  • 人工切换
  • 自动切换 人工的反应、决策时间都更长,高可用需要让系统自动决策。 HDFS的设计中,采用了中心化的元数据管理节点NameNode。 NameNode容易成为故障中的单点。

3.HDSF NameNode高可用架构

组件介绍

  • ActiveNamenode:主节点,提供服务,生产日志
  • StandbyNameNode:备节点,消费日志
  • ZooKeeper:为自动选主提供统一协调服务
  • BookKeeper:提供日志存储服务
  • ZKFC:NameNode探活、触发主备切换
  • HA Client:提供了自动切换的客户端
  • editlog:操作的日志

image.png

4.状态机复制和日志

状态机复制是实现容错的常规方法
组件:

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

image.png

5.NameNode状态持久化

Checkpoint机制

image.png

FSimage和EditLog image.png

6.NameNode操作日志的生产消费

Active生产,Standby(可能有多个)消费
物理日志与逻辑日志
日志系统

  • 高可用
  • 高拓展性
  • 高性能
  • 强一致

7.NameNode块状态维护

区别

  • Active即接收,也发起变更
  • Standby只接收,不发起变更 Content Stale状态 主备切换后,避免DN的不确定状态

image.png

8.ZooKeeper:分布式协调组件,一般用于提供选主、协调、元数据存储

使用它的组件:HDFS、yarn、hbase、kafaka、clickhouse

9.自动主备切换流程:Serve侧

ZKFailoverController作为外部组件,驱动HDFS NameNode的主备切换
脑裂问题
轮询探活
Fence机制

image.png

10.自动主备切换流程:Client侧

核心机制:StanbyException

11.Bookeeper架构

BooKeeper存储日志

  • 低延时
  • 持久性
  • 强一致性
  • 读写高可用
    对比:日志系统和文件系统的复杂度 image.png

12.Quorum机制:多副本一致性读写

场景:多副本对象存储,用版本号标识数据新旧
规则: image.png

image.png

13.BookKeeper Quorum

Sloppy Quorum机制
日志场景:顺序追加、只写
Write Quorum:写入副本数
Ack Quorum:响应副本数

image.png

14.BookKeeper Ensemble

Ensemble机制
Round-Robin Load Bnalancer
第一轮:1,2,3
第二轮:2,3,4
第三轮:3,4,1
第四轮:4,1,2
优势:数据均衡

image.png

二.数据存储高可用

1.单机存储:RAID

特点:廉价、高性能、大容量、高可用

2.RAID 方案讲解

RAID 0:条带化
RAID 1:冗余
RAID 3:容错校验

image.png

3.HDFS多副本

HDFS版本的RAID 1:

  • 读写路径简单
  • 副本修复简单
  • 高可用

image.png

4.Erasure Coding原理

HDFS版本的RAID 2/3 业内常用的Reed Solomon算法: image.png

5.HDFS Erasure Coding

HDFS版本的RAID 2 和多副本比较:

  • 读写速度
  • 成本
  • 修复速度
  • 读写路径的实现 如图,为直接保存的EC和Stripe(条带化)后保存的EC

image.png

6.网络架构

  • 机架(Rack):放服务器的架子
  • TOR(Top of Rack):机架顶部的交换机
  • 数据中心(Data Center):集中部署服务器的场所

7.副本放置策略:机架感知

8.字节跳动的HDFS多机房实践

  • 多机房解决的问题:容灾问题、容量问题
  • HDFS双机房放置的设计
  • 写入时,每个数据块在两个机房至少各有一个副本,数据实时写入到两个机房
  • 读取时,优先读取本地的副本,避免了大量的跨机房读取。

image.png

9.多机房容灾实践

多机房部署的组件:

  • ZooKeeper
  • BookKeeper
  • NameNode
  • DataNode 容灾期间的策略:
  • 容灾期间,限制跨机房写入
  • 容灾期间,限制跨机房副本复制

三.元数据高拓展性

1.元数据节点拓展性的挑战

  • HDFS NameNode是个集中式服务,部署在单个机器上,内存和磁盘的容量、CPU的计算力都不能无限扩展
  • scale up:扩容单个服务器的能力
  • scale out:部署多个服务器来服务
  • 挑战:名字空间分裂、DataNode汇报、目录树结构本身复杂

image.png

2.常见的Scale Out方案

三种数据路由方式:

  • 服务侧端
  • 路由层
  • 客户端侧

image.png

3.社区解决方案:BlockPool

解决DN同时服务多组NN的问题 文件服务分层:Namespace Block Storage