分布式文件系统简介
文件系统是在物理存储和文件操作之间的抽象层,使得文件管理,存储管理更加方便。分布式文件系统,使得文件系统容易扩容,方便配置,方便共享和管理。当然具体解释就是文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数据存储。
常见的专有的分布式文件系统比如GFS、HDFS(模仿GFS)、PanFS、Lustre,MogileFS、FastDFS等等。
通用的文件系统比如NFS、AFS。
一般来说,分布式文件系统有以下特点:
- 可以组建包含大量廉价服务器的海量存储系统。
- 通过内部的冗余复制,保证文件的可以用性,在海量存储系统中,容错能力非常重要
- 可扩展性强,增加存储节点和追踪器都比较容易
- 在对个文件副本之间就进行负载均衡,可以通过横向扩展来确保性能的提升
- 进行特定的索引文件计算
普通的存储方法
Rsync、DAS(IDE/SATA/SAS/SCSI等块)、NAS(NFS、CIFS、SAMBA等文件系统)、SAN(FibreChannel, iSCSI, FoE存储网络块),Openfiler、FreeNas(ZFS快照复制)。由于生产环境中往往由于对存储数据量很大,而SAN存储价格又比较昂贵。
分布式存储方法
常见的分布式文件系统有FastDFS,GFS、HDFS、Ceph 、GridFS 、mogileFS、TFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
NFS
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。
nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器;mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限;idmapd:主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
使用NFS mount到了客户端之后,客户端访问远程文件就像访问本地文件一样。mount之后,路径访问每次只能访问当前目录,需要一次RPC,所以用户端最好进行缓存。为什么不能直接把整个目录全部返回,因为服务器不知道用户端在该目录下的文件有没有mount别的文件系统,这样贸然返回全部,很浪费资源,而且客户端不一定用得到。当然也存在有时候需要返回全部的情况,但是NFS v4.2才有,目前该版本还在开发中。
在NFSv3维护缓存一致性的时候,采用的是30s原则。使用了一个叫做租约的东西。AFS是读取最近关闭的版本的数据。Unix是能够获得最近多有的写操作;HTTP:没有进行一致性操作,每次读取数据,都要判断是否是最新的数据。在30s内服务器不会做出改变,客户端使用write-through 缓存,并且再超过30s以后检查缓存。客户端提供会话和缓存,服务器做了一个本地服务器能够做的一切。(属于无状态缓存,stateless)
有无状态的保存(服务器需要保存客户端状态么?)
- 无状态:简单,更快速,容易从崩溃之后恢复;不会有因为追踪状态而消耗资源的问题;
- 有状态:更快,可能。能够提供更好的语义操作。
客户端访问分布式文件时需要handle,这个handle来自于服务器,有inode number,还有根据当前inode随机生成的数字。
多服务器存储
如果只有一个服务器来响应请求的话,那么负载过大,这个服务器会变成瓶颈。考虑到负载均衡和调度更新,可以使用多服务器。
NFSv3中,每个服务器都存了不同的文件,并且都有自己的NFS命名空间。具体怎么挂载就是客户端的事情。每次用户端访问一个文件,需要遍历命名空间来找到mount的节点。负载均衡方