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

194 阅读9分钟

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

上节课,我们了解了HDFS的架构和读写流程

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

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

本节课程主要分为四个方面

  1. HDFS 元数据服务的高可用

  2. HDFS 数据存储高可用

  3. HDFS 元数据服务的高扩展性

  4. HDFS 数据存储的高扩展性

元数据服务的高可用

1.高可用的需求

2.HDFS主备同步实现

3.HDFS自动主备切换

4.日志系统BookKeeper简介

1.1 服务高可用的需求

image.png

故障不可避免,灾难时有发生

为了应对这种问题我们需要实现服务高可用

高可用的衡量:

image.png

故障度量的指标

  • MTTR(Mean Time To Repair):平均修复时间,系统能多快恢复。

  • MTTF(Mean Time To Failure):平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制造业)。

  • MTBF(Mean Time Between Failures):平均无故障时间,两次故障间的间隔,一般用于可修复的系统(软件)。

可用性的年化:

image.png

高可用的形式:

服务高可用:

  • 热备份:主备一个一样的备份,当运行中的出现故障使用这个备份继续执行
  • 冷备份:备份一些重要数据,将这些备份放在其他机器上重启

故障恢复操作:

  • 人工切换:在故障发生时,运维人员接收报警后,手动执行服务切主操作。一般较慢,难以满足全年不可用时间的目标。

  • 自动切换:通过探活组件、分布式共识协议等手段,系统能自动发现主服务的故障,并切换到备份不符。

1.2

1.2.1NameNode高可用架构

image.png

image.png

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

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

image.png

组件:

  • 状态机和副本:一般状态机指的就是存储在盘上的数据库,多个状态机,部署在不同的节点上提供一个容错方式
  • 变更日志:用户操作对状态机的影响,在业务处理时算出来并处理为日志形式
  • 共识协议:为了保证所有的状态机都能收到一个相同的顺序一致,内容一致的日志

NameNdode操作日志的生产消费

image.png

acitve生成日志,Standby消费日志

日志的内容是目录树和文件下的更新

这样保证Active和Standby的状态保持一致。

NameNdode块状态维护

image.png

DateNode心跳机制(Heartbeat)NameNode保持联系,服务高可用中需要将心跳和Active和Standby联系

DataNode的块上报(Block Report)包括在启动时,要求上报时,将自己的DataNode用的块告诉NameNode,服务高可用中需要将块上报给Active和Standby

块上报不会发送到日志中

处理时的区别:

  • Active即接受,也发起变更
  • Standby只接受,不变更

一致性问题:Active对DataNode要求块删除,Standby是不知道的,切换主备后,有发生一次块删除,那就删除了两个块

于是出现Content state状态

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

自动主备切换要使用到

分布式协调组件 -Zookeeper

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

image.png

ZooKeeper有一个多副本存储数据,自己实现了一套共识协议,可以再多个节点之间同步数据。ZooKeeper给客户端提供了watch功能,让客户端可以在ZooKeeper上监控结点。

自动主备切换流程- Server侧

image.png

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

自动主备切换流程- Client侧

核心机制:SyandbyException

找到真的Active,收到旧Active的信息,发送给新的Active

BookKeeper架构

介绍专门用来存储Acctive和Standby的之间log的组件。

image.png

application:可以理解为NameNode

写日志进入 client apis

quorum机制

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

image.png

读写规则:

Qr+Qw>QQ_{r}+Q_{w} > Q

Qw>Q/2Q_{w} > Q/2

sloppy Quorum机制

日志场景:顺序追加,只写

image.png

Ensemble 机制

image.png

将log信息片段通过Round-robin轮询算法分配到Bookie结点中

数据粗存储高可用

  • 单机存储的数据高可用机制
  • HDFS的数据高可用机制
  • 考虑网络架构的数据高可用
  • 案例:字节跳动的HDFS的多级饭容灾方案简介

单机存储-RAID

image.png

RAID方案讲解

image.png

HDFS多副本

image.png

image.png

当出现某个节点的块数据出错直接认定这个块是错误的,想NameNode请求一个这个块

多副本成本过高

引用低成本方案

Erasure Coding 原理

image.png

这里的d0d_{0}可以使比特,字节等,多出来的数据用来校验

image.png 有时候我们只要读取一个bloack中1M的数据,但这个bloc损坏了,我们需要想NameNode重新获取一个block的数据量,这样造成大量的数据传输,于是我们可以将block Stripe(条带化)

image.png

网络架构

image.png

副本放置策略-机架感知

为了解决一个TOR故障导致整个机架不可用和降低跨rack流量

案例

多机房解决的问题

  • 容量问题
  • 容灾问题

image.png

元数据高扩展性

  • 1.元数据扩展性挑战

元数据扩展性挑战

HDFS NameNode是个集中式服务,不是在单个机器上,内存和磁盘的容量,cpu的计算能力都不能无线扩展。

扩展性方案

image.png

  • scale up:通过单机的 CPU、内存、磁盘、网卡能力的提升来提升系统服务能力,受到机器成本和物理定律的限制。

  • scale out:通过让多台机器组成集群,共同对外提供服务来提升系统服务能力。一般也称为高扩展、水平扩展。

常见的Scale out 方案

三种数据路由方式

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

image.png

partition 方法

  • 水平分区和垂直分区:水平分区指按 key 来将数据划分到不同的存储上;垂直分区指将一份数据的不同部分拆开存储,用 key 关联起来。partition 一般都水平分区,又称 shard。
  • 常用于 KV 模型,通过 hash 或者分段的手段,将不同类型 key 的访问、存储能力分配到不同的服务器上,实现了 scale out。
  • 重点:不同单元之间不能有关联和依赖,不然访问就难以在一个节点内完成。例如 MySQL 的分库分表方案,难以应对复杂跨库 join。

社区解决方案-BlockPool

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

将文件服务分层 namespace block storage

用blockpool来区分DH的服务

  • 数据块存储
  • 心跳和块上报

image.png

社区-viewfs

相当于Scale out方案的第三种

Ferderation架构:将多个不用集群组合起来,对外表想一个集群一样

image.png

字节跳动的NNproxy

是字节自研的HDFS代理层,提供了路由服务

image.png

image.png

NNproxy路由规则保存

image.png

NNproxy路由转发实现

路径最长匹配规则,可以进一步划分目录树

image.png

案例:小文件问题

存储数据高扩展性

  • 超大集群的长尾问题
  • 超大集群的可靠性问题
  • 超大集群中不均匀问题
  • 数据迁移工具速览

延迟分布于长尾延迟

image.png

长尾

  • 二八定律:在任何一组东西中,最重要的只占其中一小部分,约 20%,其余 80% 尽管是多数,却是次要的。

  • 长尾:占绝大多数的,重要性低的东西就被称为长尾。

百分位延迟

  • 将所有请求的响应速度从快到慢排序,取其中某百分位的请求的延迟时间。

  • 例如 pct99 代表排在 99% 的请求的延迟。相对于平均值,能更好的衡量长尾的情况。

尾部延迟放大

  • 木桶原理:并行执行的任务的耗时取决于最慢的一个子任务。

  • 尾部延迟放大:一个请求或任务需要访问多个数据节点,只要其中有一个慢,则整个请求或任务的响应就会变慢。

  • 固定延迟阈值,访问的集群越大, 高于该延迟的请求占比越高。

  • 固定延迟百分位,访问的集群越大,延迟越差。

超大集群下的数据可靠性

Copyset

image.png

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

  • 避免热点

    • 机器热点会叠加长尾问题,少数的不均衡的热点会影响大量的任务。
  • 成本:

    • 数据越均衡,CPU、磁盘、网络的利用率越高,成本更低。
    • 集群需要为数据腾挪预留的空间、带宽更少,降低了成本。
  • 可靠性

    • 全速运行的机器和空置的机器,以及一会全速运行一会空置的机器,可靠性表现都有不同。负载均衡可以降低机器故障的发生。
    • 同一批机器容易一起故障,数据腾挪快,机器下线快,可以提升可靠性。

数据不均衡的原因

  • 接电容量不均匀
  • 数据新旧不均匀
  • 访问类型不均匀

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

image.png

数据迁移工具

  • 目的:将数据从一部分节点搬迁到另一部分节点。

  • 要求:高吞吐、不能影响前台的服务。

带元数据迁移的迁移工具

  • 痛点:涉及到元数据操作,需要停止用户的写入。

  • DistCopy 工具

    • 通过 MapReduce 任务来并行迁移数据,需要拷贝数据和元数据。
    • 网络流量较大,速度较慢。
  • FastCopy 工具

    • 基于 hardlink 和 blockpool 的原理
    • 元数据直接在 NN 集群间拷贝,而数据则在 DN 上的不同 blockpool(对应到 NN 集群)进行 hardlink,不用数据复制。
    • 迁移速度要大大优于 DistCopy。

数据迁移工具

  • Balancer 工具

    • 代替 NN 向 DN 发起副本迁移的命令,批量执行副本迁移。
    • 场景:大规模数据平衡、机器上下线。

总结:

  • 1.学习了HDFS的高可用性,高扩展性
  • 2.高可用性确保业务稳定运行,高扩展性确保了业务的的范围扩展

标题:HDFS高可用与高扩展性机制分析 | 青训营笔记

网址:juejin.cn/