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

178 阅读7分钟

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

0 引言

HDFS通过将文件分块来存储大文件,HDFS的组件有NameNode和DataNode,分别负责提供元数据和数据服务。

在读/写数据时,HDFS客户端需要先从NameNode上获取数据读取/写入的DataNode地址,然后和DataNode交互来完成数据读/写。

思维导图.png

1 元数据高可用

1.1 高可用的需求

当系统软硬件出现故障或者机房出问题时,防止造成项目损失,有效的高可用系统就显得很重要。

故障处理流程:

故障发生
->故障发现(notification)->故障定位(location)->
开始修复
->修复(fix)->测试(testing)->恢复(recovery)->
恢复正常

衡量高可用的指标有:

  • 平均修复时间(Mean time to repair,MTTR)
  • 平均失效前时间(mean time to failures,MTTF)
  • 平均无故障工作时间(Mean Time Between Failure,MTBF)

可用性定义:A=MTBFMTBF+MTTR{A=\frac{MTBF}{MTBF+MTTR}}

服务高可用:热备份(A故障,紧急启动B)、冷备份(A故障,备份数据导入B再启动)

HDFS作为分布式结构,采用了中心化的元数据管理节点NameNode。NameNode容易成为故障中的单点(single point of failure)。【在分布式系统或多系统共用的ESB系统容易造成单点故障,很严重,因此高可用性很重要】

1.2 HDFS主备同步实现

HDFS高可用架构: HDFS高可用架构.png
组件介绍:

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

节点状态如何保存?
状态机复制是实现容错的常规方法。组件包括状态机以及其副本、变更日志、共识协议。
状态机.png
应对状态持久化(FSlmage和EditLog、Checkpoint机制
状态持久化.png

操作日志如何同步?
Active生产,Standby(可能有多个)消费。物理日志与逻辑日志。日志系统:高可用、高扩展性、高性能、强一致(有序)。 日志系统.png

如何做到自动切换?
DataNode中Heartbeat(心跳)和Block Report(状态上报)可以对块信息上报给NN。
Active接收和发起变更,Standby只接收不发起变更。
使用Content Stale状态,主备切换后,避免DN的不确定状态(假如有多个NN可工作,找到适合的)。

1.3 HDFS自动主备切换

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

HA(High Available)核心机制:Watch

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

Client端:
核心机制: StandbyException
Client自动处理

1.4 日志系统BookKeeper简介

BookKeeper架构:
BookKeeper架构.png
BookKeeper存储日志:低延时、持久性、强一致性、读写高可用。

Quorum机制:
多副本一致性读写(多副本对象存储,用版本号标识数据新旧)
Quorum机制.png 规则:Qr+Qw>Q,Qw>Q/2{Q_r+Q_w>Q , Q_w>Q/2}

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

Ensemble机制:
优势:数据均衡 Ensemble机制.png

2 数据存储高可用

2.1 单机存储的数据高可用机制

Redundant Array of Independent Disks(RAID):独立磁盘冗余阵列是一种将多个磁盘驱动器组件(通常是多块硬盘或多个分区)组合为一个逻辑单元的存储技术,从而提供比单个硬盘更高的存储性能和更可靠的数据备份技术。(他的特点有:廉价、高性能、大容量、高可用)

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

RAID.png

2.2 HDFS的数据高可用机制

HDFS多副本(HDFS版本的RAID1。优点:读写路径简单、副本修复简单、高可用) HDFS多副本.png

Erasure Coding原理(HDFS版本的RAID2/3。业界常用Reed Solomon算法实现) ReedSolomon算法实现.png

HDFS Erasure Coding(HDFS版本的RAID2。)

2.3 考虑网络架构的数据高可用

机架(Rack):放服务器的架子。

TOR(Top of Rack):机架顶部的交换机。

数据中心(Data Center):集中部署服务器的场所

副本放置策略―机架感知(trade-off:一个本地、一个远端) 机架感知.png

2.4 案例:字节跳动的HDFS多机房容灾方案简介

HDFS双机房放置的设计:

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

多机房部署.png

3 元数据高扩展性

3.1 元数据扩展性挑战

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

因此,两种办法:scale up(扩容单个服务器的能力)、scale out(部署多个服务器来服务)。

需要格外注意:名字空间分裂、DataNode汇报、目录树结构本身复杂问题。

KV模型的系统可以使用partition:Redis、Kafka、MySQL(分库分表)

三种数据路由方式:服务端侧、路由层、客户端侧

3.2 社区的解决方案

BlockPool:
解决DN同时服务多组NN的问题
文件服务分层: Namespace、Block Storage
用blockpool来区分DN的服务:数据块存储、心跳和块上报
BlockPool.png

viewfs:
Federation架构:将多个不同集群组合起来,对外表现像─一个集群一样。
图表示:viewfs通过在client-side的配置,指定不同的目录访问不同的NameNode。
局限性:运维复杂
viewfs.png

3.3 字节跳动的NNProxy方案

NNProxy是HDFS代理层,提供了路由服务
NNProxy主要实现了路由管理和RPC转发,以及鉴权、限流、查询缓存等额外能力。 (路由规则、目录树采用路径最长匹配规则) NNProxy所在系统上下游.png

3.4 案例:小文件问题

小文件问题(LSOF,lots of small files):大小不到一个HDFS Block大小的文件过多,导致NameNode瓶颈 、I/O变小,数据访问变慢、计算任务启动慢等问题。

解决方案:后台任务合并小文件、Shuffle Service

4 数据存储高扩展性

4.1 超大集群的长尾问题

延迟的分布:用百分数来表示访问的延迟的统计特征。
例如p95延迟为1ms,代表95%的请求延迟要低于1ms,但后5%的请求延迟会大于1ms。

长尾延迟:尾部(p99/p999/p999)的延迟,衡量系统最差的请求的情况。会显著的要差于平均值。

尾部延迟放大:访问的服务变多,尾部的请求就会越发的慢(木桶原理)。变慢原因是固定延迟阈值,固定延迟百分位。

4.2 超大集群的可靠性问题

Copyset: 将DataNode分为若干个Copyset,选块在Copyset内部选择
原理:减少了副本放置的组合数,从而降低副本丢失的概率。
思考:缺陷是什么?
我个人认为是会增加读写的复杂度,相当于在DN上面套了一层。通过查资料:节点数相对变化太大不适合,初始的copyset数量的不确定。 Copyset.png

4.3 超大集群的不均匀问题

数据的不均匀(节点容量不均匀、数据新旧不均匀、访问类型不均匀)和资源负载不均匀,在HDFS中表现为数据写入不均、DN冷热不均。解决办法就是负载均衡

4.4 数据迁移工具速览

跨NN迁移
DistCopy

  • 基于MapReduce,通过一个个任务,将数据从一个NameNode拷贝到另一个NameNode。
  • 需要拷贝数据,流量较大,速度较慢。

FastCopy

  • 开源社区的无需拷贝数据的快速元数据迁移方案。
  • 前提条件:新旧集群的DN列表吻合。
  • 对于元数据,直接复制目录树的结构和块信息。
  • 对于数据块,直接要求DataNode从源BlockPool hardlink到目标BlookPool,没有数据拷贝。
  • hardlink:直接让两个路径指向同一块数据。

Balancer
工具向DataNode发起迁移命令,平衡各个DataNode的容量。
使用场景:单机房使用、多机房使用限流措施。
评价标准:稳定性成本、可运维性、执行效率。
Balancer.png

参考信息

1.【大数据专场 学习资料三】第四届字节跳动青训营
2. 字节跳动10万节点HDFS集群多机房架构演进之路
3. 带你入坑大数据(一) --- HDFS基础概念篇
4. Hadoop HA
5. 轮询和长轮询的区别
6. ZooKeeper集群脑裂问题处理,值得收藏!
7. 器 | 快速入门RAID
8. Copyset Replication及其在Curve分布式存储数据均衡分布策略的应用