8分布式文件系统设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 位置透明 • 并发透明:多个用户同时对同一文件操作而不会 引起文件的不一致 • 故障透明:故障不会引起文件的不一致
DFS DESIGN
扩充性与性能
扩充对性能会有影响 若系统的任一部分都必须知道其它部分的状 态,则当规模增大时,系统的复杂性将很复 杂。
DFS DESIGN
命名
达到透明性,在不同的客户机可以用同一个 视点看待整个文件系统。
软件结构
XFS由9个相对独立的程序模块组成,它们是XFS操 作集、副本表、副本管理、共享区管理、同步更新、 网络锁、系统日志、节点管理器和分布式通信。
DFS DESIGN
软件结构
XFS操作集:按Linux文件系统标准操作集规范实现 xfs操作集。 副本表:维护系统副本信息;维护拥有副本的文件 的 路径信息; 副本管理:文件副本的创建、删除;提供副本位置 信息;检查副本表、副本一致性; 共享区管理 :添加共享区、删除共享区;提供本地 共享区对共享目录的解析服务; 同步更新 :同步更新同一个文件的所有副本; 网络锁 :提供分布式锁机制;分布式同步互斥机制;
DFS DESIGN
安全性
数据的私有性
• 分布式文件系统由于地域和时域的要求使得 UNIX的措施对文件保护不力。
冲突时的数据恢复
• 失效的恢复问题
− 日志 − 备份
DFS DESIGN
透明性
象集中分布式管理方法,给用户的界面是一 个完整统一的文件系统 体现在位置透明、并发透明、故障透明等几 方面
DFS DESIGN
副本表
XFS中每个节点都在硬盘上保存了一个副本表,记 录整个系统的副本位置信息。副本表模块的功能是 维护这个副本表。
DFS DESIGN
副本管理
负责文件副本的创建、删除,在启动时刻检查系统 中副本一致性,提供副本信息查询接口。
DFS DESIGN
共享区管理
实现共享目录到共享点的映射,负责共享区的添加 和删除,保存本地的共享区信息,为目录/xfs提供 访问接口。
DFS DESIGN
NFS客户机和服务器问题
NFS每个请求都可以独立地被处理,服务器 不必用状态控制,不必为NFS用户保持状态 信息。 无状态控制服务器的主要优点在于它简化了 失效修复过程。 无状态使得正确地存储比较困难。客户缓存 了文件服务器一无所知。
DFS DESIGN
分布式文件系统设计
DFS DESIGN
共享性
UNIX文件系统具有单一现场的语意,文件的 任何细微变化都是立即可见的。 分布式文件系统中,一般采用打开/关闭规则。 文件打开时,对其更新才是可见的,文件关 闭时,改变的信息才会被传播。
DFS DESIGN
共享性
必须考虑并发写共享所设计到的一致性问题 有客户机缓存时,实现写共享特别困难(设计 中不考虑缓存一致性)。
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
查询文件副本信息
函数声明:int QueryRepInfo(const char * filename, unsigned long * list, int count) 返回值:成功返回副本数量,如果该文件没有副本,副本数量 被认为是1,失败返回0; 参数: filename ,被查询的文件路径; list ,用于返回副本位 置信息(IP地址)的缓冲区;count,指明list的大小,单位 是unsigned long; 本函数的功能是查询文件的副本位置信息,如果被查询的文件 存在副本,则在list中返回所有存放副本的节点的IP地址, 文件主本所在节点返回在list指向的第一个位置。
DFS DESIGN
同步更新
修改拥有副本的文件时,同步修改系统中所有的相 关副本。
DFS DESIGN
网络锁
提供面向对象的锁机制,实现分布式同步互斥。
DFS DESIGN
系统日志
记录系统操作,作为一致性检查的依据;记录系统 调试信息。
DFS DESIGN
节点管理器
维护系统节点信息,即系统由哪些节点构成,它们 的名字和网络地址,这些节点何时加入、何时退出。
添加文件副本
函数声明: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
删除共享
函数声明:int RemoveShareSection(const char * sharename) 返回值:成功返回0,失败返回错误号(小于0); 参数:sharename,待删除的共享名; 本函数的功能是将/xfs/sharename从xfs目录中删除。
DFS DESIGN
DFS DESIGN
软件结构
系统日志 :记录系统操作;记录系统调试信息; 节点管理器 :维护系统节点信息;提供名字服务; 分布式通信 :分布式消息通信
DFS DESIGN
模块外部设计
功能 接口设计
• 外部接口 • 内部接口
DFS DESIGN
功能-XFS操作集
本模块的功能是提供标准的Linux文件系统操作集。 Linux的文件系统通常要提供4个操作集, 文件操作集(file operations) 文件inode操作集(file inode operations) 目录inode操作集(dir inode operations) 超级块操作集(super operations)。 XFS将针对XFS文件系统的功能,实现这些操作集 中的相关函数。
DFS DESIGN
文件和目录inode操作集
struct inode_operations { struct file_operations * default_file_ops; int (*create) (struct inode *,struct dentry *,int); struct dentry * (*lookup) (struct inode *,struct dentry *); int (*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *); int (*symlink) (struct inode *,struct dentry *,const char *); int (*mkdir) (struct inode *,struct dentry *,int); int (*rmdir) (struct inode *,struct dentry *); int (*mknod) (struct inode *,struct dentry *,int,int); …… };
DFS DESIGN
NFS
根据抽象额RPC定义NFS,同时用自由可用 的RPC包实现了NFS。 NFS包括一个叫XDR的外部数据定义语言, 它可在由异构的硬件和软件组成的计算机系 统中传送结构信息。
DFS DESIGN
NFS实现机制
每个VFS的文件操作作为底层文件系统的一 个过程调用来实现。在NFS中,该过程调用 是作为文件系统用户到NFS服务器的一个 RPC而实现。 服务器处理请求时,要执行本地文件系统的 调用,并将状态、数据和操作返回给提出请 求的客户机。
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 *); };
分布式文件系统
概念 基本问题 实用的分布式文件系统例--nfs 分布式文件系统中的关键技术
DFS DESIGN
概念
把分散在整个网络中的文件系统资源以统一 的视点呈现给用户
DFS DESIGN
分布式文件系统中的基本问题
DFS(distribution file system)是建立在C/S 技术之上的;一个或多个文件服务器与客户 机协同操作。由于控制分布,一些集中式系 统中容易解决的问题变得复杂,如共享,数 据安全,透明性等。
DFS DESIGN
软件描述
本文所描述的分布式文件系统(内部研发代 号XFS)是开发的基于Linux的分布式文件系 统,它基于局域网连接,主要用于分布式服 务器之间共享数据。为满足分布式服务器对 可靠性的特殊需求,本系统具有数据冗余能 力,并有较高的可靠性 。
DFS DESIGN
软件结构
DFS DESIGN
DFS DESIGN
分布式通信
分布式消息通信机制。 实现可靠的UDP及组播机制。
DFS DESIGN
外部接口
DFS DESIGN
添加共享
函数声明: int AddShareSection(const char * sharename, const char * sharepath) 返回值:成功返回0,失败返回错误号(小于0); 参数:sharename ,添加的共享名; sharepath ,本节点输出 的共享目录; 本函数的功能是将本地的 sharepath 映射到 /xfs/sharename 下。
DFS DESIGN
Leabharlann Baidu
删除文件副本
函数声明: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
扩充性与性能
扩充对性能会有影响 若系统的任一部分都必须知道其它部分的状 态,则当规模增大时,系统的复杂性将很复 杂。
DFS DESIGN
命名
达到透明性,在不同的客户机可以用同一个 视点看待整个文件系统。
软件结构
XFS由9个相对独立的程序模块组成,它们是XFS操 作集、副本表、副本管理、共享区管理、同步更新、 网络锁、系统日志、节点管理器和分布式通信。
DFS DESIGN
软件结构
XFS操作集:按Linux文件系统标准操作集规范实现 xfs操作集。 副本表:维护系统副本信息;维护拥有副本的文件 的 路径信息; 副本管理:文件副本的创建、删除;提供副本位置 信息;检查副本表、副本一致性; 共享区管理 :添加共享区、删除共享区;提供本地 共享区对共享目录的解析服务; 同步更新 :同步更新同一个文件的所有副本; 网络锁 :提供分布式锁机制;分布式同步互斥机制;
DFS DESIGN
安全性
数据的私有性
• 分布式文件系统由于地域和时域的要求使得 UNIX的措施对文件保护不力。
冲突时的数据恢复
• 失效的恢复问题
− 日志 − 备份
DFS DESIGN
透明性
象集中分布式管理方法,给用户的界面是一 个完整统一的文件系统 体现在位置透明、并发透明、故障透明等几 方面
DFS DESIGN
副本表
XFS中每个节点都在硬盘上保存了一个副本表,记 录整个系统的副本位置信息。副本表模块的功能是 维护这个副本表。
DFS DESIGN
副本管理
负责文件副本的创建、删除,在启动时刻检查系统 中副本一致性,提供副本信息查询接口。
DFS DESIGN
共享区管理
实现共享目录到共享点的映射,负责共享区的添加 和删除,保存本地的共享区信息,为目录/xfs提供 访问接口。
DFS DESIGN
NFS客户机和服务器问题
NFS每个请求都可以独立地被处理,服务器 不必用状态控制,不必为NFS用户保持状态 信息。 无状态控制服务器的主要优点在于它简化了 失效修复过程。 无状态使得正确地存储比较困难。客户缓存 了文件服务器一无所知。
DFS DESIGN
分布式文件系统设计
DFS DESIGN
共享性
UNIX文件系统具有单一现场的语意,文件的 任何细微变化都是立即可见的。 分布式文件系统中,一般采用打开/关闭规则。 文件打开时,对其更新才是可见的,文件关 闭时,改变的信息才会被传播。
DFS DESIGN
共享性
必须考虑并发写共享所设计到的一致性问题 有客户机缓存时,实现写共享特别困难(设计 中不考虑缓存一致性)。
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
查询文件副本信息
函数声明:int QueryRepInfo(const char * filename, unsigned long * list, int count) 返回值:成功返回副本数量,如果该文件没有副本,副本数量 被认为是1,失败返回0; 参数: filename ,被查询的文件路径; list ,用于返回副本位 置信息(IP地址)的缓冲区;count,指明list的大小,单位 是unsigned long; 本函数的功能是查询文件的副本位置信息,如果被查询的文件 存在副本,则在list中返回所有存放副本的节点的IP地址, 文件主本所在节点返回在list指向的第一个位置。
DFS DESIGN
同步更新
修改拥有副本的文件时,同步修改系统中所有的相 关副本。
DFS DESIGN
网络锁
提供面向对象的锁机制,实现分布式同步互斥。
DFS DESIGN
系统日志
记录系统操作,作为一致性检查的依据;记录系统 调试信息。
DFS DESIGN
节点管理器
维护系统节点信息,即系统由哪些节点构成,它们 的名字和网络地址,这些节点何时加入、何时退出。
添加文件副本
函数声明: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
删除共享
函数声明:int RemoveShareSection(const char * sharename) 返回值:成功返回0,失败返回错误号(小于0); 参数:sharename,待删除的共享名; 本函数的功能是将/xfs/sharename从xfs目录中删除。
DFS DESIGN
DFS DESIGN
软件结构
系统日志 :记录系统操作;记录系统调试信息; 节点管理器 :维护系统节点信息;提供名字服务; 分布式通信 :分布式消息通信
DFS DESIGN
模块外部设计
功能 接口设计
• 外部接口 • 内部接口
DFS DESIGN
功能-XFS操作集
本模块的功能是提供标准的Linux文件系统操作集。 Linux的文件系统通常要提供4个操作集, 文件操作集(file operations) 文件inode操作集(file inode operations) 目录inode操作集(dir inode operations) 超级块操作集(super operations)。 XFS将针对XFS文件系统的功能,实现这些操作集 中的相关函数。
DFS DESIGN
文件和目录inode操作集
struct inode_operations { struct file_operations * default_file_ops; int (*create) (struct inode *,struct dentry *,int); struct dentry * (*lookup) (struct inode *,struct dentry *); int (*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *); int (*symlink) (struct inode *,struct dentry *,const char *); int (*mkdir) (struct inode *,struct dentry *,int); int (*rmdir) (struct inode *,struct dentry *); int (*mknod) (struct inode *,struct dentry *,int,int); …… };
DFS DESIGN
NFS
根据抽象额RPC定义NFS,同时用自由可用 的RPC包实现了NFS。 NFS包括一个叫XDR的外部数据定义语言, 它可在由异构的硬件和软件组成的计算机系 统中传送结构信息。
DFS DESIGN
NFS实现机制
每个VFS的文件操作作为底层文件系统的一 个过程调用来实现。在NFS中,该过程调用 是作为文件系统用户到NFS服务器的一个 RPC而实现。 服务器处理请求时,要执行本地文件系统的 调用,并将状态、数据和操作返回给提出请 求的客户机。
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 *); };
分布式文件系统
概念 基本问题 实用的分布式文件系统例--nfs 分布式文件系统中的关键技术
DFS DESIGN
概念
把分散在整个网络中的文件系统资源以统一 的视点呈现给用户
DFS DESIGN
分布式文件系统中的基本问题
DFS(distribution file system)是建立在C/S 技术之上的;一个或多个文件服务器与客户 机协同操作。由于控制分布,一些集中式系 统中容易解决的问题变得复杂,如共享,数 据安全,透明性等。
DFS DESIGN
软件描述
本文所描述的分布式文件系统(内部研发代 号XFS)是开发的基于Linux的分布式文件系 统,它基于局域网连接,主要用于分布式服 务器之间共享数据。为满足分布式服务器对 可靠性的特殊需求,本系统具有数据冗余能 力,并有较高的可靠性 。
DFS DESIGN
软件结构
DFS DESIGN
DFS DESIGN
分布式通信
分布式消息通信机制。 实现可靠的UDP及组播机制。
DFS DESIGN
外部接口
DFS DESIGN
添加共享
函数声明: int AddShareSection(const char * sharename, const char * sharepath) 返回值:成功返回0,失败返回错误号(小于0); 参数:sharename ,添加的共享名; sharepath ,本节点输出 的共享目录; 本函数的功能是将本地的 sharepath 映射到 /xfs/sharename 下。
DFS DESIGN
Leabharlann Baidu
删除文件副本
函数声明:int RemoveRep(const char * filename, const char * host) int RemoveRep2(const char * filename, unsigned long addr) 返回值:成功返回0,失败返回错误号(小于0); 参数:filename,主本文件路径;host,删除副本的节点名字; addr,删除副本的节点的IP地址; 本函数的功能是在host上删除文件filename的副本。注意,文 件主本不能通过本函数删除。