这是我参与「第四届青训营 」笔记创作活动的的第9天
课堂内容
元数据服务高可用
- 高可用需要处理的场景
- 高可用的年化计算
MTTR:平均恢复时间
MTTF:平均修复时间
MTBF:每次恢复的间隔时间 - 高可用的形式:热备份,冷备份,人工切换,自动切换
- NameNode的高可用架构
-
Active NameNode:提供服务的 NameNode 主节点,生产 editlog。
-
Standby NameNode:不提供服务,起备份作用的 NameNode 备节点,消费 editlog
-
editlog:用户变更操作的记录,具有全局顺序,是 HDFS 的变更日志。
-
ZooKeeper:开源的分布式协调组件,主要功能有节点注册、主节点选举、元数据存储。
-
BookKeeper:开源的日志存储组件,存储 editlog
-
ZKFC:和 ZK、NN 通信,进行 NN 探活和自动主备切换。
-
HA Client:处理 StandbyException,在主备节点间挑选到提供服务的主节点。
-
主要就是zookeeper,bookkeeper,zkfc这几个部分的功能,如选主,日志,探活等等实现高可用。
- 高可用的理论基础:状态机,如下图就是一个备份的东西。
- namenode操作日志的生产消费:通过日志系统,由active生产standby消费,并且通过生成FSimage和EditLog实现持久化。
- namenode的块维护:在高可用的情况下,datanode会向active和standby同时发送信息。但是他们俩的处理有区别,同时还有个content state的状态来处理两者状态的不一致
- 分布式协调组件zookeeper:选主,协调,元数据存储
- 主备切换server恻:就是中间的红框,来监督active和standby,他们中有问题了就会被红框知道并做出主备切换反应。
- 主备切换client侧:
- bookkeeper
- Quorum机制:保证读写一致性
- bookkeeper Quorum:只是写
- bookkeeper Ensemble:保证写入的数据均衡
数据存储高可用
- 单机存储高可用:RAID
- RAID的方案:条带化,冗余,容错校验
- HDFS存储高可用:多副本
- Erasure Coding原理:就是提炼数据,分出特征,再讲这组特征排成一组
- HDFS的EC:就是把block再切分小块,实现更快,成本更低,恢复更快
- 网络架构:TOR是交换机
放置策略是一个Rack上最多两个,三个副本2+1放置
同时呢像字节会运用多机房的咐属来应对容灾。
元数据的高扩展性
- saleup和saleout
- sale out的常见方案:从node,routing tier,client三方面
- 社区解决方案
blockpool:在block上再加一层pool来区分DN和NN的对应关系
viewfs:从client侧的实际应用
NNproxy:从routing tier侧的实际应用,会有更详细的目录树路径
- 小文件问题
-
小文件合并任务:计算框架的数据访问模式确定,可以直接将小文件合并成大文件而任务读取不受影响。通过后台运行任务来合并小文件,可以有效缓解小文件问题。通过 MapReduce/Spark 框架,可以利用起大量的机器来进行小文件合并任务。
-
Shuffle service:shuffle 流程的中间文件数是平方级的,shuffle service 将 shuffle 的中间数据存储在独立的服务上,通过聚合后再写成 HDFS 文件,可以有效地缓解中间数据的小文件问题。
-
数据存储的高扩展性
- 超大集群的长尾问题:所以我们要降低长尾数量,避免高延迟
- 超大集群的数据可靠性:copyset方案(固定他的数据放置组合,降低数据丢失概率)
- 超大集群的数据均衡和迁移:运用迁移工具DistCopy,FastCopy,Balancer