curvefs client删除文件和目录功能设计© XXX Page 1 of 15 curvefs client 删除文件和目录功能设计© XXX Page 2 of 15 背景 相关调研 moosefs chubaofs 方案设计思考 1.Trash机制是实现1个(类似chubaofs),还是2个(类似moosefs)? 2. Trash放在哪里? 3. 是否需要做session机制(在metaserver打开),来维护inode的打开情况? 方案设计 Trash机制: Session机制: 遗留问题 工作量评估 背景 目前curvefs client版本对删除unlink和rmdir的设计只有简单的删除inode和dentry结构,遗留了nlink和lookup count相关的内容还未实现,是不完备的。本文首先调研moosefs,chubaofs等分布式系统,参考并设计解决上述遗留问题。 当前删除接口代码如下:© XXX 正的执行删除inode。 目录的nlink字段与文件的nlink字段不同, , 并且在目录下, , 删除目录nlink相应的减1。 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 目录不支持硬链接。 二是删除时lookup count未考虑: lookup count 指的是文件的访问计数。当文件/目录被打开时, ,该文件/目录仍然可以被打开的进程访问,不会0 码力 | 15 页 | 325.42 KB | 6 月前3
CurveFS方案设计2021-04-13 李小翠、陈威 补充元数据数据结构 2021-04-19 李小翠、吴汉卿、许超杰等 补充文件空间分配,讨论与确认 背景 调研 开源fs 性能对比 可行性分析 方案对比 对比结论 架构设计 卷和文件系统 元数据架构 文件系统快照 方案一:文件/目录级别快照 方案二:文件系统快照 关键点 元数据设计 数据结构 索引设计 文件空间管理 开发计划及安排 背景 块存储,向上提供块设备服务,CurveFS会基于此实现。第一阶段的目标是实现 满足数据库场景的文件接口。 调研 开源fs 当前对已有的开源分布式文件系统进行了调研,主要包括系统架构,元数据内存结构,元数据持久化,调研文档如下: chubaofs: ChubaoFS© XXX Page 3 of 14 1. 2. 3. moosefs: https://kms.netease 能? 可行性分析 方案对比 根据上述调研和测试结果,我们考虑了三种curvefs的元数据设计方案: CurveFS kv方案设计 curve实现块设备时,元数据不是扁平化的设计,而是采用来有目录层级的 namespace 方式,namespace 已经实现了 fs 元数据管理的雏形,具备了基本的元数据管理功能。(当时为什么要设计为 namespace 的管理形式?留有租户这个概念),直接基于0 码力 | 14 页 | 619.32 KB | 6 月前3
Curve文件系统元数据管理2、其他文件系统的调研总结 3、各内存结构体 4、curve文件系统的元数据内存组织 4.1 inode定义: 4.2 dentry的定义: 4.3 内存组织 5 元数据分片 5.1 分片方式一:inode和dentry都按照parentid分片 5.1.1 场景分析 查找:查找/A/C。 创建:/A/C不在,创建/A/C 删除文件:删除/A/C 删除目录:删除/A rename:rename rename:rename /A/C到/B/E symbolic link: hardlink:生成一个hardlink /B/E,指向文件/A/C list:遍历/A目录 5.1.2 好处 5.1.2 问题 5.2 分片方式二:Inode按照inodeid进行分片,Dentry按照parentid进行分片 rename:rename /A/C到/B/E hardlink:生成一个hardlink /B/E,指向文件/A/C slave协议 overwrite → raft 更适合大文件顺序写 fastcfs 有元数据服务器 inode和dentry放一个结构体。 inode → hashtable(key是ino,全局) dentry → skip list (key是name,每个目录下一个) 计算出来的 binlog,随时间会越来越大 差 DG Master/Slave glusterfs 无中心化服务器0 码力 | 24 页 | 204.67 KB | 6 月前3
CurveFS Client 概要设计id和name从denty缓存中找到对应的denty结构; 如果dentry缓存中不存在对应的inode,则从mds根据parent inode id获取parent inode 所在copyset,metaserver ip等信息 ,然后从metaserver获取denty(这里有两种方式,一种是只获取当前需要的 denty,一种是list整个目录的denty,这个需要考虑用哪个接口) 根据找到的denty结构,获取inodeid,设置 从缓存中查找到对应inode结构; 如果inode缓存中不存在对应的inode,则从mds获取inode所在copyset,metaserver ip等信息,然后从metaserver获取inode结构,缓存之; 判断inode结构中,对应请求[off, size]位置的空间是否有分配:如果未分配或只有部分分配空间,则调用空间分配器分配空间,并根据空间分配器返回结果,修改inode结构(包括file length); 要修改为read merge write,即读出未对齐缺少的部分,然后整个[offset,len] 调用curve client写); 修改inode结构,如果上述区域存在先前未写过的区域,则需要去掉unwritten,具体方式根据inode结构而定;inode修改需要持久化到底层并修改本地cache;© XXX Page 6 of 11 read void (*read) (fuse_req_t0 码力 | 11 页 | 487.92 KB | 6 月前3
CurveFS S3本地缓存盘方案© XXX Page 1 of 9 Curvefs-S3 本地写缓存盘方案© XXX Page 2 of 9 背景 方案设计 主要数据结构定义 方案设计思考 POC验证 背景 当前,s3客户端在写底层存储的时候是直接写入远端对象存储,由于写远端时延相对会较高,所以为了提升性能,引入了写本地缓存盘方案。也即要写底层存储时,先把数据写到本地缓存硬盘,然后再把本地缓存 硬盘中的数据异步上传到远端对象存储。 存,那么则尝试先写入本地硬盘写缓存目录。 写本地硬盘缓存目录之前先判断缓存目录容量是否已达到阈值,如果已经达到阈值,那么则直接写入到远端对象存储;否则,则写入到本地硬盘写缓存目录中。文件写入本地硬盘写缓存目录后,从本地硬盘读目录© XXX Page 4 of 9 做一个硬链接链接到该文件。 本次io在本地硬盘写入好之后,异步上传模块会适时把本地硬盘写缓存目录中的文件上传到远端对象存储集群,上 传成功后,删除本地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬盘缓存目录容量情况,如果容量已经达到阈值了,则进行文件的清理工作。 另外,异常管理模块处理客户端挂掉后的文件重新上传问题。 主要数据结构定义 class DiskCacheManagerImpl : public DiskCacheManager{ public: DiskCacheManagerImpl();0 码力 | 9 页 | 150.46 KB | 6 月前3
Open Flags 调研irfd参数没用。如果pathname是相对路径,并且dirfd的值不是AT_FDCWD,则pathname的参照物是相对于dirfd指向的目录,而不是进程的当前工作目录;反之,如 果dirfd的值是AT_FDCWD,pathname则是相对于进程当前工作目录的相对路径,此时等同于open。 open flags flags定义 flags通过宏定义实现,定义见 ,主要包括如下flag fcntl flags的含义 O_RDONLY: 只读 : 只写 O_WRONLY : 读写 O_RDWR O_CREAT: 当pathname对应的文件不存在时则创建它,文件uid为进程uid,gid为进程gid或父目录gid(取决于SGID是否置位);当flags中出现O_CREAT 或 O_TMPFILE时,mode参数必须提供,否则会使用栈中随机字节填充;通常在没有ACL的情况下,有效的mode是经过与进程mask作用后的结果(mode 用户空间直接将数据传递到文件或磁盘设备。 O_DIRECT : 使得32位操作系统对大文件支持(_FILE_OFFSET_BITS=64)。 O_LARGEFILE : 以目录形式打开,如果pathname不是一个目录则会打开失败。 O_DIRECTORY : 。 O_NOFOLLOW 如果pathname是一个符号链接,则会打开失败(ELOOP) : 不更新Inode中的last access0 码力 | 23 页 | 524.47 KB | 6 月前3
CurveFS Copyset与FS对应关系copyset个数是否可以动态调整? 4、curvefs的topo信息 5、curvefs mds和metaserver的心跳 6、详细设计 6.1 创建fs 6.2、挂载fs 6.3、创建文件/目录 6.4、open流程 6.5、读写流程 6.6、topology 7、工作评估 7.1 client端 7.2 mds端 7.3 metaserver端 metaserver 子模块拆分 8、inode和dentry的内存估算 是拿着inodeid查询,dentry是拿着parent的inode id去查询。© XXX Page 6 of 19 一个fs的meta partition使用第一个叫做MetaWrapper的结构体组织起来© XXX Page 7 of 19 type MetaWrapper struct { sync.RWMutex cluster string localIP hubaofs的方案,那么copyset就会一直处于一个不均衡的状态中。如果copyset是可readwrite状态,新创建的 文件和目录,会导致copyset管理的元数据越来越多;如果copyset管理的Inode分配完了,转为readonly状态,随着文件和目录的删除,copyset管理的元数据会越来越少。类chubaofs方案的均衡问题如何解决? CopySetScheduler: cop0 码力 | 19 页 | 383.29 KB | 6 月前3
CurveFs 用户权限系统调研XXX Page 1 of 33 CurveFs 用户权限系统调研(已实现)© XXX Page 2 of 33 一、Curvefs测试 1. 启动curvefs 问题1:root用户无法访问挂载目录 测试 allow_root 测试allow_other 参考文献 问题2:本地文件系统挂载默认是共享的? 问题3:文件系统访问控制是在哪一层实现的? 二、文件系统权限管理 文件类型 文件权限 启动curvefs 手动创建curve卷,/etc/curve/client.conf中配置卷所在集群信息。 启动服务&client挂载卷:bash startfs.sh start volume (挂载目录为/tmp/fsmount)© XXX Page 3 of 33 # wanghai01@pubbeta1-nostest2:~/curvefs/curve$ ps -ef | grep curvefs conf=./curvefs/conf/curvefs_client.conf /tmp/fsmount 问题1:root用户无法访问挂载目录 测试发现client mount进程是哪个用户启动的就只有该用户(filesystem owner)可以访问该目录,即使挂载点mode是777。 # filesystem owner wanghai01@pubbeta1-nostest2:/tmp$ ls0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve文件系统元数据持久化方案设计参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化© XXX Page 3 of 12 Raft Log +------+------------+-----+----------------+---------+----------+ leveldb 实例(leveldb 中的 wal 和 SST 文件都可以写到指定的目录) redis 改造 vs 自己实现? 结论:从目前元数据持久化的需要来看,更倾向于自己实现,理由如下: redis 目前不支持单独持久化 redis 中的某个 DB (一个 redis 实例可包含多个 DB) 或数据结构,这对于在要使用 multiraft 的场景下,每个 raft 实例需要独立的快照并不合适 如果自己实现,只是一个简单的 sava/load 逻辑,比较清晰 redis 中有许多数据结构可供使用,如 (哈希、列表、set、sort_set),但对于目前的需求来说,我们内存数据结构使用的是 C++ STL 中的哈希表(unsorted_map),之后有可能根据需求换成 B+ 树或跳表,但是 redis 中的这些数据结构我们是不需要的 另外,如果 C++ 中的哈希表在后期使用中发现性能不达标的话(特别是在0 码力 | 12 页 | 384.47 KB | 6 月前3
Curve核心组件之chunkserver等CS1上的copyset数量恢复到和其它节点相差不大时,集群回 到均衡状态,迁移结束ChunkServer核心模块-DataStore ChunkServer的目录结构: • 每个copyset一个目录,后面三个目录由braft管理,data目录由DataStore管理 • Curve中的Chunk全部来自Chunkfilepool,是在系统初始化的时候预创建好并覆盖写过一遍的一些chunk,减少IO放大CURVE基本架构0 码力 | 29 页 | 1.61 MB | 6 月前3
共 22 条
- 1
- 2
- 3













