8分布式文件系统设计
DFS DESIGN
查询文件副本信息
函数声明:int QueryRepInfo(const char * filename, unsigned long * list, int count) 返回值:成功返回副本数量,如果该文件没有副本,副本数量 被认为是1,失败返回0; 参数: filename ,被查询的文件路径; list ,用于返回副本位 置信息(IP地址)的缓冲区;count,指明list的大小,单位 是unsigned long; 本函数的功能是查询文件的副本位置信息,如果被查询的文件 存在副本,则在list中返回所有存放副本的节点的IP地址, 文件主本所在节点返回在list指向的第一个位置。
DFS DESIGN
删除文件副本
函数声明:int RemoveRep(const char * filename, const char * host) int RemoveRep2(const char * filename, unsigned long addr) 返回值:成功返回0,失败返回错误号(小于0); 参数:filename,主本文件路径;host,删除副本的节点名字; addr,删除副本的节点的IP地址; 本函数的功能是在host上删除文件filename的副本。注意,文 件主本不能通过本函数删除。
DFS DESIGN
分布式通信
分布式消息通信机制。 实现可靠的UDP及组播机制。
DFS DESIGN
外部接口
DFS DESIGN
添加共享
函数声明: int AddShareSection(const char * sharename, const char * sharepath) 返回值:成功返回0,失败返回错误号(小于0); 参数:sharename ,添加的共享名; sharepath ,本节点输出 的共享目录; 本函数的功能是将本地的 sharepath 映射到 /xfs/sharename 下。
DFS DESIGN
副本表
XFS中每个节点都在硬盘上保存了一个副本表,记 录整个系统的副本位置信息。副本表模块的功能是 维护这个副本表。
DFS DESIGN
副本管理
负责文件副本的创建、删除,在启动时刻检查系统 中副本一致性,提供副本信息查询接口。
DFS DESIGN
共享区管理
实现共享目录到共享点的映射,负责共享区的添加 和删除,保存本地的共享区信息,为目录/xfs提供 访问接口。
DFS DESIGN
同步更新
修改拥有副本的文件时,同步修改系统中所有的相 关副本。
DFS DESIGN
网络锁
提供面向对象的锁机制,实现分布式同步互斥。
DFS DESIGN
系统日志
IGN
节点管理器
维护系统节点信息,即系统由哪些节点构成,它们 的名字和网络地址,这些节点何时加入、何时退出。
DFS DESIGN
软件结构
系统日志 :记录系统操作;记录系统调试信息; 节点管理器 :维护系统节点信息;提供名字服务; 分布式通信 :分布式消息通信
DFS DESIGN
模块外部设计
功能 接口设计
• 外部接口 • 内部接口
DFS DESIGN
功能-XFS操作集
本模块的功能是提供标准的Linux文件系统操作集。 Linux的文件系统通常要提供4个操作集, 文件操作集(file operations) 文件inode操作集(file inode operations) 目录inode操作集(dir inode operations) 超级块操作集(super operations)。 XFS将针对XFS文件系统的功能,实现这些操作集 中的相关函数。
添加文件副本
函数声明:int AddRep(const char * filename, const char * host) int AddRep2(const char * filename, unsigned long addr) 返回值:成功返回0,失败返回错误号(小于0); 参数:filename,主本文件路径;host,添加副本的节点名 字;addr,添加副本的节点IP地址; 本函数的功能是在host上为文件filename添加一个副本。注 意,每个文件同一个host上最多只能有一个副本。
• 位置透明 • 并发透明:多个用户同时对同一文件操作而不会 引起文件的不一致 • 故障透明:故障不会引起文件的不一致
DFS DESIGN
扩充性与性能
扩充对性能会有影响 若系统的任一部分都必须知道其它部分的状 态,则当规模增大时,系统的复杂性将很复 杂。
DFS DESIGN
命名
达到透明性,在不同的客户机可以用同一个 视点看待整个文件系统。
DFS DESIGN
删除共享
函数声明:int RemoveShareSection(const char * sharename) 返回值:成功返回0,失败返回错误号(小于0); 参数:sharename,待删除的共享名; 本函数的功能是将/xfs/sharename从xfs目录中删除。
DFS DESIGN
DFS DESIGN
NFS客户机和服务器问题
NFS每个请求都可以独立地被处理,服务器 不必用状态控制,不必为NFS用户保持状态 信息。 无状态控制服务器的主要优点在于它简化了 失效修复过程。 无状态使得正确地存储比较困难。客户缓存 了文件服务器一无所知。
DFS DESIGN
分布式文件系统设计
DFS DESIGN
NFS
根据抽象额RPC定义NFS,同时用自由可用 的RPC包实现了NFS。 NFS包括一个叫XDR的外部数据定义语言, 它可在由异构的硬件和软件组成的计算机系 统中传送结构信息。
DFS DESIGN
NFS实现机制
每个VFS的文件操作作为底层文件系统的一 个过程调用来实现。在NFS中,该过程调用 是作为文件系统用户到NFS服务器的一个 RPC而实现。 服务器处理请求时,要执行本地文件系统的 调用,并将状态、数据和操作返回给提出请 求的客户机。
DFS DESIGN
文件操作集
struct file_operations { loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); …… }
DFS DESIGN
软件描述
本文所描述的分布式文件系统(内部研发代 号XFS)是开发的基于Linux的分布式文件系 统,它基于局域网连接,主要用于分布式服 务器之间共享数据。为满足分布式服务器对 可靠性的特殊需求,本系统具有数据冗余能 力,并有较高的可靠性 。
DFS DESIGN
软件结构
DFS DESIGN
DFS DESIGN
安全性
数据的私有性
• 分布式文件系统由于地域和时域的要求使得 UNIX的措施对文件保护不力。
冲突时的数据恢复
• 失效的恢复问题
− 日志 − 备份
DFS DESIGN
透明性
象集中分布式管理方法,给用户的界面是一 个完整统一的文件系统 体现在位置透明、并发透明、故障透明等几 方面
分布式文件系统
概念 基本问题 实用的分布式文件系统例--nfs 分布式文件系统中的关键技术
DFS DESIGN
概念
把分散在整个网络中的文件系统资源以统一 的视点呈现给用户
DFS DESIGN
分布式文件系统中的基本问题
DFS(distribution file system)是建立在C/S 技术之上的;一个或多个文件服务器与客户 机协同操作。由于控制分布,一些集中式系 统中容易解决的问题变得复杂,如共享,数 据安全,透明性等。
DFS DESIGN
内部接口 --超级块操作集
struct super_operations { void (*read_inode) (struct inode *); void (*write_inode) (struct inode *); void (*put_inode) (struct inode *); void (*delete_inode) (struct inode *); int (*notify_change) (struct dentry *, struct iattr *); void (*put_super) (struct super_block *); void (*write_super) (struct super_block *); int (*statfs) (struct super_block *, struct statfs *, int); int (*remount_fs) (struct super_block *, int *, char *); void (*clear_inode) (struct inode *); void (*umount_begin) (struct super_block *); };