这是我参与「第四届青训营」笔记创作活动的第10天。
知识点小记
高可用的形式
- 热备份:有两个个相同的服务进程在跑着,如果一个服务出现了故障,可以立即切换到另一个服务上面。
- 冷备份:将服务中关键的数据做一个备份,服务出现故障时,将备份的数据拿到其他的服务山进行重启。
高可用框架
- 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
- 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。下图展现了三种数据路由方式:
- 数据的路由由服务端的node来完成。
- 数据的路由由一个专门的路由层,根据要访问的K在哪个节点上就转发给哪个节点。
- 将信息保存在客户端的配置里面。