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