GFS
GFS(Google File System)是一个分布式的文件系统。
主要四个目标:
(1)高可用:容错性能好
(2)高可靠:读取数据准确
(3)高性能:大文件存储,大规模的流式读取
(4)可扩展:能线性的追加机器
GFS架构
(1)客户端(GFS client)
- 提供的就是对外要用的接口(API)
- 与Master结点交互获取元数据信息
- 与Chunkserver交互实现所有有关数据的操作
(2) 主服务器(GFS master)
- 管理文件系统元数据
(元数据:命名空间;文件到chunk的映射关系;每个chunk的位置) - 对chunk的租约管理,无用chunk的回收,以及chunk的迁移
- 周期性与chunkserver发送心跳信息,获取chunk副本的位置信息
(3) 存储服务器(GFS chunk-server)
- 集群,实现对文件的存储
读写操作
(1)读操作
- client读本地缓存,看文件在哪些chunk-server上;
- 如果client本地缓存找不到,询问master文件所在位置,并更新本地缓存;
- 从一个chunk-server里读文件,如果读取到,就返回;
(2)写操作
要备份三份,存在三个chunk-server上
写操作,必须所有chunk写成功,才会返回client写成功
读操作只要一个chunk读取成功,就能返回读成功
GFS特点
GFS的高可用
(1) master高可用:冗余了一台影子master,平时不工作,master挂了工作
(2) chunk-server高可用:本身是集群,冗余服务;
(当有chunk-server挂掉,master能检测到,并且知道哪些文件存储在chunk-server上,就可以启动新的实例,并复制相关文件。)
(3) 文件存储高可用:每一份文件会存三份,冗余文件;
GFS的高性能
多个chunk-server可以通过线性扩展提升处理能力和存储空间,GFS的潜在瓶颈是单点master,所以GFS要想达到超高性能,主要架构优化思路在于,“提升master性能,减少与master交互”。
GFS的可靠性
(1) 元数据的变更,会先写日志,以确保不会丢失;
(2) master会轮询探测chunk-server的存活性,保证有chunk-server失效时,chunk-server的状态是准确的;
(3) 元数据的修改是原子的,由master控制,master必须保证元数据修改的顺序性;
(4) 文件的正确性,通过checksum保证;
(5) 监控,快速发现问题;