这是我参与「第四届青训营 」笔记创作活动的第9天
一个“可以用”的系统和“好用”的系统,差距就是“高可用”和“高可扩展性”
1.元数据高可用
主备系统:基于日志、自动切换、实时热备
①高可用的需求
服务高可用的需求
-
故障类型
- 硬件故障
- 软件故障
- 人为故障
-
灾难:数据中心级别不可用
- 机房断电
- 机房空调停机
- 机房间网络故障、拥塞
-
故障不可避免,灾难时有发生
-
如果HDFS不可用
- 无法核算广告账单,直接引发收入损失
- 无法生产数据报表,数据驱动无从谈起
- 无法进行模型训练,引起用户体验下降
-
业务停止的损失极大,所以HDFS系统的高可用性至关重要
高可用的衡量
-
服务可用性指标
- MTTR(mean time to recover):发现一次故障,需要多久去恢复
- MTTF(mean time to failure):平均一次故障要花费多久的时间
- MTBF(mean time between failure):两次故障的时间,过短说明系统不够稳定
可用性的年化
- 可用性:
高可用的形式
-
服务高可用
- 热备份:有一个相同的服务在跑着,如果旧的服务出现故障,可以立刻切到新的服务上,立马接管
- 冷备份:将服务中的关键数据(如:HDFS的整个部署)的备份在其他设备上进行重启,不如热备份:需要一个重启的时间
-
故障恢复操作
- 人工切换
- 自动切换
-
人工的反应、决策时间都更长,高可用需要让系统自动决策
-
HDFS的设计中,采用了中心化的元数据管理节点NameNode
-
NameNode容易成为故障中的单点(single point of failure)
②HDFS主备同步实现
HDFS NameNode高可用架构
-
组件介绍
- ActiveNameNode:主节点,提供服务,生产日志
- StandbyNameNode:备节点,消费日志
- ZooKeeper:为自动选主提供统一协调服务
- BookKeeper:提供日志存储服务
- ZKFC:NameNode探活、触发主备切换
- HA Client:提供了自动切换的客户端
- edit log:操作的日志
-
围绕三个问题来看高可用
- 节点状态如何更新
- 操作日志如何同步
- 如何做到自动切换
理论基础-状态机复制和日志
-
状态机复制是实现容错的常规方法
-
组件
- 状态机及其副本
- 变更日志
- 共识协议
NameNode操作日志的生产消费
-
目录树和文件信息的更新
-
Active生产,Standby消费
-
物理日志与逻辑日志
-
日志系统
- 高可用
- 高扩展性
- 高性能
- 强一致(有序)
NameNode块状态维护
-
回顾
- DataNode Heartbeat
- DateNode Block Report
-
区别
- Active既接收,也发起变更
- Standby只接收,不发起变更
-
Content Stale状态
- 主备切换后,避免DN的不确定状态
③HDFS自动主备切换
分布式协调组件-ZooKeeper
- 一般用于提供选主、协调、元数据存储
- 使用它的组件:HDFS、YARN、HBase、Kafka、ClickHouse
- HA核心机制:Watch