GFS

Goog File System

GFS简介

Google file system 可以简写为GFS,该系统是google 开发的一个分布式文件存储系统

GFS整体架构

GFS存在三个节点分别是client,master,chunkserver,负责功能如下:

  • client: 负责和应用程序的交互,提供接口

  • master:管理元数据(文件和chunk的namespace,文件到chunk的映射,chunk的位置等)

  • chunkserver:存储chunk数据

GFS存储设计

文件切分为多个chunk存储在chunkserver中

chunk分为一个primary chunk和两个second chunk为备份文件

chunk的大小设计为64mb,有以下优点

  • 减少系统的寻址和交互次数
  • 可能会在一个chunk中进行多次操作,可以复用tcp连接
  • 节省元数据的存储开销,减轻master内存压力

GFS高可用设计

GFS Master高可用设计

GFS Master持续化存储元数据namespace,文件到chunk的映射

维持一个shadow Master作为备份,当primary Master宕机时通过Chubby自动切换

primary Master和primary Master通过同步日志(wal)进行同步数据

chunk高可用设计

每个chunk都有三个副本,每个副本数据完整,只有三个副本均写入完成时才算写入成功,且相同的副本不会放入同一个chunkserver中

如果一个chunk宕机了一段时间,master就会在另外一个chunkserver中重建副本

GFS维持chunk的校验和,如果校验和不匹配则master会重建chunk副本

为了减轻Master压力,GFS使用租约指定chunk副本(primary chunk)进行写操作的控制

GFS读文件

client首先查看自身缓存是否有对应的元数据,若没有向Master查询

计算偏移对应的chunk

向距离最近的chunkserver发出读请求

对比校验和,若校验和不正确则切换chunkserver

GFS写文件

client向master 查询primary chunk和second chunk位置

使用流水线技术将数据推送到所有副本chunk上

primary chunk 进行数据操作排序并写入

primary chunk 将顺序同步到 所有的second chunk中

second chunk 写入完成将结果返回 primary chunk

primary chunk 将结果返回client