rainyzz's blog

GFS学习

系统组成

  • GFS Master
    维护了系统中的元数据,chunk namespace,文件和chunk之间的映射,chunk对应的ChunkServer
    chunkServer lease管理,垃圾回收,chunk复制等
    Master会定期通过心跳交换信息
  • GFS ChunkServer
    Master通过lease将写chunk的权力交给ChunkServer,减轻Master的压力
    每个chunk有3个副本
    GFS对每个chunk维护了一个版本号,当租约更新时版本号会更新
  • GFS Client

系统特点

  • 为Append而设计
  • 副本间流水线转发
  • 数据流和控制流分离,先发送数据再发送写入操作
  • 所有副本写成功后返回成功

追加流程

  1. Client向Master请求chunk每个副本所在的ChunkServer
  2. Master返回chunk的主副本和备副本所在的位置信息,Client做缓存,如果不出现故障,该Client读写该chunk都不需要咨询Master
  3. Client向每一个副本发送记录,各个副本收到数据后先放置在缓存中
  4. 各副本都确认收到数据后,Client发写请求给主副本,主副本将数据写入本地
  5. 主副本通知其他副本写入
  6. 其他副本写入成功后答复主副本
  7. 当有副本写入不成功时主副本重试

容错机制

Master

Shadow Master,实时热备
Master需要持久化的数据包括(1)namespace(2)文件到chunk的映射
chunk副本信息可以不持久化,在恢复后通过ChunkServer获取这些信息

ChunkServer

同一个chunk存储在多个ChunkServer,副本丢失时自动复制到其他的ChunkServer

Master设计

  • 内存占用
    chunk的元数据包括:全局唯一id、版本号、每个chunk的ChunkServer编号,引用计数等,所有原信息不超过64字节
    Master对命名空间也进行了压缩,文件命名空间占用内存也不多
  • 负载均衡
    chunk副本选择条件包括:(1)磁盘利用率(2)最近新建chunk的请求数(3)每个chunk的所有副本不能在同一个机架
  • 垃圾回收
    延迟删除,定时回收