这是我参与「第四届青训营 」笔记创作活动的第9天
元数据服务高可用
提供服务的过程中,故障和灾难不可避免,如果HDFS系统不可用,业务停止的损失极大,所以HDFS系统的高可用性至关重要。
高可用的衡量指标
服务可用性指标:
- MTTR恢复时长:故障发生到恢复正常的时间
- MTTF修复前平均时间:预计的可运作平均时间
- MTBF平均无故障工作时间:两次故障直接的时间
高可用的形式
服务高可用:
- 热备份
- 冷备份
故障恢复操作:
- 人工切换
- 自动切换
高可用需要让系统自动决策,HDFS的设计采用了中心化的元数据管理节点NameNode,NameNode容易成为故障中的单点。
NameNode高可用架构
组件介绍:
- ActiveNamenode:主节点,提供服务,生产日志
- StandbyNamenode:备节点,消费日志
- ZooKeeper:为自动选主提供统一协调服务
- Bookkeeper:提供日志存储服务
- ZKFC:NameNode探活、触发主备切换
- HA Client:提供了自动切换的客户端
- edit log:操作的日志
NameNode操作日志的生产消费
状态机复制是实现容错的常规方法。
Active生产,Standby消费。
日志系统:高可用,高扩展性,高性能,强一致。
NameNode块状态维护
Active既接收,也发起变更,Standby只接收,不发起变更。
数据存储高可用
HDFS多副本:类似单机存储RAID1,具备读写路径简单,副本修复简单,高可用的优点。
Erasure Coding:类似RAID2/3,业界常用Reed Solomon算法。
元数据高扩展性
BlockPool
解决DN同时服务多组NN的问题
文件服务分层:
- Namespace
- Block Storage
用blockpool来区分DN的服务
- 数据块存储
- 心跳和块上报
viewfs
Federation架构:将多个不同集群组合起来,对外表现为一个集群,通过在client-side的配置,指定不同的目录访问不同的NameNode,局限性是运维复杂。
NNProxy
字节自研HDFS代理层,提供了路由服务,主要实现了路由管理和RPC转发,以及鉴权、限流、查询缓存等额外能力。