导读谷歌三大核心技术之一 GoogleFileSystem(一)

GoogleFileSystem设计构想

为满足Google数据处理的需求,Google工程师设计并实现了GoogleFileSystem(GFS)。GFS与传统分布式文件系统类似,也需要满足高性能、可伸缩性、可靠性以及可用性。与传统分布式文件系统思路不不同的是:

  1. GFS认为组件失效是常态而非意外,GFS由大量廉价设备组成
  2. 文件数量异常巨大
  3. 绝大部分文件修改采用文件尾部追加数据而非覆盖原有数据
  4. 应用和文件系统协同设计

GFS架构设计

一个GFS包含一个单独的Master节点、多台Chunk服务器,并同时被多个客户端访问。
image

存储方式

GFS存储的文件被分割成固定大小的Chunk,Master分配给每个Chunk一个不变的64位唯一标识。每个Chunk备份到多个服务器上,以提高可靠性。

Master服务器

Master服务器管理所有Chunk的元数据,以管理各Chunk数据(类似于Linux文件系统的inode)。每个Chunk大小为64M,Chunk元数据大小为64字节,而且由于大多数文件包含多个Chunk因此可以将所有Chunk的元数据存储在Master的内存中,增强系统的简洁性、可靠性、高性能和灵活性。

Chunk信息

Master服务器不永久保存Chunk服务器有指定Chunk的副本的信息。因为在一个拥有数百台服务器的集群中,Chunk服务器加入集群、离开集群、更名、失效、以及重启的时候,Master服务器和Chunk服务器数据同步的问题会非常频繁。Master服务器在启动时候轮询Chunk服务器,并在之后定期轮询更新。

GFS的日志系统(灾备)

操作日志包含了关键的元数据变更历史记录。操作日志是元数据唯一的持久化存储记录,同时也是判断同步操作顺序的逻辑时间基线(类似LSN),必须确保日志文件的完整,确保只有在元数据的变化被持久化后,日志才对客户端是可见的。GFS把日志复制到多台远程机器,只有相应的日志记录写入到本地以及远程机器的硬盘后,才会响应客户端的操作请求。Master服务器会收集多个日志记录后批量处理,以减少写入磁盘和复制对系统整体性能的影响。

GFS灾难恢复

Master服务器在灾难恢复时,通过重演操作日志把文件系统恢复到最近的状态。为了缩短Master启动的时间,重演系统操作的日志量尽量的少。Master服务器在日志增长到一定量时对系统状态做一次Checkpoint(对数据库的快照)。在灾难恢复的时候,Master服务器就通过从磁盘上读取这个Checkpoint文件,以及重演Checkpoint之后的有限个日志文件就能够恢复系统。Checkpoint文件以压缩B-树形势的数据结构存储,可以直接映射到内存,在用于命名空间查询时无需额外的解析。Master服务器恢复只需要最新的Checkpoint文件和后续的日志文件。旧的Checkpoint文件和日志文件可以被删除。通常会多保存一些历史文件。Checkpoint失败不会对正确性产生任何影响,因为恢复功能的代码可以检测并跳过没有完成的Checkpoint文件。

资料
The Google File System – Research at Google
谷歌三大核心技术(一)Google File System中文版 译者:alex

原创文章,作者:easyTang,如若转载,请注明出处:http://www.178linux.com/74893

(13)
easyTangeasyTang
上一篇 2017-05-07
下一篇 2017-05-07

相关推荐

  • Linux下btrfs子卷的挂载

        对btrfs文件系统的补充:     btrfs文件手动挂载自不必多说,但若想btrfs文件系统开机自动挂载,该如何实现呢?     其实只需添加挂载选项即可,如下: UUID=c99895c8-5b14-4276-80c7-ecf…

    Linux干货 2015-12-19
  • 马哥教育网络班22期+第10周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)     系统启动流程:       POST –> BootSequence(BIOS) –> BootLoader …

    Linux干货 2016-10-27
  • 20160907 centos启动流程

    1、centos5,6启动流程 centos系统启动流程linux系统的组成部分:内核+根文件系统内核:进程管理,内存管理,网络协议栈,文件系统,驱动程序,安全功能运行的系统环境可分为两层:内核空间,用户空间  用户空间:应用程序(进程或线程)  内核空间:内核代码(系统调用)    内核设计流派:   &n…

    Linux干货 2016-09-13
  • 程序包管理

    什么是程序包管理器?     顾名思义,就是将编译好的应用程序的各组成文件打包成一个或多个程序包文件,从而更方便地实现程序包的安装、升级、卸载还有查询等管理操作。 那么一个程序包又由哪些部分组成呢? 程序包的组成清单:   文件清单(每个程序包都单独实现):       安装或卸载时运行的脚本,有如下四类:     preinstall : 安装过程开始之前…

    Linux干货 2016-12-16
  • 马哥教育网络班21期第6周课程练习

    一、vim编辑器的使用 二、练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@www ~]# cp /etc/rc.d/rc.sysinit /tmp [root@www ~]# l…

    Linux干货 2016-08-15
  • DNS服务器—-主从服务器搭建

    一、环境准备   1、准备三台测试       主DNS服务器地址:192.168.10.203       从DNS服务器地址:192.168.10.103       测试主机地址:  192.168.10.120 …

    Linux干货 2015-05-18