HDFS 高可用机制分析 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第11天
HBase 核心数据模型
- HBase 是存储计算分离架构,以 HDFS 作为分布式存储底座。数据实际存储在 HDFS。
- HBase 依赖 Zookeeper 实现元数据管理和服务发现。Client 通过 Zookeeper 配置连接到 HBase集群
- Log-Structured Merge Tree 了解 LSM tree 的基本结构和特性。
-
HBase 写流程:
- 数据先写入 WAL 持久化,用于宕机时恢复内存里丢失的数据;
- 再写入内存态 MemStore,以一种跳表(SkipList)数据结构提供有序的数据和高效的随机读写;
- 当满足特定条件时(比如内存中数据过多,或间隔时间过长),MemStore 数据以 HFile 格式写入 HDFS
-
HBase 读流程
- 首次读某个 rowkey 时,client 需要从 Zookeeper 获取 hbase:meta 表位于哪个 RegionServer上;
- 然后访问该 RegionServer 查询 hbase:meta 表该 rowkey 对应 region 所在的 RegionServer B;
- Client 缓存该位置信息,去 RegionServer B 读取 rowkey;
- 基于该region内可能存在该 rowkey 的 HFile 和 MemStore 构建一个最小堆,用以全局有序地 scan 数据(具体实现可搜索参考 LSM tree 设计原理)
-
Compaction
-
HBase 基于策略和定期整理 HFile 文件集合,将多个有序小文件合并成若干个有序的大文件。
-
HBase 提供两种 compaction 类型:
- Minor compaction
- Major compaction
-
Compaction 触发条件:
- memstore flush
- 后台线程周期性检查
- 手动触发
-
元数据服务高可用
1.1.1 服务高可用的需求
故障:
- 硬件故障
- 软件故障
- 人为故障
灾难:
- 机房断电
- 机房空调停机
- 机房内网络故障、拥塞 如果HDFS系统不可用:
- 无法核算广告账单,直接引发收入损失
- 无法生产数据报表,数据驱动无从谈起
- 无法进行模型训练,引起用户体验下滑
1.1.2 高可用的衡量
1.1.3 可用性的年化
1.1.4 高可用的形式
- 服务高可用
- 热备份
- 冷备份
- 故障恢复操作
- 人工切换
- 自动切换
1.2.1 HDFS NameNode 高可用架构
组件介绍
- ActiveNamenode:主节点,提供服务,生产日志
- StandbyNamenode:备节点,消费日志
- Zookeeper:为自动选主提供统一协调服务
- BookKeeper:提供日志存储服务
- ZKFC:NameNode 探活、触发主备切换
- HA Client:提供了自动切换的客户端
- edit log:操作的日志
1.2.2 NameNode 块状态维护
区别:
- Active 即接收,也发起变更
- Standby 只接收,不发起变更 Content Stale 状态
- 主备切换后,避免DN的不确定状态