GFS分布式

本文详细介绍了Google FileSystem (GFS),Google用于存储和处理大规模数据的分布式文件系统。GFS的特点包括集群协作、松散一致性、副本机制、校验和确保数据正确性以及在大数据场景下的优化。讨论了GFS的使用背景、核心组件和一致性模型,并提及Google后续的Colossus发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GFS是什么?
1.1 简单介绍
这个问题说大也大,说小也小。GFS是Google File System的缩写,字面意义上就是Google的文件系统,技术层面上来讲,GFS是Google在2003年前后创建的可扩展分布式文件系统 ,用来满足 Google 不断扩展的数据处理需求。GFS 为大型网络和连接的节点提供容错、可靠性、可扩展性、可用性和性能。GFS 由多个由低成本商品硬件组件构建的存储系统组成。它经过优化以适应 Google 的不同数据使用和存储需求,例如其搜索引擎会生成大量必须存储的数据。在我看来这个系统最大的亮点有两个,一个是使用集群的概念,将硬件设施连接起来共同进行文件存储任务;另外一个是充分利用了现成服务器的优势,同时最大限度地减少了硬件弱点。

为什么要用GFS?
大量数据的存储会面临很多的难点:

大数据下需要良好的表现就需要分片和容错。在具体操作过程中,涉及到容错一般使用副本来解决,然而副本的使用会面临不一致问题。如果有一致性的要求,就会导致表现降低。

所谓的一致性,就是在集群中表现的像与一台机器或一个副本进行交互那样

因为GFS不但是一个理论成熟的框架结构,更是一种通过长期实际使用证明了其优秀性能的分布式架构。GFS是一种松散一致性模型,这是其具有优越的性能主要原因之一。

松散一致性模型关键:

依靠添加而不是重写
检查点
自我验证(校验和)
自我认证记录

GFS基本结构——GFS master、GFS chunkServer、client
GFS master(主服务器)、GFS chunkServer(数据块服务器)、client(客户端)三者可简单理解为图书馆关系。client相当于图书馆,GFS master相当于图书馆管理员,GFS chunkServer相当于图书馆中的书柜。我们通过图书馆client为了借到书chunk(书即是我们存储的一个个数据块chunk),首先要通过图书管理员GFS master获得目标书籍chunk的书柜chunkServer的地址,然后找到书柜chunkServer取得其中的一本书chunk。因此GFS master图书管理员不清楚书里的内容,只负责记录书的位置,借出和归还,因此只记录少量的位置数据。我们通过GFS master获得书chunk的位置,然后拿着这个位置就能找到目标chunk,chunk即是海量数据分割后的一个个小块,其中记录大量数据。
在这里插入图片描述

要点:

Master通过lease(租约)和Primary Replica(主副本)本来构建交互的流程。

Master是做出决策、创建新的块和赋值,并协调各种系统范围的活动,以保证块完全复制,平衡所有chunkserver的负载,同时还负责垃圾回收。

Master的操作通过锁来保证命名空间范围内的序列化

主副本是从众多chunkserver中选出的唯一特殊副本,该副本的特殊性在于其维护了一个定时的租约列表。

租约指的是一组由用户发来的有顺序的指令集合

主副本之外的副本都需要通过主副本中的这个列表来执行指令,以保证每个副本执行的最终结果相同。

Master失效怎么办
有副本master,拥有master状态的完整副本;GFS论文中设计需要人工干预才能切换到其中一种主故障后的副本。

如何保障副本记录的正确性
使用原子记录至少追加一次的方法。

为什么不使用完全追加?

如果在其中一个写入失败时客户端重新尝试写入,这将导致数据在未失败的副本上多次附加。不同的设计可能会检测到重复的客户端请求,例如,原始故障之间的主要故障请求和客户端的重试。

应用程序如何知道哪些部分组成填充,哪些是重复记录?
为了检测填充,应用程序可以放置一个可预测的幻数在有效记录的开头,或包含一个校验和,该校验和可能仅当记录有效时才有效。该应用程序可以检测通过在记录中包含唯一 ID 来复制。然后,如果它读取与先前记录具有相同 ID 的记录,它知道它们是彼此的重复。GFS 为应用程序提供了一个库处理这些情况。

什么是校验和?
校验和算法将一个字节块作为输入并返回一个单个数字,它是所有输入字节的函数。例如,一个简单校验和可能是输入中所有字节的总和(mod一些大数字)。GFS 存储每个块的校验和以及块。当一个chunkserver在它的磁盘上写一chunk时,它首先计算新块的校验和,并将校验和保存在磁盘上以及块。当一个chunkserver从磁盘读取一个chunk时,它还读取先前保存的校验和,从磁盘读取的块,并检查两个校验和是否匹配。如果数据已被磁盘损坏,校验和不匹配,并且chunkserver 会知道返回错误。另外,一些 GFS应用程序存储自己的校验和,而不是应用程序定义的记录,在 GFS 文件中,以区分正确的记录和填充。

GFS 以正确性换取性能在多大程度上可以接受
这是分布式系统中反复出现的主题。强一致性通常出现在需要复杂且需要交互的协议机器之间。经过利用特定应用程序类可以容忍的放松方式一致性,可以设计出具有良好性能和足够的一致性。例如,GFS 针对 MapReduce 进行了优化对大文件需要高读取性能的应用程序可以在文件中有漏洞,记录显示多次,并且不一致的读取。

Google 是否仍使用 GFS?
有传言说 GFS 已经被一个叫做Colossus,总体目标相同,但在 master 方面有所改进性能和容错性。
 

### 安装和配置 GFS 分布式文件系统 #### 准备工作 为了在 Rocky Linux 上成功安装并配置 GFS(Global File System),需要先确保操作系统已经正确设置了必要的依赖项和服务。 #### 启用 GlusterFS 服务 GlusterFS 是一种可扩展的网络附加存储解决方案,可以用来实现分布式文件系统。通过命令 `systemctl enable glusterd.service` 可以启用该服务[^2]。这一步骤对于后续集群节点间的通信至关重要。 #### 配置 YUM 源 由于默认仓库可能不包含最新的 GlusterFS 版本,在开始之前应当考虑添加官方提供的 yum 源来获取更稳定可靠的软件包: ```bash sudo dnf install centos-release-gluster ``` 此命令会自动下载并安装来自 CentOS 社区维护者发布的 GlusterFS 软件源列表。 #### 安装 GlusterFS 组件 完成上述准备工作之后,就可以继续执行实际的安装过程了: ```bash sudo dnf install glusterfs-server ``` 这条指令将会部署服务器端组件至本地主机上;如果计划构建多台成员组成的集群,则需重复以上步骤直至所有预期参与方均已完成相同设置。 #### 初始化 GlusterFS 卷 一旦全部目标机器都已准备好加入同一个信任池内,便可以通过如下方式建立共享资源空间: ```bash gluster peer probe NODE_IP_ADDRESS ``` 这里替换掉 `NODE_IP_ADDRESS` 参数值为目标节点 IP 地址字符串。接着定义一个新的卷名,并指定要挂载的具体路径位置: ```bash gluster volume create VOLNAME replica COUNT transport tcp \ SERVER1:/path/to/export \ SERVER2:/path/to/export ... gluster volume start VOLNAME ``` 请注意调整参数中的细节部分使之匹配实际情况需求。例如,“replica” 关键字后的数字代表副本数量,而 “transport” 则指定了传输协议类型。“VOLNAME” 和各服务器对应的导出路径也需要依据规划设定好相应名称与地址信息。 #### 创建文件系统 最后一步是在客户端设备上创建相应的文件系统以便访问远程数据集。假设前面提到过的卷名为 "myvolume" ,那么可以在任意一台客户机终端里运行下面这段脚本来完成最终环节的操作: ```bash mkdir -p /mnt/glusterfs mount -t glusterfs server-name:/myvolume /mnt/glusterfs/ ``` 这样就完成了整个流程,现在应该能够在 `/mnt/glusterfs/` 下看到由多个物理站点共同构成的一个逻辑上的统一视图了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璀璨的夜晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值