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

105 阅读4分钟

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

1659748902286.png

1.2.1 HDFS NameNode高可用架构

组件介绍

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

围绕三个问题来看高可用

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

image.png

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

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

  • 状态机以及其副本
    状态机的含义:保存机内原本的状态并随着外部世界一些状态机内部的动作、去做数据的变换。
  • 变更日志
  • 共识协议

共识协议中状态机的基本模型: image.png

NameNode 操作日志的生产消费

目录树和文件信息的更新 Active生产,Standby消费,物理日志、逻辑日志 `5RF~{PRPCLE3L%]AI40C.png

日志系统:

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

分布式协调组件-ZooKeeper

使用它的组件:HDFS\YARN\HBase\KAFKA\ClickHouse
HA核心机制:Watch
ZKFC作为外部组件,驱动HDFS NameNode的主备切换

轮询探活 脑裂问题 Fence机制

BookKeeper架构

BookKeeper存储日志

  • 低延时
  • 持久性
  • 强一致性
  • 读写高可用

78V@7~2(IT@[)7XZ{N}3F.png

对比:日志系统和文件系统的复杂度

Quorum机制

多副本一致性读写
场景:多副本对象存储,用版本号标识数据新旧\

image.png

BookKeeper Quorum

Sloppy Quorum机制 日志场景:顺序追加、只写 Write Quorum :写入副本数 Ack Quorum:响应副本数 思考: Client 挂掉导致不确认写入了多少数据,如何恢复?

image.png

BookKeeper Ensemble

Ensemble 机制 Round-Robin Load Balancer

  • 第一轮:1,2,3
  • 第二轮:2,3,4
  • 第三轮:3,4,1
  • 第四轮:4,1,2

优势:数据均衡

image.png

数据存储高可用

RAID(单机存储)--Redundant Array of Independent Disks 特点:廉价、高性能、大容量、高可用

RAID方案讲解 RAID 0∶条带化(轮流写入) RAID 1:冗余(写入同样的数据) RAID 3:容错校验(把数据按比特位做分割,做额外的冗余,用校验码来检验数据是否正确以及验证缺失的数据是什么)

image.png

HDFS多副本

FR27W6QQ3(3C0_WINC9EUDW.png 优点:

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

Erasure Coding原理

HDFS版本的RAID 2/3

业界常用的Reed Solomon算法
图:RS算法原理

image.png

HDFS版本的RAID 2

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

image.png

和多副本比较

  • 读写速度
  • 成本
  • 修复速度
  • 读写路径的实现

初识网络架构

Server : 一台服务器 机架(Rack):放服务器的架子。 [P]PN)8J{C4A0YK)PK%F53C.png TOR(Top of Rack):机架市部的太坎切.296POD(Point of Delivery):数据中心中的一个物理区域数据中心(Data Center):集中部署服务器的场所

机架感知

字节跳动的HDFS多机房实践
字节跳动的HDFS集群,从单机房演进到双机房,再从双机房演进到更多的机房。

多机房解决的问题

  • 容量问题
  • 容灾问题

HDFS 双机房放置的设计

  • 写入时,每个数据块在两个机房至少各有一个副本,数据实时写入到两个机房。
  • 读取时优先读本地的副本,避免了大量的跨机房读取

image.png

元数据高扩展性

元数据节点扩展性的挑战

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

常见的Scale Out方案

KV模型的系统可以使用partition

  • Redis
  • Kafka
  • MySQL(分库分表)

三种数据路由方式

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

image.png 思考:目录树怎么拆分比较合理?(Figuration?/Federation?

Federation架构:将多个不同集群组合起来,对外表现像一个集群一样。 右图: viewfs通过在client-side的配置,指定不同的目录访问不同的NameNode。

image.png

局限性:运维复杂

字节跳动的NNProxy

NNProxy是ByteDance自研的HDFS代理层,提供了路由服务。 于2016年开源,项目地址:github.com/bytedance/n… ·开源社区的Router Based Federation在2017年上线。 NNProxy主要实现了路由管理和RPC转发·以及鉴权、限流、查询缓存等额外能力

image.png 图:NNProxy所在系统上下游

3.3.2 NNProxy路由规则保存 回顾:三种数据路由方式 ·服务端侧·路由层,客户端侧 考虑点:扩展性、运维性

image.png 图:路由规则的保存

NNProxy路由转发实现 路径最长匹配规则,可以进一步划分目录树

小文件问题

Y86IOEA`$LAZ8SR_7LLQT3W.png

存储数据高扩展性

延迟的分布和长尾延迟

PVJY6~[KP74]JY96(Z76A4G.png

尾部延迟放大

木桶原理: 尾部延迟放大:访问请求越多,尾部的请求发送越慢 如何变慢?(控制变量法)

  • 固定延迟阈值
  • 固定延迟百分位

长尾问题表现--慢节点

L5A5NDUZAA{LGH2%BVT5Y18.png

超大集群的负载均衡和数据迁移 优点: 1.避免热点 2.可靠性 3.降低成本 数据写入不均匀(节点容量、数据新旧、访问类型) 数据读取不均匀(节点容量、数据新旧、访问类型)

负载均衡和数据迁移的典型场景

image.png

数据迁移工具--Balancer

工具向DataNode发起迁移命令平衡各个DataNode 的容量。

场景

  • 单机房使用、多机房使用
  • 限流措施

评价标准

  • 稳定性成本
  • 可运维性
  • 执行效率 JCI5NGV$L)PN6BRF3HQ5DNV.png

小结

image.png