分布式(集群)文件系统的设计



本文讲的分布式文件系统,是通过集群来实现的,因此也是集群文件系统。本文介绍下分布式文件系统中的常见问题及GFS中给出的解决方法。

设计要点:

性能

提高性能的方法就是并行,讲一个任务分解成多个任务,同一时候运行。

GFS中的思路是将文件分块,每一个块是一个chunk,每一个chunk单独保存,保存chunk的节点叫chunkserver。对文件的读写,能够转成对chunk的读写,不同的chunk能够并行运行,提高效率。每一个chunk有唯一的一个chunk handle表示,chunk的大小(chunk size)须要依据应用特点决定。chunk size过大,影响并行度;过小,占用很多其它的metadata空间,很多其它的chunk解析时间。

高可用性(availability)和可靠性(reliability)

可用性指系统平均宕机时间占总使用时间的比例,越小越好。

可控性指系统的平均无故障执行时间,越长越好。

高可用性能够通过硬件冗余(redundency)实现,当一个硬件不能工作的时候,迅速切换到备份系统。缩小切换时间能够添加?系统的可用性。

提高容错性(fault tolerance)能够提高系统的可靠性,一个component失效,不会影响总体的功能。

GFS中採用的就是硬件冗余的方法来实现高可用和高可靠。master和chunkserver都有备份,对于chunkserver,有3个节点互为备份,备份以chunk为单位进行。

master採用主备(master/slave)方式备份。master主节点(primary master)会将自己的状态信息(operation log和checkpoint)同步到备份节点上,当主节点不可用时,备份节点能够新的主节点使用。

chunkserver採用负载均衡(load balance)方式备份。每一个chunk会被保存在3台chunkserver上,每一个chunkserver都会參与处理请求。对于读请求,会选择距离client较近的chunkserver;对于写请求,master会选择一个primary replica,由primary replica负责将client的数据同步到其它的备份节点上。

可扩展性

集群的规模能够依据须要动态扩展,主要指存储能力的扩展性,即添加?chunkserver的能力。为了支持动态扩展,须要做到chunk保存位置的透明性(Location transparency),用户不须要知道每一个chunk保存在哪些机器上,而是由系统动态维护。这样系统中chunkserver的添加?和降低就不会影响client的使用。

GFS中的思路,採用一个master节点来保存全部的元数据(metadata),实现chunk的位置透明性。

master的主要工作:

文件的namespace管理

类似于传统文件系统中的文件夹结构,维护系统中已有的文件。

将文件映射成chunks

每一个文件由若干个chunk组成。从client看来,chunk由0開始编号直到N。master须要将chunk的逻辑编号(0,1,...N)映射为内部的chunk     handle(chunk的唯一全局标示符)。

chunk位置管理

  记录每一个chunk所属的chunkserver的位置,每一个chunk会保存在多个chunkserver上。依据这个信息,能够实现chunk的位置无关性。master会和每一个chunkserver通信,已得到每一个chunkserver上保存的chunk信息。创建新的chunk时,master也会依据一定的算法来选择chunkserver(默认选择3台,存放3个备份)来保存chunk。

容错处理

系统执行中,可能出现chunkserver损坏的情况。master须要将这台机器上所保存的chunk进行又一次部署(re-replicatoin)。还有随着机器的添加?,还要对chunk存放进行又一次的平衡(rebalancing,chunk migration between chunk servers)。

元数据保存和备份、恢复

上述功能的实现都依赖于metadata,metadata主要保存在内存中。系统中对文件的更改操作(mutation)都会记录操作日志中(operation log,这个日志类似于关系数据库系统中的日志)。内存中的metadata也会以checkpoint的形式存放在磁盘上。依据一个checkpoint和在其上进行的operation log,就能够恢复系统的状态(在checkpoint基础上重放运行过的全部操作就可以)。master就是将checkpoint和operation log备份到其它机器上,来实现备份恢复。

一致性模型(consistency model)

一致性指当一个client更改了文件的内容时,其它的clients是否能看到这些内容,何时看到。

GFS中採用的是强一致性(strong consistency model)模型,这个模型中,当一个client改动完毕后,其它的全部clients都会立马看到改动(无论client是从哪个备份读)。这个和普通的单机文件系统是一致的。GFS中没有提供的文件读写的并发控制,当多个client同一时候进行更改操作时,文件内容是不确定的(undefined)

并发控制(concurrency control)

当有多个client同一时候运行某个操作时,要保证系统的正确性。

GFS中对文件namespace的操作时原子操作,及多个client同一时候使用不会产生问题,内部有一定的并发控制策略(通过锁lock机制实现)。但对文件内容的读写没有提供并发控制。

GFS还提供了还有一种原子操作,附加记录(Atomic Record Appends)。

总结:

这些问题在每一个分布式文件系统中都会出现,不同的系统可能有不同的解决方法。在学习的时候,能够先关注这些点。

分布式(集群)文件系统的设计

时间: 2024-08-24 20:50:16

分布式(集群)文件系统的设计的相关文章

[转载] 【冬瓜哥手绘雄文】集群文件系统架构演变终极深度梳理图解

原文:  http://mp.weixin.qq.com/s?__biz=MzAwNzU3NzQ0MA==&mid=209298809&idx=1&sn=70f93b7d71fa7ac9caf3c737fb20a2ad&scene=1&key=c76941211a49ab58a5fed01be2b1651eadbc89e3a9495b276185efdb2282d0fdd5b3aca4129a665495d1b65b77a9a848&ascene=0&

大型网站技术架构,6网站的伸缩性架构之分布式缓存集群的伸缩性设计

和所有服务器都部署相同应用的应用服务器集群不同,分布式缓存服务器集群中不同的服务器中缓存的数据各不相同,缓存访问请求不可以在缓存服务器集群中的任意一台处理,必须先找到缓存有需要数据的服务器,然后才能访问. 这个特点制约了分布式缓存集群的伸缩性设计,因为新上线的缓存服务器没有缓存任何数据,而已下线的缓存服务器还缓存这网站的许多热点数据. 必须让新上线的缓存服务器对整个分布式缓存集群影响最小,也就是说新加入的缓存服务器应使整个缓存服务器集群中已经缓存的数据尽可能还被访问到,这是分布式缓存集群伸缩性设

Ganglia环境搭建并监控Hadoop分布式集群

简介 Ganglia可以监控分布式集群中硬件资源的使用情况,例如CPU,内存,网络等资源.通过Ganglia可以监控Hadoop集群在运行过程中对集群资源的调度,作为简单地运维参考. 环境搭建流程 1.我们先在主机master01上面搭建好Ganglia环境 2.在master01主机上解压JDK和Hadoop到安装目录.修改配置文件 3.克隆出两台主机slave01,slave02并修改主机名和IP主机名映射.做免密码登录 4.启动Ganglia和Hadoop集群.实现wordcount实例

Hadoop全分布式集群环境配置

Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个分布式系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错的特点,并且设计用来部署在低廉的(low-cost)硬件上:而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序.HDFS

Hadoop伪分布式集群搭建-此文章在个人51.cto转载

一.HDFS伪分布式环境搭建 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统的区别也是很明显的.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的.HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架

单节点3GB单线程967 MB部署半小时内完成,CS领跑分布式集群

Infortrend的分布式NAS集群EonStor CS具有三种横向扩展模式:纠删码.副本.以及NAS Scale-Out(本文当中称为"专用模式").其中专用模式是Infortrend独有的.在专用模式下,CS的空间利用率更高,实际使用空间可以达到原始容量的90%.在成本限定的情况下,用户可以使用更多的空间.并且性能更高,CS单节点的读性能可以达到3GB/s,单节点的写可以达到2.4 GB/s,单线程的写则能够达到967 MB/s.要知道,这可是在安装HDD的条件下实现的,单节点的

大数据系列之Hadoop分布式集群部署

本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave Ip:10.211.55.4 各虚拟机环境配置好Jdk1.8(1.7+即可) 资料准备 hadoop-2.7.3.tar.gz 虚拟机配置步骤 以下操作都在两台虚拟机 root用户下操作,切换至root用户命令 配置Master hostname 为Master ; vi /etc/sysconfi

RHCS之用css_tool命令创建HA集群及创建gfs2集群文件系统

准备环境 node1:192.168.139.2 node2:192.168.139.4 node4:192.168.139.8 node5:192.168.139.9 node1 作为target端 node2 node4 node5 作为initiator端 并且将node2 node4 node5安装cman+rgmanager后配置成一个三节点的RHCS高可用集群,因为gfs2为一个集群文件系统,必须借助HA高可用集群将故障节点Fence掉,及借助Message Layer进行节点信息传

(转)ZooKeeper伪分布式集群安装及使用

转自:http://blog.fens.me/hadoop-zookeeper-intro/ 前言 ZooKeeper是Hadoop家族的一款高性能的分布式协作的产品.在单机中,系统协作大都是进程级的操作.分布式系统中,服务协作都是跨服务器才能完成的.在ZooKeeper之前,我们对于协作服务大都使用消息中间件,随着分布式系统的普及,用消息中间件完成协作,会有大量的程序开发.ZooKeeper直接面向于分布式系统,可以减少我们自己的开发,帮助我们更好完成分布式系统的数据管理问题. 目录 zook