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

197 阅读4分钟

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

先来说说什么是高可用:即在遭遇故障时当前组件或机制依旧能够正常运行,保证系统的健壮性和自动修复能力。

故障类型可分为:硬件故障,软件故障以及人为故障

元数据高可用

而如果HDFS系统不可用。

  • 无法核算广告账单,直接引发收入损失
  • 无法生产数据报表,数据驱动无从谈起
  • 无法进行模型训练,用户体验越来越差

业务停止的损失极大,所以HDFS 系统的高可用性就至关重要。

服务可用性指标:

  • MTTR:Mean Time To Restoration

    平均失效前时间,就是从出现故障到修复中间的这段时间,它包括确认失效发生所必需的时间,记录所有任务的时间,还有将设备重新投入使用的时间。

  • MTTF:Mean Time To Failure

    平均恢复前时间,指某个元件预计可运作的平均时间

  • MTBF:Mean Time Between Failures

    平均故障间隔时间

高可用架构的服务体系:

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

高可用的思考方向

下面的思考方向只能说囫囵吞枣了解大概,想要看懂还得多看几次视频,多查资料

  • 状态机复制和日志
  • nameNode状态持久化
  • nameNode操作日志的生产与消费
  • nameNode块状态维护
  • zookeeper提供选主,协调以及元数据储存
  • bookkeeper储存日志
  • Quorum机制等

数据储存高可用

数据储存的高可用需要回到单机开始讲起

RAID

Redundant Arrays of Independent Disks, 磁盘阵列,有"数块独立磁盘构成具有冗余能力的阵列”之意。RAID在课程中提到分别是:

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

网络架构

网络架构中,组件由小到大,依次大体可以分为:服务器server -> 机架Rack -> 交换机TOR -> 数据中心 -> 多机房

当我们使用网络架构时,需要考虑网络传输的可靠性,同一交换机内能解决的事,就不外放;同一局域网能解决的事情,就不使用公网;减少因为网络造成的不可靠性,同时注意 物理防灾

元数据高扩展

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

scale up指的是强化单体机器的能力,scale out指的是用多台廉价机器去完成昂贵单体机器所完成的业务

scale up vs.scale out:

  • 扩容单个服务器的能力
  • 部署多个服务器来服务

挑战:

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

数据储存高扩展

长尾问题

延迟的分布:

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

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

长尾问题主要来源于系统的慢节点,然而慢节点是难以避免和预测的。如共享资源的锁,后台的维护,请求的队列,以及机器的损耗等等,甚至在数学上早已明确了混沌现象的不可控性,因此我们可以降低长尾问题的影响,但是无法完美的规避这个问题

可靠性问题

对于现实生活中的超大集群而言:

  • 条件一:超大集群下,有一部分机器是损坏来不及修理的
  • 条件二:副本放置策略完全随机
  • 条件三:DN的容量足够大
  • 推论:必然有部分数据全部副本在损坏的机器上,发生数据丢失。

CopySet方案能够解决以上部分问题,但是有所缺陷

不均匀问题

负载均衡:平衡以下三点-降低成本-可靠性-避免热点

同样的,在现实生活中,数据的写入也难以做到均匀:

  • 节点容量不均匀
  • 数据新旧不均匀
  • 访问类型不均匀

这三点不均匀最终导致了资源负载的不均匀