 CurveFS方案设计namespace 的管理形式?留有租户这个概念),直接基于 namespace 开发: a. 功能 软/硬链接:目前是都不支持的。软链接可以通过标识文件类型解决;由于 prefix + parentid + filename 作为 key , filename 直接和 fileInfo 关联,硬链接无法支持 b. 性能 list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 Rename(/A → /B) 获取 /A 所在的 copyset /A 对应的dentry新增计数 创建 /B 节点 删除 /A 节点 Symlink 创建新的inode节点,dentry中标明符号链接 实际数据保存链接到的路径 Link 创建新的dentry, 指向同一个inode 文件系统快照 方案一:文件/目录级别快照 快照是文件系统或卷的只读副本,快照要求可以即时创建。类似 moosefs,curvefs parentID+Filename → FileInfo 表示一个文件)和分级元数据(ParentID+Filename → Inode; Inode → FileInfo)最大的区别在硬链接的实现上。扁平化元数据无法做到共用同一个数据区域,对于硬链接的实现很不友好。 根据之前的调研,分级元数据可以分为两种实现方式。一是类似 fastcfs 把 inode 和 dentry 合并为一个 dentry 的结构,dentry0 码力 | 14 页 | 619.32 KB | 6 月前3 CurveFS方案设计namespace 的管理形式?留有租户这个概念),直接基于 namespace 开发: a. 功能 软/硬链接:目前是都不支持的。软链接可以通过标识文件类型解决;由于 prefix + parentid + filename 作为 key , filename 直接和 fileInfo 关联,硬链接无法支持 b. 性能 list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 Rename(/A → /B) 获取 /A 所在的 copyset /A 对应的dentry新增计数 创建 /B 节点 删除 /A 节点 Symlink 创建新的inode节点,dentry中标明符号链接 实际数据保存链接到的路径 Link 创建新的dentry, 指向同一个inode 文件系统快照 方案一:文件/目录级别快照 快照是文件系统或卷的只读副本,快照要求可以即时创建。类似 moosefs,curvefs parentID+Filename → FileInfo 表示一个文件)和分级元数据(ParentID+Filename → Inode; Inode → FileInfo)最大的区别在硬链接的实现上。扁平化元数据无法做到共用同一个数据区域,对于硬链接的实现很不友好。 根据之前的调研,分级元数据可以分为两种实现方式。一是类似 fastcfs 把 inode 和 dentry 合并为一个 dentry 的结构,dentry0 码力 | 14 页 | 619.32 KB | 6 月前3
 Open Flags 调研TS=64)。 O_LARGEFILE : 以目录形式打开,如果pathname不是一个目录则会打开失败。 O_DIRECTORY : 。 O_NOFOLLOW 如果pathname是一个符号链接,则会打开失败(ELOOP) : 不更新Inode中的last access time(进程uid=文件uid或者进程在它的user namespace有CAP_FOWNER, 而文件的uid在这个namespace中有一个映射)。 标志位的话系统会忽略大部分其他的标志位(除了O_CLOEXEC, O_DIRECTORY, O_NOFOLLOW)。特别是如果配合使用 O_NOFOLLOW,那么遇到符号链接的时候将会返回这个符号链接本身的文件描述符,而非符号链接所指的对象。 : 用于生产临时的无名的普通文件,pathname指定一个目录。 O_TMPFILE libfuse open void(* fuse_lowleve fs。具体实现后续可以再深入看看。© XXX Page 23 of 23 结论 1,需要实现file_truncate接口来支持O_TRUNC flag(优先级高)。 2,待curvefs支持链接和支持对inode中atime、ctime、mtime的修改后,对O_NOFOLLOW和O_NOATIME进行测试(优先级中)。 3,目前I/O模式类flag(O_SYNC, O_DSYNC, O0 码力 | 23 页 | 524.47 KB | 6 月前3 Open Flags 调研TS=64)。 O_LARGEFILE : 以目录形式打开,如果pathname不是一个目录则会打开失败。 O_DIRECTORY : 。 O_NOFOLLOW 如果pathname是一个符号链接,则会打开失败(ELOOP) : 不更新Inode中的last access time(进程uid=文件uid或者进程在它的user namespace有CAP_FOWNER, 而文件的uid在这个namespace中有一个映射)。 标志位的话系统会忽略大部分其他的标志位(除了O_CLOEXEC, O_DIRECTORY, O_NOFOLLOW)。特别是如果配合使用 O_NOFOLLOW,那么遇到符号链接的时候将会返回这个符号链接本身的文件描述符,而非符号链接所指的对象。 : 用于生产临时的无名的普通文件,pathname指定一个目录。 O_TMPFILE libfuse open void(* fuse_lowleve fs。具体实现后续可以再深入看看。© XXX Page 23 of 23 结论 1,需要实现file_truncate接口来支持O_TRUNC flag(优先级高)。 2,待curvefs支持链接和支持对inode中atime、ctime、mtime的修改后,对O_NOFOLLOW和O_NOATIME进行测试(优先级中)。 3,目前I/O模式类flag(O_SYNC, O_DSYNC, O0 码力 | 23 页 | 524.47 KB | 6 月前3
 Curve文件系统元数据管理还需要额外考虑一下的hard link, symlink,rename的处理。 fastcfs的inode和dentry没有分开,两者在同一个结构体里面。这种方式如何应对硬链接? 看了下fastcfs的实现,在硬链接这里是有问题的。 考虑inode和dentry的内存组织形式,可以考虑hashmap,skiplist,btree等,但是无论选择哪种方式组织,节点都可以抽象成一个Key 这里rename的时候,涉及到inode信息跨节点迁移。需要引入分布式锁,是个难点。 symbolic link: 这个类型的文件和普通文件一样创建删除,区别在于,在inode信息中记录需要链接到的地址。 hardlink:生成一个hardlink /B/E,指向文件/A/C 1、client给server0发送请求: parentid 0 + name "A",查询"A"的inodeid为100 4、client给server2发送请求: parentid 200 + name "E",查询不到 生成记录?inode 300,按照原文件/A/B,应该在A的inodeid映射的机器上;按照硬链接/B/E,应该在B的inodeid映射的机器上。 生成记录 200 + E → 300 5、client给server1发送请求: 修改记录 "C"的inode link++ 这里涉及到增加0 码力 | 24 页 | 204.67 KB | 6 月前3 Curve文件系统元数据管理还需要额外考虑一下的hard link, symlink,rename的处理。 fastcfs的inode和dentry没有分开,两者在同一个结构体里面。这种方式如何应对硬链接? 看了下fastcfs的实现,在硬链接这里是有问题的。 考虑inode和dentry的内存组织形式,可以考虑hashmap,skiplist,btree等,但是无论选择哪种方式组织,节点都可以抽象成一个Key 这里rename的时候,涉及到inode信息跨节点迁移。需要引入分布式锁,是个难点。 symbolic link: 这个类型的文件和普通文件一样创建删除,区别在于,在inode信息中记录需要链接到的地址。 hardlink:生成一个hardlink /B/E,指向文件/A/C 1、client给server0发送请求: parentid 0 + name "A",查询"A"的inodeid为100 4、client给server2发送请求: parentid 200 + name "E",查询不到 生成记录?inode 300,按照原文件/A/B,应该在A的inodeid映射的机器上;按照硬链接/B/E,应该在B的inodeid映射的机器上。 生成记录 200 + E → 300 5、client给server1发送请求: 修改记录 "C"的inode link++ 这里涉及到增加0 码力 | 24 页 | 204.67 KB | 6 月前3
 CurveFS S3本地缓存盘方案写本地硬盘缓存目录之前先判断缓存目录容量是否已达到阈值,如果已经达到阈值,那么则直接写入到远端对象存储;否则,则写入到本地硬盘写缓存目录中。文件写入本地硬盘写缓存目录后,从本地硬盘读目录© XXX Page 4 of 9 做一个硬链接链接到该文件。 本次io在本地硬盘写入好之后,异步上传模块会适时把本地硬盘写缓存目录中的文件上传到远端对象存储集群,上传成功后,删除本地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬 了)。 本地缓存盘的文件内容表示 本地缓存盘存放的文件即是存储到对象存储中的对象。 写缓存如何作为读缓存利用 除了写缓存目录,另外引入读缓存目录;当写缓存目录中有新文件加入时,则对该文件做硬链接到读缓存目录。 这样,写缓存目录中的文件上传完之后就可以直接删除了,那么该文件的读缓存还是存在的。 缓存盘空间管理 当缓存文件内容达到阈值时,停止向本地缓存盘写入。 同时,缓存清理模块会定时0 码力 | 9 页 | 150.46 KB | 6 月前3 CurveFS S3本地缓存盘方案写本地硬盘缓存目录之前先判断缓存目录容量是否已达到阈值,如果已经达到阈值,那么则直接写入到远端对象存储;否则,则写入到本地硬盘写缓存目录中。文件写入本地硬盘写缓存目录后,从本地硬盘读目录© XXX Page 4 of 9 做一个硬链接链接到该文件。 本次io在本地硬盘写入好之后,异步上传模块会适时把本地硬盘写缓存目录中的文件上传到远端对象存储集群,上传成功后,删除本地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬 了)。 本地缓存盘的文件内容表示 本地缓存盘存放的文件即是存储到对象存储中的对象。 写缓存如何作为读缓存利用 除了写缓存目录,另外引入读缓存目录;当写缓存目录中有新文件加入时,则对该文件做硬链接到读缓存目录。 这样,写缓存目录中的文件上传完之后就可以直接删除了,那么该文件的读缓存还是存在的。 缓存盘空间管理 当缓存文件内容达到阈值时,停止向本地缓存盘写入。 同时,缓存清理模块会定时0 码力 | 9 页 | 150.46 KB | 6 月前3
 Curve核心组件之Client - 网易数帆快照克隆服务器CURVE基本架构 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化 QEMU、Curve-NBD:上层应用  通过链接curve-client使用curve提供的服务  FileManager:提供接口,记录已挂载卷  FileInstance:对应一个已挂载的卷  LeaseExecutor:负责定期与MDS通信,获取卷的元数据信息 新版本Client/NEBD性能优化NEBD 整体介绍 热升级之前,QEMU是直接链接curve-client, 所以client版本需要升级时,需要对QEMU进 程进行重启。NEBD 整体介绍 在QEMU和Curve Client中间加入热升级模块,避 免直接依赖 热升级模块是CS结构:  NEBD Client(part1):只包含轻量的业务逻辑, 以链接库的形式提供给QEMU使用  NEBD Server(part2):将NEBD0 码力 | 27 页 | 1.57 MB | 6 月前3 Curve核心组件之Client - 网易数帆快照克隆服务器CURVE基本架构 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化 QEMU、Curve-NBD:上层应用  通过链接curve-client使用curve提供的服务  FileManager:提供接口,记录已挂载卷  FileInstance:对应一个已挂载的卷  LeaseExecutor:负责定期与MDS通信,获取卷的元数据信息 新版本Client/NEBD性能优化NEBD 整体介绍 热升级之前,QEMU是直接链接curve-client, 所以client版本需要升级时,需要对QEMU进 程进行重启。NEBD 整体介绍 在QEMU和Curve Client中间加入热升级模块,避 免直接依赖 热升级模块是CS结构:  NEBD Client(part1):只包含轻量的业务逻辑, 以链接库的形式提供给QEMU使用  NEBD Server(part2):将NEBD0 码力 | 27 页 | 1.57 MB | 6 月前3
 CurveFS Client 概要设计eadlink向上返回link contents。 软链接相关接口目前可先不实现。 link void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent, const char *newname); 这个涉及到下文中”重要问题讨论“,目前暂时无法设计 硬链接相关目前可先不实现。© XXX Page 9 of 110 码力 | 11 页 | 487.92 KB | 6 月前3 CurveFS Client 概要设计eadlink向上返回link contents。 软链接相关接口目前可先不实现。 link void (*link) (fuse_req_t req, fuse_ino_t ino, fuse_ino_t newparent, const char *newname); 这个涉及到下文中”重要问题讨论“,目前暂时无法设计 硬链接相关目前可先不实现。© XXX Page 9 of 110 码力 | 11 页 | 487.92 KB | 6 月前3
 curvefs client删除文件和目录功能设计目录的nlink字段与文件的nlink字段不同, , 并且在目录下, , 删除目录nlink相应的减1。 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 目录不支持硬链接。 二是删除时lookup count未考虑: lookup count 指的是文件的访问计数。当文件/目录被打开时, ,该文件/目录仍然可以被打开的进程访问,不会造成崩溃或报错,我们的curvefs也需要实现 是nlink-1,那么在执行完第一步之后,client如果崩溃或者掉电,或者是发送nlink-1的rpc失败(可以重试,但重试仍有可能失败), 这种情况下,就会存在nlink未被减1的情况,当所有硬链接都被删除后,就会出现孤儿inode。 moosefs由于只有一个mds节点看,所以不存在这个问题。 chubaofs的解决方案是: 在Delete_ll(api.go) 函数中,在delete0 码力 | 15 页 | 325.42 KB | 6 月前3 curvefs client删除文件和目录功能设计目录的nlink字段与文件的nlink字段不同, , 并且在目录下, , 删除目录nlink相应的减1。 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 目录不支持硬链接。 二是删除时lookup count未考虑: lookup count 指的是文件的访问计数。当文件/目录被打开时, ,该文件/目录仍然可以被打开的进程访问,不会造成崩溃或报错,我们的curvefs也需要实现 是nlink-1,那么在执行完第一步之后,client如果崩溃或者掉电,或者是发送nlink-1的rpc失败(可以重试,但重试仍有可能失败), 这种情况下,就会存在nlink未被减1的情况,当所有硬链接都被删除后,就会出现孤儿inode。 moosefs由于只有一个mds节点看,所以不存在这个问题。 chubaofs的解决方案是: 在Delete_ll(api.go) 函数中,在delete0 码力 | 15 页 | 325.42 KB | 6 月前3
 CurveFS Copyset与FS对应关系要去metaserver上去进行分配。 这里需要重新考虑curvefs的copyset和fs的元数据分片的对应关系。© XXX Page 3 of 19 2、chubaofs的元数据管理 chubaofs(补充链接)的元数据也是采用的raft的方式进行管理,可以借鉴一下chubaofs的元数据的分片策略。 通过分析chubaofs的源代码。chubaofs的用volume管理一个文件系统,每个volume有若干meta0 码力 | 19 页 | 383.29 KB | 6 月前3 CurveFS Copyset与FS对应关系要去metaserver上去进行分配。 这里需要重新考虑curvefs的copyset和fs的元数据分片的对应关系。© XXX Page 3 of 19 2、chubaofs的元数据管理 chubaofs(补充链接)的元数据也是采用的raft的方式进行管理,可以借鉴一下chubaofs的元数据的分片策略。 通过分析chubaofs的源代码。chubaofs的用volume管理一个文件系统,每个volume有若干meta0 码力 | 19 页 | 383.29 KB | 6 月前3
 CurveFs 用户权限系统调研1 wanghai01 neteaseusers 4 Jul 16 10:41 softlink -> file 文件类型 文件类型标识 文件类型 - 普通文件 d 目录文件 l 符号链接 s 套接字(伪文件) b 块设备(伪文件) c 字符设备(伪文件) p 管道(伪文件) 文件权限 文件权限分为三段:分别对应文件“属主权限”、“属组权限”、“其他用户权限” 权限标识0 码力 | 33 页 | 732.13 KB | 6 月前3 CurveFs 用户权限系统调研1 wanghai01 neteaseusers 4 Jul 16 10:41 softlink -> file 文件类型 文件类型标识 文件类型 - 普通文件 d 目录文件 l 符号链接 s 套接字(伪文件) b 块设备(伪文件) c 字符设备(伪文件) p 管道(伪文件) 文件权限 文件权限分为三段:分别对应文件“属主权限”、“属组权限”、“其他用户权限” 权限标识0 码力 | 33 页 | 732.13 KB | 6 月前3
共 9 条
- 1













