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

160 阅读4分钟

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

知识点小记

高可用的形式

  • 热备份:有两个个相同的服务进程在跑着,如果一个服务出现了故障,可以立即切换到另一个服务上面。
  • 冷备份:将服务中关键的数据做一个备份,服务出现故障时,将备份的数据拿到其他的服务山进行重启。

高可用框架

1.png

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

分布式协调组件 —— ZooKeeper

       该组价一般用于提供选主、协调、元数据存储等,使用它的组件有:HDFS、YARN、HBase、Kafka、ClickHouse等。该组件是以多副本来存储数据的,可以自己实现一套协议在多个ZooKeeper节点之间同步信息。该组件给客户端提供了一个特别的功能 —— Watch,该功能可以让客户端监控到ZooKeeper上存储的节点,当节点的状态发生变化的时候,客户端会得到ZooKeeper的通知。

自动主备切换流程

       ZKFailoveController(ZKFC)是专门负责驱动HDFS NameNode的主备切换。该组件主要做两件事,一个是负责在ZooKeeper上注册节点监控节点的状态,二是负责监控跟ZooKeeper部署在一起的NameNode的状态。

切换流程:

       Standby的ZKFC会监控Standby的状态,同样Active的ZKFC也会监控Active的状态。若出现了问题——Active的进程挂掉了,Active服务不能正常的提供了,Active的ZKFC会发现进程连不上一段时间后会主动的发起主备切换。

单机存储RAID

2.png

  • RAID 0:条带化,会将实际的数据分割成一个一个的条带,条带的大小是固定的,按照条带依次写到不同的盘上。
  • RAID 1:提供了冗余的机制,同样的数据写到两块不同的盘上,当一个盘损坏后,另个盘可做备份使用。
  • RAID 3:会有容错校验机制,会将数据按比特位做分割,会根据数据的比特位生成一个校验码,在读取数据的时候会将数据与校验码同时读,然后用校验码核验是否为正确的。

HDFS的数据高可用机制

HDFS多副本

HDFS多副本为HDFS版的RAID 1,会将同一个块的数据存放到多个DataNode节点上,如果有一个或多个DataNode故障,可以从其他的DataNode上找到数据。该方案读写路径简单,副本修复简单,问题是所要付出的成本较大。

HDFS Erasure Coding

Erasure Coding使用某种纠错算法,业界常用Read Solomon算法,由原始数据生成一定数目的纠删码,当某些数据丢失时,可通过纠删码来进行还原。

该方法和上面的多副本对比,成本低,修复速度比多副本低,实现路径也更加复杂。

元数据扩展性

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

数据的扩展一般有两种方式:scale up 、 scale out,第一种是单台服务器,该服务器的能力越来越强,第二种通过一些方案将多个服务器组织起来共同提供服务。一般的扩展都会采取第二种方案。

常见的scale out方案: KV模型的系统可以使用partition,例如:Redis、Kafka、MySQL。下图展现了三种数据路由方式: 3.png

  1. 数据的路由由服务端的node来完成。
  2. 数据的路由由一个专门的路由层,根据要访问的K在哪个节点上就转发给哪个节点。
  3. 将信息保存在客户端的配置里面。