Google File System

2021-03-14  本文已影响0人  谭英智

实现了1k多台的机器提供数百TB的存储文件服务器

设计原则

API

架构

gfs-ar

GFS集群由一个master和多个chunkserver组成

每个文件分成固定大小的chunk块,每个快由一个全局唯一的64bit的句柄(由master在块创建的时候赋予),每个块会有若干个副本。

maste(single master)r维护文件系统的元数据。包括命名空间、访问控制信息、文件到块的映射、块的当前位置。它还控制系统的活动,例如块租约管理(块master)、垃圾回收、块迁移、心跳检测

客户端只询问master文件的信息,后续的所有操作都只跟chunckserver有关

块的信息不会在chunkserver缓存,因为文件太大,无法缓存。

块大小

为64M。

块热点

通过增加块副本来解决

元数据

所有关于元数据的操作,都会记录在日志里面,日志通过复制到远端的机器,以便master崩溃后,不会出现不一致的风险。块位置的信息不会保存持久化,而会通过由chunkserver来上传这些信息到master

一致性

客户端的每个写操作,都必须等所有副本都写成功后,才会正确返回;如果都正确写入,那么数据是一致的。

如果副本写入失败,那么块master和部分副本写入成功,这时客户端会收到写入失败。此时客户端会重新发起写入请求。由于数据不回滚,这就导致了master块和部分副本存在重复数据,而失败的副本在写入成功后,数据会跟其他块不一致。

因此数据保证了至少写入成功一次。

客户端需要进行排重处理。

gfs-write

数据流写入

相对于上面的写入,例如有S1,S2,S3三个server。

可以通过S1->S2->S3这样的数据流传递写数据

Master操作

容错

上一篇 下一篇

猜你喜欢

热点阅读