这是我参与「第四届青训营 」笔记创作活动的第10天。
上节课,我们了解了HDFS的架构和读写流程
HDFS通过将文件分块来存储大文件,HDFS的组件有NameNode和DataNode,分别负责提供元数据和数据服务。
在读/写数据时,HDFS需要先从NameNode上获取数据读取/写入的DataNode地址,然后和DataNode交互来完成数据的读/写。
本节课程主要分为四个方面
-
HDFS 元数据服务的高可用
-
HDFS 数据存储高可用
-
HDFS 元数据服务的高扩展性
-
HDFS 数据存储的高扩展性
元数据服务的高可用
1.高可用的需求
2.HDFS主备同步实现
3.HDFS自动主备切换
4.日志系统BookKeeper简介
1.1 服务高可用的需求
故障不可避免,灾难时有发生
为了应对这种问题我们需要实现服务高可用
高可用的衡量:
故障度量的指标
-
MTTR(Mean Time To Repair):平均修复时间,系统能多快恢复。
-
MTTF(Mean Time To Failure):平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制造业)。
-
MTBF(Mean Time Between Failures):平均无故障时间,两次故障间的间隔,一般用于可修复的系统(软件)。
可用性的年化:
高可用的形式:
服务高可用:
- 热备份:主备一个一样的备份,当运行中的出现故障使用这个备份继续执行
- 冷备份:备份一些重要数据,将这些备份放在其他机器上重启
故障恢复操作:
-
人工切换:在故障发生时,运维人员接收报警后,手动执行服务切主操作。一般较慢,难以满足全年不可用时间的目标。
-
自动切换:通过探活组件、分布式共识协议等手段,系统能自动发现主服务的故障,并切换到备份不符。
1.2
1.2.1NameNode高可用架构
理论基础-状态机复制和日志
状态机复制是实现容错的常规方法
组件:
- 状态机和副本:一般状态机指的就是存储在盘上的数据库,多个状态机,部署在不同的节点上提供一个容错方式
- 变更日志:用户操作对状态机的影响,在业务处理时算出来并处理为日志形式
- 共识协议:为了保证所有的状态机都能收到一个相同的顺序一致,内容一致的日志
NameNdode操作日志的生产消费
acitve生成日志,Standby消费日志
日志的内容是目录树和文件下的更新
这样保证Active和Standby的状态保持一致。
NameNdode块状态维护
DateNode心跳机制(Heartbeat)NameNode保持联系,服务高可用中需要将心跳和Active和Standby联系
DataNode的块上报(Block Report)包括在启动时,要求上报时,将自己的DataNode用的块告诉NameNode,服务高可用中需要将块上报给Active和Standby
块上报不会发送到日志中
处理时的区别:
- Active即接受,也发起变更
- Standby只接受,不变更
一致性问题:Active对DataNode要求块删除,Standby是不知道的,切换主备后,有发生一次块删除,那就删除了两个块
于是出现Content state状态
主备切换后,避免Delete Node的不确定状态
自动主备切换要使用到
分布式协调组件 -Zookeeper
一般用于提供选主,协调,元数据存储
ZooKeeper有一个多副本存储数据,自己实现了一套共识协议,可以再多个节点之间同步数据。ZooKeeper给客户端提供了watch功能,让客户端可以在ZooKeeper上监控结点。
自动主备切换流程- Server侧
ZKFC最为外部组件,驱动HDFS NameNode 的主备切换
自动主备切换流程- Client侧
核心机制:SyandbyException
找到真的Active,收到旧Active的信息,发送给新的Active
BookKeeper架构
介绍专门用来存储Acctive和Standby的之间log的组件。
application:可以理解为NameNode
写日志进入 client apis
quorum机制
Quorum机制:多副本一致性读写
读写规则:
sloppy Quorum机制
日志场景:顺序追加,只写
Ensemble 机制
将log信息片段通过Round-robin轮询算法分配到Bookie结点中
数据粗存储高可用
- 单机存储的数据高可用机制
- HDFS的数据高可用机制
- 考虑网络架构的数据高可用
- 案例:字节跳动的HDFS的多级饭容灾方案简介
单机存储-RAID
RAID方案讲解
HDFS多副本
当出现某个节点的块数据出错直接认定这个块是错误的,想NameNode请求一个这个块
多副本成本过高
引用低成本方案
Erasure Coding 原理
这里的可以使比特,字节等,多出来的数据用来校验
有时候我们只要读取一个bloack中1M的数据,但这个bloc损坏了,我们需要想NameNode重新获取一个block的数据量,这样造成大量的数据传输,于是我们可以将block Stripe(条带化)
网络架构
副本放置策略-机架感知
为了解决一个TOR故障导致整个机架不可用和降低跨rack流量
案例
多机房解决的问题
- 容量问题
- 容灾问题
元数据高扩展性
- 1.元数据扩展性挑战
元数据扩展性挑战
HDFS NameNode是个集中式服务,不是在单个机器上,内存和磁盘的容量,cpu的计算能力都不能无线扩展。
扩展性方案
-
scale up:通过单机的 CPU、内存、磁盘、网卡能力的提升来提升系统服务能力,受到机器成本和物理定律的限制。
-
scale out:通过让多台机器组成集群,共同对外提供服务来提升系统服务能力。一般也称为高扩展、水平扩展。
常见的Scale out 方案
三种数据路由方式
- 服务端侧
- 路由层
- 客户端层
partition 方法
- 水平分区和垂直分区:水平分区指按 key 来将数据划分到不同的存储上;垂直分区指将一份数据的不同部分拆开存储,用 key 关联起来。partition 一般都水平分区,又称 shard。
- 常用于 KV 模型,通过 hash 或者分段的手段,将不同类型 key 的访问、存储能力分配到不同的服务器上,实现了 scale out。
- 重点:不同单元之间不能有关联和依赖,不然访问就难以在一个节点内完成。例如 MySQL 的分库分表方案,难以应对复杂跨库 join。
社区解决方案-BlockPool
解决DN同时服务多组NN的问题
将文件服务分层 namespace block storage
用blockpool来区分DH的服务
- 数据块存储
- 心跳和块上报
社区-viewfs
相当于Scale out方案的第三种
Ferderation架构:将多个不用集群组合起来,对外表想一个集群一样
字节跳动的NNproxy
是字节自研的HDFS代理层,提供了路由服务
NNproxy路由规则保存
NNproxy路由转发实现
路径最长匹配规则,可以进一步划分目录树
案例:小文件问题
存储数据高扩展性
- 超大集群的长尾问题
- 超大集群的可靠性问题
- 超大集群中不均匀问题
- 数据迁移工具速览
延迟分布于长尾延迟
长尾
-
二八定律:在任何一组东西中,最重要的只占其中一小部分,约 20%,其余 80% 尽管是多数,却是次要的。
-
长尾:占绝大多数的,重要性低的东西就被称为长尾。
百分位延迟
-
将所有请求的响应速度从快到慢排序,取其中某百分位的请求的延迟时间。
-
例如 pct99 代表排在 99% 的请求的延迟。相对于平均值,能更好的衡量长尾的情况。
尾部延迟放大
-
木桶原理:并行执行的任务的耗时取决于最慢的一个子任务。
-
尾部延迟放大:一个请求或任务需要访问多个数据节点,只要其中有一个慢,则整个请求或任务的响应就会变慢。
-
固定延迟阈值,访问的集群越大, 高于该延迟的请求占比越高。
-
固定延迟百分位,访问的集群越大,延迟越差。
超大集群下的数据可靠性
Copyset
超大集群下的负载均衡和数据迁移
-
避免热点
- 机器热点会叠加长尾问题,少数的不均衡的热点会影响大量的任务。
-
成本:
- 数据越均衡,CPU、磁盘、网络的利用率越高,成本更低。
- 集群需要为数据腾挪预留的空间、带宽更少,降低了成本。
-
可靠性
- 全速运行的机器和空置的机器,以及一会全速运行一会空置的机器,可靠性表现都有不同。负载均衡可以降低机器故障的发生。
- 同一批机器容易一起故障,数据腾挪快,机器下线快,可以提升可靠性。
数据不均衡的原因
- 接电容量不均匀
- 数据新旧不均匀
- 访问类型不均匀
负载均衡和数据迁移的典型场景
数据迁移工具
-
目的:将数据从一部分节点搬迁到另一部分节点。
-
要求:高吞吐、不能影响前台的服务。
带元数据迁移的迁移工具
-
痛点:涉及到元数据操作,需要停止用户的写入。
-
DistCopy 工具
- 通过 MapReduce 任务来并行迁移数据,需要拷贝数据和元数据。
- 网络流量较大,速度较慢。
-
FastCopy 工具
- 基于 hardlink 和 blockpool 的原理
- 元数据直接在 NN 集群间拷贝,而数据则在 DN 上的不同 blockpool(对应到 NN 集群)进行 hardlink,不用数据复制。
- 迁移速度要大大优于 DistCopy。
数据迁移工具
-
Balancer 工具
- 代替 NN 向 DN 发起副本迁移的命令,批量执行副本迁移。
- 场景:大规模数据平衡、机器上下线。
总结:
- 1.学习了HDFS的高可用性,高扩展性
- 2.高可用性确保业务稳定运行,高扩展性确保了业务的的范围扩展
标题:HDFS高可用与高扩展性机制分析 | 青训营笔记
网址:juejin.cn/