这是我参与「第四届青训营 」笔记创作活动的第 11 天!
元数据高可用
(1)高可用的需求
1.服务高可用的需求
- 故障类型
- 硬件故障
- 软件故障
- 人为故障
- 灾难:数据中心级别不可用
- 机房断电
- 机房空调停机
- 机房间网络故障、拥塞
2.高可用的衡量
- 服务可用性指标
- MTTR(Mean time to repair)即平均修复时间
- MTTF(Mean Time To Failure)即修复前平均时间
- MTBF(Mean Time Between Failure)即平均无故障工作时间
3.高可用的形式
工人的反应、决策时间都更长,高可用需要让系统自动决策。 HDFS 的设计中,采用了中心化的元数据管理节点 NameNode。 NameNode 容易成为故障中的单点(single point of failure)。
- 服务员可用
- 热备份
- 冷备份
- 故障恢复操作
- 人工切换
- 自动切换
(2)HDFS 主备同步实现
1.HDFS NmaeNode 高可用架构
- 组件介绍
- ActiveNamenode:主节点、提供服务、生产日志
- StandbyNamenode:备节点、消费日志
- ZooKeeper:为自动选主提供统一协调服务
- BookKeeper:提供日志存储服务
- ZKFC:NameNode 探活、触发主备切换
- HA Client:提供了自动切换的客户端
- edit log:操作的日志
- 高可用三个问题
- 节点状态如何保存
- 操作日志如何同步
- 如何做到自动切换
2.基础理论-状态机复制和日志
- 状态机复制是实现容错的常规方法
- 组件
- 状态机及其副本
- 变更日志
- 共识协议
3.NameNode 状态持久化
- Checkpoint 机制
- FSImage 和 EditLog
4.NameNode 操作日志的生产消费
- Active 生产、Standby(或者多个)消费
- 物理日志与逻辑日志
- 日志系统
- 高可用
- 高拓展性
- 高性能
- 强一致(有序)
5.NameNode 块状态维护
- 回顾
- DataNode Heartbeat
- DataNode Block Report
- 区别
- Active 即接收,也发起变更
- Standby 只接收,不发起变更
- Content Stale 状态
- 主备切换后,避免 DN 的不确定性
(3)HDFS 自动主备切换
1.分布式协调组件- ZooKeeper
- 一般用于提供选主、协调和元数据存储
- 使用它的组件
- HDFS、YARN、HBase
- Kafka、ClickHouse...
- HA 核心机制
- Watch
2.自动主备切换流程- Server 侧
- ZKFailureController
- 作为外部组件,驱动 HDFS NameNode 的主备切换
- 轮询探活
- 脑裂问题
- Fence 机制
3.自动主备切换流程- Client 侧
- 核心机制:StandbyException
- Client 自动处理
(4)HDFS 日志系统 BookKeeper 简介
1.BookKeeper 架构
- BookKeeper 存储日志
- 低延时
- 持久性
- 强一致性
- 读写高可用
2.Quorum 机制
- Quorum 机制:多副本一致性读写
- 场景:多副本对象存储,用版本号标识数据新旧
- 规则
3.BookKeeper Quorum
- Sloppy Quorum 机制
- 日志场景:顺序追加、只写
- Write Quorum:写入副本数
- ACK Quorum:相应副本数
4.BookKeeper Enseble
- Ensemble 机制
- Round-Robin Load Balancer
- 第一轮:1,2,3
- 第二轮:2,3,4
- 第三轮:3,4,1
- 第四轮:4,1,2
- 优势:数据均衡