这是我参与「第四届青训营 」笔记创作活动的第3天
高可用的需求
服务高可用的需求
故障类型:
- 软件故障
- 硬件故障
- 人为故障
灾难:数据中心级别不可用
- 机房断电
- 空调机房停机
- 机房间网络故障、拥塞
故障不可避免,灾难时有发生
而如果HDFS系统不可用:
- 无法核算广告账单,直接引发收入损失
- 无法生产数据报表,数据驱动无从谈起
- 无法进行模型训练,引起用户体验下滑
业务停止的损失极大,所以HDFS系统的高可用性就至关重要
高可用的衡量
故障度量的指标
- MTTR(Mean Time To Repair):平均修复时间,系统能多快恢复。
- MTTF(Mean Time To Failure):平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制造业)
- MTBF(Mean Time Between Failures):平均无故障时间,两次故障间的间隔,一般用于可修复的系统(软件)
可用性的年化
高可用的形式
➢服务高可用
- 热备份
- 冷备份
➢故障恢复操作
- 人工切换
- 自动切换
人工的反应、决策时间都更长,高可用需要让系统自动决策。 HDFS的设计中,采用了中心化的元数据管理节点NameNode. NameNode容易成为故障中的单点( single point of failure )
HDFS 主备同步实现
HDFS NameNode 高可用架构
- Active NameNode:提供服务的 NameNode 主节点,生产 editlog。
- Standby NameNode:不提供服务,起备份作用的 NameNode 备节点,消费 editlog
- editlog:用户变更操作的记录,具有全局顺序,是 HDFS 的变更日志。
- ZooKeeper:开源的分布式协调组件,主要功能有节点注册、主节点选举、元数据存储。
- BookKeeper:开源的日志存储组件,存储 editlog
- ZKFC:和 ZK、NN 通信,进行 NN 探活和自动主备切换。
- HA Client:处理 StandbyException,在主备节点间挑选到提供服务的主节点。
HDFS 自动主备切换
自动主备切换流程 - Server 侧
ZKFailoverController 作为外部组件,驱动HDFS NameNode的主备切换
脑裂问题:多个节点都认为自己是 active,都会去写日志
Fence 机制:会阻止多个节点同时写日志
自动主备切换流程 - Client 侧
过去,只存一个 ND 的地址,但现在会存一组,然后依次轮询,如果是 Standby 就一直往后找,直到找到一个 active