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

261 阅读4分钟

这是我参与「第四届青训营 -大数据场」笔记创作活动的第12篇笔记

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

元数据服务高可用

高可用的需求

高可用的形式

服务器可用:

  1. 热备份
  2. 冷备份

故障恢复操作:

  1. 人工切换
  2. 自动切换

HDFS NameNode高可用架构

image.png

组件介绍:

  1. ActiveNameNode:主节点,提供服务,生产日志
  2. StandbyNameNode:备节点,消费日志
  3. ZooKeeper:为自动选主提供统一协调服务
  4. BookKeeper:提供日志存储服务
  5. AKFC:NameNode探活、触发主备切换
  6. HA Client:提供了自动切换的客户端
  7. edit log:操作的日志

状态机复制和日志

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

组件:

  1. 状态机以及其副本
  2. 变更日志
  3. 共识协议

image.png

NameNode状态持久化

(待补充)

NameNode操作日志的生产消费

image.png

目录树和文件信息的更新

Active生产,Standby消费

物理日志与逻辑日志

日志系统:

  1. 高可用
  2. 高拓展性
  3. 高性能
  4. 强一致(有序)

NameNode块状态维护

DataNode要向Active和Standby两种节点做出心跳(Heartbeat)

这样两种节点可知DataNode是存活的状态

区别:

  1. Active即接收,也发起变更
  2. Standby只接收,不发起变更

Content Stale状态:

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

image.png

分布式协调组件

ZooKeeper

image.png

一般用于提供选主、协调、元数据存储

使用它的组件:

  1. HDFS、YARN、HBase
  2. Kafka.ClickHouse

HA核心机制:Watch

自动主备切换流程-Server侧

image.png

ZKFailoverController:

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

自动主备切换流程-Client侧

image.png

核心机制:StandbyException

通过此机制,Client每次可以找到真正的Active

BookKeeper架构

image.png

BookKeeper存储日志:

  1. 低延时
  2. 持久性
  3. 强一致性
  4. 读写高可用

Application可以理解为HDFS的NameNode

Client提供两种API,Ledger API 和 Log stream API

元数据存储在ZooKeeper集群

Quorum机制

image.png

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

场景:

  1. 多副本对象存储,用版本号标识数据新旧

BookKeeper Quorum

image.png

Write Quorum:写入副本数

Ack Quorum:响应副本数

BookKeeper Ensemble

image.png

如图所示:

有4台机器,要求写入3个副本,数据相对均衡

数据存储高可用

HDFS多副本

image.png

如图是Hadoop的多副本放置

优点:

  1. 读写路径简单
  2. 副本修复简单
  3. 高可用

Erasure Coding原理

image.png

如图是Reed Solomon 算法原理

HDFS Erasure Coding原理

image.png

如图: 直接保存的EC和Stripe(条带化)后保存的EC

元数据高拓展性

元数据节点拓展性的挑战

HDFS NameNode是个集中式服务,部署在单个机器上,内存和磁盘的容量、CPU的计算力都不能无限拓展

Scale out 方案

image.png

KV模型的系统可以使用partition

  1. Redis
  2. Kafka
  3. MySQL(分库分表)

如图:三种数据路由方式:

  1. 服务端侧
  2. 路由层
  3. 客户端层

社区解决方案-BlockPool

image.png

解决DN同时服务多组NN的问题

文件服务分层

  1. Namespace
  2. Block Storage

用blockpool来区分DN的服务

  1. 数据块存储
  2. 心跳和块上报

社区解决方案-viewfs

image.png

Federation架构:将多个不同集群组合起来,对外表像一个集群一样

如图:viewfs通过在client-side的配置,指定不同的目录访问不同的NameNode

局限性:运维复杂

字节跳动-NNProxy

NNProxy主要实现了路由管理和RPC转发以及鉴权、限流、查询缓存等额外能力

存储数据高拓展性

超大集群的长尾延迟

image.png

image.png

长尾延迟:

尾部的延迟,衡量系统最差的请求的情况,会显著的要差于平均值

慢节点

慢节点:

读取速度过慢,导致客户端阻塞

超大集群下的数据可靠性

  1. 条件一:超大集群下,有一部分机器是损坏来不及修理的
  2. 条件二:副本放置策略完全随机
  3. 条件三:DN的容量足够大

推论:必然有部分数据全部副本在损坏的机器上,发生数据丢失