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

123 阅读3分钟

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

高可用

高可用需求

可能的故障:设备故障、软件故障、人为故障

高可用衡量:MTTR、MTTF、MTBF

可用性 A=MTBFMTBF+MTTRA=\frac{MTBF}{MTBF+MTTR}

服务高可用:冷备份、热备份

故障恢复操作:人工切换、自动切换

高可用架构

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

Active生产,StandBy消费

content stale状态:避免主备切换后的DN的不确定状态

自动主备切换

ZKFC(ZooKeeperFailoverController)

注册并监控NameNode的存活状态 作为外部组件,驱动NameNode的主备切换

脑裂机制:

client侧

StandByException机制

BookKeeper架构

image.png

Quorum机制

多副本一致性读写

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

规则

Qw+Qr>QQw>Q/2Q_w+Q_r>Q\\Q_w>Q/2

BookKeeper Quorum

Sloppy Quorum机制

顺序追加,只写

Write Quorum

Ack Quorum

数据存储高可用

RAID Redundant Array of Independent Disk

  • RAID0:条带化
  • RAID1:冗余
  • RAID3:容错检验

image.png

HDFS多副本

HDFS版本的RAID1,通过checksum检验正确性

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

erasure coding EC 纠删码

Reed Solomon算法

image.png

网络架构

服务器Server 机架Rack TOR(top of rack)机架顶部的交换机 POD(Point of Delivery) :数据中心中的一个物理区域 数据中心(Data Center) :集中部署服务器的场所

元数据高扩展性

scale up vs. scale out 提升单个服务器的能力vs.部署多个服务器提供服务

挑战:

  • 名字空间分裂
  • DataNode汇报
  • 目录树结构本身复杂

scale out方案

KV模型的系统可以用partition

  • Kafka
  • Redis
  • MySQL(分库分表)
BlockPool方案

文件服务分层

  • NameSpace
  • Block Storage

image.png

viewfs方案

federation架构:将多个集群组合起来,表现得像一个集群一样

viewfs通过在client侧的配置指定不同的目录使用不同的NameNode

NNProxy

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

数据存储高扩展性

超大集群的长尾延迟问题

主要的延迟会分布在正常范围内,但小部分请求延迟可能会很大。如p99表示99%的请求延迟会小于1ms,但1%的请求延迟可能会将很大

用户访问多个服务时,请求的延迟取决于最慢的请求响应延迟

慢节点的发生

  • 共享资源、后台维护、请求多级排队、功率限制
  • 机器损坏
  • 混沌现象

部分数据块的读取受长尾影响会拖累整个任务的进行

超大集群的负载均衡和数据迁移

  • 避免热点
  • 降低成本
  • 提高可靠性

典型场景

image.png

数据迁移

跨NN迁移

  • DistCopy:基于MapReduce,要拷贝数据,流量大速度较慢
  • FastCopy:需要新旧集群的DN列表一致,对于元数据直接拷贝,对于数据块进行hardlink(让两条路景指向同一块数据)到目标BlockPool

Balancer工具

image.png