版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/84348459
GFS
GFS 也就是 google File System,Google公司为了存储海量搜索数据而设计的专用文件系统。
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
master节点
master节点只存放元数据:
- 文件和chunk命名空间
- 文件和chunk的对应关系
- 每个chunk副本的存放地点
chunk server节点
chunk server节点是数据存放节点,也是数据操作节点,客户端只与master节点交换元数据,数据操作都是在chunck server节点上进行的。
持久保存数据与非持久保存数据
- master持久保存日志数据,日志的序号表示时间
- master非持久保存chunk server的位置信息,只是采用定期轮询的机制,只要chunk服务器才能最终确定某个chunk是否在硬盘上
GFS master复制机制
- 一个逻辑的master采用两台物理主机
- master状态复制,复制操作日志和check point文件
- “影子”master机制
GFS读取数据流程
- 客户端将文件名和程序字节偏移转换成chunk索引,进而把文件名和chunk索引发送给master
- master将chunk标识和副本的位置信息发送给客户端,同时客户端用文件名和chunk索引作为key 缓存,然后发送客户端请求到其中一个副本chunksever(一般最近的)
- 该chunkserver读取chunk数据返回客户端
实际过程中,客户端通常在一次请求中查询多个chunk信息,master节点的回应也可能包含了被请求chunk后续chunk的信息。
GFS写数据流程
租约机制:master建立租约,并将其授权给某个副本作为primary,由primary确定数据修改的顺序,其他的副本照做
- 客户机向master询问哪个节点持有租约,以及其他副本的位置,如果没有chunk是租约,那么久算则其中的一个副本建立租约
- master将主chunk的标识符以及其他副本(secondary副本)的位置返回给客户机,客户机缓存这些数据
- 客户机将数据推送到所有的副本上(可以按照任意顺序)
- 当所有的副本都确认收到数据后,客户机发送写请求给primary chunk服务器,primary chunk为接收到的所有的操作分配连续的序列号
- 主chunk把写请求传递到二级副本,每个二级副本按照主chunk分配的序列号以相同的顺序进行操作
- 二级副本恢复主chunk完成
- 主chunk恢复客户机
记录追加 原子性操作
追加操作超过chunk尺寸
- 填充当前chunk
- 通知secondary做同样的操作
- 通知客户机向新的chunk追加
追加操作不会超过chunk尺寸
- 主chunk追加数据
- 通知二级chunk写在相同的位置上
- 如果失败,重新操作,成功则返回偏移
失败的追加操作可能导致chunk间字节不一致,但是最终追加成功之后,所有副班返回的偏移是一致的。