这是我参与「第四届青训营 」笔记创作活动的的第9天
1.2.1 HDFS NameNode高可用架构
组件介绍
- ActiveNamenode:主节点,提供服务,生产日志
- StandbyNamenode:备节点,消费日志
- ZooKeeper :为自动选主提供统一协调服务
- BookKeeper:提供日志存储服务
- ZKFC : NameNode探活、触发主备切换
- HA Client:提供了自动切换的客户端
- edit log:操作的日志
围绕三个问题来看高可用
- 节点状态如何更新
- 操作日志如何同步
- 如何做到自动切换
1.2.2理论基础-状态机复制和日志
状态机复制是实现容错的常规方法。 组件
- 状态机以及其副本
状态机的含义:保存机内原本的状态并随着外部世界一些状态机内部的动作、去做数据的变换。 - 变更日志
- 共识协议
共识协议中状态机的基本模型:
NameNode 操作日志的生产消费
目录树和文件信息的更新
Active生产,Standby消费,物理日志、逻辑日志
日志系统:
- 高可用
- 高扩展性
- 高性能
- 强一致(有序)
分布式协调组件-ZooKeeper
使用它的组件:HDFS\YARN\HBase\KAFKA\ClickHouse
HA核心机制:Watch
ZKFC作为外部组件,驱动HDFS NameNode的主备切换
轮询探活 脑裂问题 Fence机制
BookKeeper架构
BookKeeper存储日志
- 低延时
- 持久性
- 强一致性
- 读写高可用
对比:日志系统和文件系统的复杂度
Quorum机制
多副本一致性读写
场景:多副本对象存储,用版本号标识数据新旧\
BookKeeper Quorum
Sloppy Quorum机制 日志场景:顺序追加、只写 Write Quorum :写入副本数 Ack Quorum:响应副本数 思考: Client 挂掉导致不确认写入了多少数据,如何恢复?
BookKeeper Ensemble
Ensemble 机制 Round-Robin Load Balancer
- 第一轮:1,2,3
- 第二轮:2,3,4
- 第三轮:3,4,1
- 第四轮:4,1,2
优势:数据均衡
数据存储高可用
RAID(单机存储)--Redundant Array of Independent Disks 特点:廉价、高性能、大容量、高可用
RAID方案讲解 RAID 0∶条带化(轮流写入) RAID 1:冗余(写入同样的数据) RAID 3:容错校验(把数据按比特位做分割,做额外的冗余,用校验码来检验数据是否正确以及验证缺失的数据是什么)
HDFS多副本
优点:
- 读写路径简单
- 副本修复简单
- 高可用
Erasure Coding原理
HDFS版本的RAID 2/3
业界常用的Reed Solomon算法
图:RS算法原理
HDFS版本的RAID 2
图:直接保存的EC和Stripe(条带化)后保存的EC
和多副本比较
- 读写速度
- 成本
- 修复速度
- 读写路径的实现
初识网络架构
Server : 一台服务器
机架(Rack):放服务器的架子。
TOR(Top of Rack):机架市部的太坎切.296POD(Point of Delivery):数据中心中的一个物理区域数据中心(Data Center):集中部署服务器的场所
机架感知
字节跳动的HDFS多机房实践
字节跳动的HDFS集群,从单机房演进到双机房,再从双机房演进到更多的机房。
多机房解决的问题
- 容量问题
- 容灾问题
HDFS 双机房放置的设计
- 写入时,每个数据块在两个机房至少各有一个副本,数据实时写入到两个机房。
- 读取时优先读本地的副本,避免了大量的跨机房读取
元数据高扩展性
元数据节点扩展性的挑战
HDFS NameNode是个集中式服务,部署在单个机器上,内存和磁盘的容量、CPU的计算力都不能无限扩展。 scale up vs.scale out ·扩容单个服务器的能力 ·部署多个服务器来服务 挑战 ·名字空间分裂 . DataNoden汇报 ·目录树结构本身复杂
常见的Scale Out方案
KV模型的系统可以使用partition
- Redis
- Kafka
- MySQL(分库分表)
三种数据路由方式
- 服务端侧
- 路由层
- 客户端侧
思考:目录树怎么拆分比较合理?(Figuration?/Federation?)
Federation架构:将多个不同集群组合起来,对外表现像一个集群一样。 右图: viewfs通过在client-side的配置,指定不同的目录访问不同的NameNode。
局限性:运维复杂
字节跳动的NNProxy
NNProxy是ByteDance自研的HDFS代理层,提供了路由服务。 于2016年开源,项目地址:github.com/bytedance/n… ·开源社区的Router Based Federation在2017年上线。 NNProxy主要实现了路由管理和RPC转发·以及鉴权、限流、查询缓存等额外能力
图:NNProxy所在系统上下游
3.3.2 NNProxy路由规则保存 回顾:三种数据路由方式 ·服务端侧·路由层,客户端侧 考虑点:扩展性、运维性
图:路由规则的保存
NNProxy路由转发实现 路径最长匹配规则,可以进一步划分目录树
小文件问题
存储数据高扩展性
延迟的分布和长尾延迟
尾部延迟放大
木桶原理: 尾部延迟放大:访问请求越多,尾部的请求发送越慢 如何变慢?(控制变量法)
- 固定延迟阈值
- 固定延迟百分位
长尾问题表现--慢节点
超大集群的负载均衡和数据迁移 优点: 1.避免热点 2.可靠性 3.降低成本 数据写入不均匀(节点容量、数据新旧、访问类型) 数据读取不均匀(节点容量、数据新旧、访问类型)
负载均衡和数据迁移的典型场景
数据迁移工具--Balancer
工具向DataNode发起迁移命令平衡各个DataNode 的容量。
场景
- 单机房使用、多机房使用
- 限流措施
评价标准
- 稳定性成本
- 可运维性
- 执行效率
小结