HDFS高可用--元数据高可用|青训营笔记

96 阅读4分钟

这是我参与【第四届青训营】笔记创作活动的第三天。

回顾:

在前面几章学习中,了解了HDFS的架构和读写流程。

HDFS通过将文件分块来存储大文件,HDFS的组件有NameNode和DataNode,分别负责提供元数据和数据服务。

在读/写数据时,HDFS客户端需要先从NameNode上获取数据读取/写入的DataNode地址,然后和DataNode交互来完成数据读/写。

一个“可以用”的系统和“好用”的系统,差距就是“高可用”和“高扩展性”

课程目录

1.元数据高可用

——主备系统:基于日志、自动切换、实时热备

1.1高可用的需求

1.1.1 服务高可用的需求

故障类型:

1)硬件故障

2)软件故障

3)人为故障

灾难:数据中心级别不可用

1)机房断电

2)机房空调停机

3)机房间网络故障、拥塞

故障不可避免,灾难是有发生

而如果HDFS 系统不可用。

1)无法核算广告账单,直接引发收入损失

2)无法生产数据报表,数据驱动无从谈起

3)无法进行模型训练,用户体验越来越差

业务停止的损失极大,所以HDFS系统的高可用性就至关重要。

1.1.2 高可用的衡量

服务可用性指标

1)MTTR

2)MTTF

3)MTBF

1.1.3 可用性的年化

可用性:

全年不可用时间

1)可用性 99.9%,全年8.76小时不可用

2)可用性 99.99%,全年52.6分钟不可用

3)可用性 99.999%,全年5.26分钟不可用

1.1.4 高可用的形式

服务高可用

1)热备份

2)冷备份

故障恢复操作

1)人工切换

2)自动切换

人工的反应、决策时间都更长,高可用需要让系统自动决策。

HDFS 的设计中,采用了中心化的元数据管理节点NameNode。

NameNode容易成为故障中的单点。

1.2 HDFS 主备同步实现

1.2.1 HDFS NameNode 高可用架构

组件介绍

1)ActiveNamenode: 主节点,提供服务,生产日志

2)StandbyNamenode:备节点,消费日志

3)ZooKeeper:为自动选主提供统一协调服务

4)BookKeeper:提供日志存储服务

5)ZKFC:NameNode 探活、触发主备切换

6)HA Client: 提供了自动切换的客户端

7)edit log:操作的日志

围绕三个问题来看高可用

1)节点状态如何保存

2)操作日志如何同步

3)如何做到自动切换

1.2.2 理论基础-状态复制和日志

状态机复制是实现容错的常规方法

组件

1)状态机以及其副本

2)变更日志

3)共识协议

1.2.3 NameNode 状态持久化

FSImage 和Editlog

Checkpoint 机制

1.2.4 NameNode 操作日志的生产消费

Active生产,Standby(可能有多个)消费

物理日志与逻辑日志

日志系统

1)高可用‘

2)高扩展性

3)高性能

4)强一致(有序)

1.2.5 NameNode 块状态维护

回顾:

1)DataNode Heartbeat

  1. DataNode Block Report

区别:

1) Active 即接受,也发起变更

2) Standby 只接收,不发起变更

Content Stale状态

1)主备切换后,避免DN的不确定状态

1.3 HDFS自动主备切换

1.3.1 分布式协调组件-ZooKeeper

一般用于提供选主、协调、元数据存储

使用它的组件:

1)HDFS、YARN、HBase

2)Kafka、ClickHouse

3)等等

HA 核心机制:Watch

1.3.2 自动主备切换流程-Server 侧

ZKFailoverController

作为外部组件,驱动HDFS NameNode的主备切换

轮询探活

脑裂问题

Fence机制

1.3.3 自动主备切换流程-Client侧

核心机制:StandbyException

Client 自动处理

1.4 日志系统BookKeeper 简介

1.4.1BookKeeper 架构

BookKeeper 存储日志

1)低延时

2)持久性

3)强一致性

4)读写高可用性

对比:日志系统和文件系统的复杂度

1.4.2 Quorum 机制

Quorum 机制:多副本一致性读写

场景:

多副本对象存储,用版本号标识数据新旧

规则

思考:日志场景比对象保存更简单

1.4.3 BookKeeper Quorum

Sloppy Quorum 机制

日志场景:顺序追加、只写

Write Quorum:写入副本数

Ack Quorum:响应副本数

思考:Client挂掉导致不确认写入了多少数据,如何恢复?

1.4.4 BookKeeper Ensemble

Ensemble 机制

Round-Robin Load Balancer

1)第一轮:1,2,3

2)第二轮:2,3,4

3)第三轮:3,4,1

4)第四轮:4,1,2

优势:数据均衡