这是我参与「第四届青训营 」笔记创作活动的第7天
元数据高可用
服务可用性的指标
- MTTR(Mean Time To Repair):平均修复时间,系统能多快恢复
- MTTF(Mean Time To Failure):平均失效时间,运行到故障间的时间,一般用于不可修复的系统(制造业)
- MTBF(Mean Time Between Failures):平均无故障时间,两次故障间的间隔,一般用于可修复的系统(软件)
可用性的年化:A = MTBF / (MTBF + MTTR)
备份方式
- 冷备份:备份服务的数据,可以和数据归档相结合。在主服务故障时,利用备份的数据重启
- 热备份:主服务和备服务同时运行,在主服务故障时,随时可以切换到备服务
故障恢复操作
- 人工切换:在故障发生时,运维人员接收报警后,手动执行服务切主操作。一般较慢,难以满足全年不可用时间的目标
- 自动切换:通过探活组件、分布式共识协议等手段,系统能自动发现主服务的故障,并切换到备份不符
HDFS NameNode 高可用架构
- Active NameNode:主节点,提供服务,生产日志editlog。
- Standby NameNode:备节点,消费 editlog
- editlog:用户变更操作的记录,具有全局顺序,是 HDFS 的变更日志
- ZooKeeper:为自动选主提供统一协调服务、元数据存储
- BookKeeper:提供日志存储服务
- ZKFC (ZooKeeper Failover Controller):NameNode探活、触发主备切换
- HA Client:提供了自动切换的客户端
数据存储高可用
单机存储的数据高可用
RAID (Redundant Array of Independent Disks) 将多个廉价、不可靠、低性能、容量小的磁盘组装在一起,提供高可靠、高性能、大容量逻辑磁盘服务的一组磁盘列阵方案
- RAID 0: 条带化。将数据分块后按条带化的形式分别存储在多个磁盘上,提供大容量、高性能
- RAID 1: 冗余。将数据副本存储在多个磁盘上,提供高可靠
- RAID 3: 容错校验。在数据分块存储的基础上,将数据的校验码存储在独立的磁盘上,提供高可靠、高性能
HDFS 多副本
HDFS版本的RAID 1:读写路径简单,副本修复简单,高可用
Erasure Coding:HDFS版本的RAID 2/3,业界常用Reed Solomon算法。成本比多副本更优,读写路径实现更加复杂
元数据高扩展性
元数据节点扩展性的挑战
HDFS NameNode 是一个集中式的服务,部署在单个机器上,本身不是分布式的,内存和磁盘容量、cpu的计算能力都不能无限扩展
scale up v.s. scale out
- scale up: 扩容单个服务器的能力
- scale out: 部署多个服务器来服务
挑战:
- 名字空间分裂
- DataNode 汇报
- 目录树结构本身复杂
常见的scale-out方案:KV模型的系统可用使用partition(redis, Kafka, MySQL分库分表)