这是我参与「第四届青训营 」笔记创作活动的第13天
9.1 元数据高可用
1.高可用的需求
1.1服务高可用的需求
故障类型:硬件故障、软件故障、人为故障
灾难:数据中心级别不可用:机房断电、机房空调停机、机房间网络故障、拥塞
故障不可避免,灾难时有发生。
而如果HDFS系统不可用。
1)无法核算广告账单,直接引发收入损失
2)无法生产数据报表,数据驱动无从谈起
3)无法进行模型训练,用户体验越来越差
业务停止的损失极大,所以HDFS系统的高可用性就至关重要。
1.2 高可用的衡量
服务可用性指标:MTTR\MTTF\MTBF
1.3 可用性的年化
可用性:
全年不可用时间 可用性:99.9%,全年8.76小时不可用
可用性:99.99%,全年52.6分钟不可用
可用性:99.999%,全年5.26分钟不可用
1.4 高可用的形式
➢服务高可用:热备份、冷备份
➢故障恢复操作:人工切换、自动切换
人工的反应、决策时间都更长,高可用需要让系统自动决策。
HDFS的设计中,采用了中心化的元数据管理节点NameNode。
NameNode容易成为故障中的单点(single point of failure)。
2.HDFS主备同步实现
2.1 HDFS NameNode 高可用架构
➢组件介绍:ActiveNamenode:主节点,提供服务,生产日志
StandbyNamenode:备节点,消费日志
ZooKeeper:为自动选主提供统一协调服务
BookKeeper:提供日志存储服务
ZKFC: NameNode探活、触发主备切换
HA Client:提供了自动切换的客户端
edit log:操作的日志
➢围绕三个问题来看高可用:节点状态如何保存、操作日志如何同步、如何做到自动切换
2.2 理论基础-状态机复制和日志
状态机复制是实现容错的常规方法。
组件:状态机以及其副本、变更日志、共识协议
2.3 NameNode 状态持久化
checkpoint机制
FSImage和EditLog
2.4 NameNode 操作日志的生产消费
Active生产,Standby (可能有多个)消费
物理日志与逻辑日志
日志系统:高可用、高扩展性、高性能、强一致(有序)
2.5 NameNode 块状态维护
回顾:DataNode Heartbeat、DataNode Block Report
区别:Active即接收,也发起变更、Standby只接收,不发起变更
Content Stale状态:主备切换后,避免DN的不确定状态
3.HDFS自动主备切换
3.1 分布式协调组件-ZooKeeper
一般用于提供选主、协调、元数据存储
使用它的组件:HDFS、YARN、 HBase、Kafka、ClickHouse等等
HA核心机制: Watch
3.2 自动主备切换流程-Server侧
ZKFailoverController作为外部组件,驱动HDFS NameNode的主备切换
轮询探活
脑裂问题
Fence机制
3.3 自动主备切换流程-Client侧
核心机制:StandbyException
Client自动处理
4.日志系统BookKeeper简介
4.1 BookKeeper架构
BookKeeper存储日志:低延时、持久性、强一致性、读写高可用
对比:日志系统和文件系统的复杂度
4.2 Quorum机制
Quorum机制:多副本一致性读写
场景:多副本对象存储,用版本号标识数据新旧
规则:1)Qr+Qw>Q 2)Qw> Q/2
思考:日志场景比对象保存更简单
4.3 BookKeeper Quorum
Sloppy Quorum机制
日志场景:顺序追加、只写
Write Quorum:写入副本数
Ack Quorum:响应副本数
思考: Client 挂掉导致不确认写入了多少数据,如何恢复?
4.4 BookKeeper Ensemble
Ensemble机制
Round-Robin L oad Balancer 第一轮:1,2,3
第二轮:2,3,4
第三轮:3,4,1
第四轮:4,1,2
优势:数据均衡
9.2 数据存储高可用
1.单机存储的数据高可用机制
1.1 回到单机存储-RAID
Redundant Array of Independent Disks
图:提供RAID功能的NAS设备
特点:廉价、高性能、大容量、高可用
1.2 RAID方案讲解
RAID 0:条带化
RAID 1:冗余
RAID 3:容错校验
其他RAID方案可以课后了解
2.HDFS的数据高可用机制
2.1 HDFS多副本
HDFS版本的RAID 1
图: Hadoop 的多副本放置
优点:读写路径简单、副本修复简单、高可用
2.2 Erasure Coding 原理
HDFS版本的RAID 2/3
业界常用Reed Solomon算法
图: Reed Solomon算法原理
2.3 HDFS Erasure Coding
HDFS版本的RAID 2 图:直接保存的EC和Stripe (条带化)后保存的EC
和多副本比较:读写速度、成本、修复速度、读写路径的实现
3.考虑网络架构的数据高可用
3.1 网络架构
机架(Rack):放服务器的架子。
TOR(Top of Rack):机架顶部的交换机。
数据中心(Data Center): 集中部署服务器的场所
图:机架的样子
图:网络拓扑
3.2 副本放置策略-机架感知
一个TOR故障导致整个机架不可用VS降低跨rack流量
trade-off:一个本地、一个远端
图: HDFS的多机架放置
4.案例:字节跳动的HDFS多机房容灾方案简介
4.1 案例:字节跳动的HDFS多机房实践
字节跳动的HDFS集群,从单机房演进到双机房,再从双机房演进到更多的机房。
多机房解决的问题:容量问题、容灾问题
HDFS双机房放置的设计:
写入时,每个数据块在两个机房至少各有一个副本,数据实时写入到两个机房。
读取时,优先读本地的副本,避免了大量的跨机房读取。
4.2 多机房容灾实践
多机房部署的组件:ZooKeeper、BookKeeper、NameNode、DataNode
容灾期间的策略:容灾期间,限制跨机房写入、容灾期间,限制跨机房副本复制