CurveFS Copyset与FS对应关系copyset与fs对应关系© XXX Page 2 of 19 版本 时间 修改者 修改内容 1.0 2021/7/23 陈威 初稿 1.1 2021/8/4 陈威 根据评审意见修改 1.2 2021/8/9 陈威 增加详细设计 1、背景 2、chubaofs的元数据管理 2.1、meta partition的创建 2.2、meta partition的管理 2.3、meta partition copyset fs共用吗? 3.3 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 curve块存储的topo信息由PhysicalPool、LogicalPool、Zone、Server、ChunkServer、CopySetInfo组成。curvefs可以照搬curve块存储的topo设计,只是保存的内容从数据变成了元数据。 curvefs的topo信息设计可以由PhysicalPool、LogicalPool、Zone、Server、MetaServer、CopySetInfo组成。 curv0 码力 | 19 页 | 383.29 KB | 6 月前3
curvefs client删除文件和目录功能设计遗留问题 工作量评估 背景 目前curvefs client版本对删除unlink和rmdir的设计只有简单的删除inode和dentry结构,遗留了nlink和lookup count相关的内容还未实现,是不完备的。本文首先调研moosefs,chubaofs等分布式系统,参考并设计解决上述遗留问题。 当前删除接口代码如下:© XXX Page 3 of 15 CURVEFS_ERROR ret; } 存在两个问题: 一是删除时nlink字段未考虑: 文件的nlink用于实现hard link。 hard link使用nlink字段表示文件的link的引用计数,第一次创建文件是nlink字段为1。每创建一个新的指向该文件的hard link时,nlink字段+1, 每删除一个hard link或指向的原文件时,nlink字段-1。© XXX Page 4 of 15 当nlink 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 目录不支持硬链接。 二是删除时lookup count未考虑: lookup count 指的是文件的访问计数。当文件/目录被打开时, ,该文件/目录仍然可以被打开的进程访问,不会造成崩溃或报错,我们的curvefs也需要实现 即使文件/目录已经被另一个进程删除了(nlink==0) 这样的语义。 这部分内容在fuse的相关接口中也有描述如下:0 码力 | 15 页 | 325.42 KB | 6 月前3
Open Flags 调研*pathname, const struct open_how *how, size_t size); open系统调用会打开pathname指定的文件(如果不存在,如果携带O_CREAT flag则会创建),返回一个文件描述符fd(该fd是进程打开文件描述符表的index),在后续系统调用(read(2)、write(2)、lseek(2)、fcntl(2) etc.)中指向这个打开的文件。打开的文件描述符记录中保存着文件的offset V的早期版本引入的,后改进为O_NONBLOCK) flags中必须access mode:O_RDONLY, O_WRONLY, O_RDWR其中之一;© XXX Page 4 of 23 文件创建标志只影响打开操作, 文件状态标志影响后面的读写操作 file creation flags: O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW O_NONBLOCK, O_PATH flags的含义 O_RDONLY: 只读 : 只写 O_WRONLY : 读写 O_RDWR O_CREAT: 当pathname对应的文件不存在时则创建它,文件uid为进程uid,gid为进程gid或父目录gid(取决于SGID是否置位);当flags中出现O_CREAT 或 O_TMPFILE时,mode参数必须提供,否则会使用栈中随机字节填充;0 码力 | 23 页 | 524.47 KB | 6 月前3
CurveFs 用户权限系统调研一、Curvefs测试 代码:https://github.com/cw123/curve/tree/fs_s3_joint_debugging 环境:test2 1. 启动curvefs 手动创建curve卷,/etc/curve/client.conf中配置卷所在集群信息。 启动服务&client挂载卷:bash startfs.sh start volume (挂载目录为/tmp/fsmount)© neteaseusers 0 Jul 29 10:37 file2 SGID: SGID可设置在可执行文件或目录的属组权限位的执行权限上。如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录创建的新文件和目录的所属组均为其父目录的所属组,而并非进 程发起者的主要组。SGID权限的显示位置在文件的属组权限位上的执行权限上;如果属组本来就有执行权限。则显示为"s",否则,就显示为“S”; # file1 rm: cannot remove 'file1': Operation not permitted 文件默认权限umask 为什么默认创建的目录权限为755,文件为644? 在linux系统中, ,这些新的文件或目录都会有默认的访问权限 创建一个新的文件或者目录时 umask命令与文件和目录的默认访问权限有关,umask值则表明了需要从默认权限中去掉哪些权限来成 为最终的默认权限值。0 码力 | 33 页 | 732.13 KB | 6 月前3
CurveFS Client 概要设计& setattr access rename symlink & readlink link flush & fsync 其他 功能分析 模块划分 接口设计 Cache设计 时间 作者 内容 2021-04-27 许超杰 初稿 背景 CurveFS初步设计见 , 目前需细化Client端设计 CurveFS方案设计(总体设计,只实现了部分) O_WRONLY 只写打开 O_RDWR 读写打开 以上3个必须指定且只能指定一个 O_APPEND 只追加写 O_CREAT 文件不存在时创建 O_EXCL 如果同时指定了O_CREAT,而文件已存在,则会出错,用此测试文件是否存在,如果不存在则创建此文件。 O_TRUNC 如果文件存在,且为只写或只读打开,则将其文件长度截短为0 O_DSYNC sync数据和必要元数据(不影响读取刚写入的数据) parent, const char *name, mode_t mode, dev_t rdev); 这两个函数的功能是类似,都用来创建文件。 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode 预分配一些空间?可先不做 mkdir© XXX Page 7 of 11 void (*mkdir) (fuse_req_t0 码力 | 11 页 | 487.92 KB | 6 月前3
CurveFS方案设计© XXX Page 1 of 14 CurveFS方案设计(总体设计,只实现了部分)© XXX Page 2 of 14 时间 修订人 修订内容 2021-03-23 李小翠 初稿(背景,调研,架构设计) 2021-03-30 李小翠 增加快照部分 2021-04-13 李小翠、陈威 补充元数据数据结构 2021-04-19 李小翠、吴汉卿、许超杰等 补充文件空间分配,讨论与确认 背景 dentry 的 copyset 位置 创建 inode© XXX Page 7 of 14 1. 3. 2. 1. 2. 3. 3. 1. 2. 3. 4. 4. 1. 5. 1. 2. 3. 4. 6. 1. 2. 7. 1. 创建 dentry Mkdir 与 mds mds 交互获取 inode 和 dentry 的 copyset 位置 创建 inode 创建 dentry Lookup (/A/B) 与 mds 交互获取 /(inodeid=1) 所在的 copyset 根据 parent-inode=1 和 name=A 获取对应的 dentry,从而获取到 /A 的 inode 根据 /A 的 inodeId 查询 /A/B 所在的 copyset0 码力 | 14 页 | 619.32 KB | 6 月前3
Curve核心组件之chunkserverService层是对外提供的一些RPC服 务的接口。包含的RPC服务有: • ChunkService。IO相关操作 • CliService。成员变更相关操作 • CopySetService。创建copyset等操 作 • RaftService。Braft内置的service, 完成raft成员之间的选举,日志复制, 安装快照等操作。 ChunkServer架构CopysetNode封装了braft的Node,并 de封装了braft的Node,并 实现了braft的状态机,完成与raft的交 互。详细交互流程后面展开。 CopysetNodeManager负责管理 CopysetNode的创建、初始化、删除等 ChunkServer架构心跳模块有两方面的职责: 1、向MDS节点上报心跳,心跳中包括 ChunkServer本身的一些统计信息 2、解析MDS的心跳response中的raft apply后再执行后面的操作。 ChunkServer架构CloneManager主要负责克隆相关的功 能,内部是一个线程池,主要负责异 步完成克隆chunk的数据补全。关于克 隆相关的内容将会在快照克隆相关介 绍文档中详细介绍。 ChunkServer架构Metric统计模块使用brpc中的bvar计数 器,统计一些IO层面和copyset层面的 一些指标,方便监控和跟踪。0 码力 | 29 页 | 1.61 MB | 6 月前3
Raft在Curve存储中的工程实践要求存储的元数据的大小不超过内存的大小 • raft apply的请求,数据都在内存,直接修改 内存中的数据 • raft snapshot,为避免快照对正常操作的影 响,利用操作系统的内存写时复制技术, fork一个进程创建完整的状态机的内存快照, 后台遍历内存,把内存的数据持久化到本地 磁盘 基于memory的存储引擎 • 存储元数据量不受内存大小限制 • raft apply请求,数据保存在rocksdb,向 打快照只记录chunk文件的列表,不拷贝chunk的内容。从快照+日志加载数据时,下载的chunk文 件不是打快照的状态,而是最新的状态,回放日志时,把数据重写一遍。Curve对RAFT的优化 优化点二: chunkfile pool 问题背景: Chunkserver使用基于ext4实现的本地文件系统,由于写操作存在较大的IO放大,因此在创建chunk 文件时会调用fallocate为文件预 ,但是即便fallocate以后,在写文件未写过的块 时仍需要更改元数据,存在一定的IO放大。 解决思路: 直接使用覆盖写过一遍的文件。由于chunk大小固定,预先生成一批被写过的固定大小文件。创建 chunk文件或快照文件时直接从预分配的文件池中获取进行重命名,删除chunk时再将文件重命名放到 预分配池中,这个预分配池就是chunkfile pool。 进一步优化: 对chunk写0 ->0 码力 | 29 页 | 2.20 MB | 6 月前3
NJSD eBPF 技术文档 - 0924版本GETATTR 返回fstat • READ inode 读取的内容不等从16KB到128KB • 关闭⽂件时会发送FLUSH请求和RELEASE请求 • 场景2 解压压缩包场景 • LOOKUP inode 没有该inode • CREATE创建⽂件句柄并返回fstat + timeout设置 • WRITE 写⼊内容从0~16KB不等 • SETATTR inode 根据U0 码力 | 20 页 | 7.40 MB | 6 月前3
副本如何用CLup管理PolarDBTOP SQL功能http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 Clup管理界面-在Web界面中管理数据库-9- @ PolarDB环境准备创建PolarDB的要求 安装要求 需要有共享盘:盘的大小需要大于等于20GB CLup的高可用需要VIP 操作系统:CentOS7.X 盘要求有路径:/dev/nvmeXnY 机器需求 4台虚拟机器或物理机 1台做CLup管理节点:内存大于2GB 3台做数据库节点:内存需要大于4GB,最好有反亲和性,即能分布在不同的 物理机上以保证高可用性阿里云的环境中创建Polardb的方法 共享盘使用阿里云自带的高性能Nvme盘,注意使用Nvme磁盘对可用 区有要求: • 华东1(杭州)可用区I • 华东2(上海)可用区B • 华北2(北京)可用区K • 华南1(深圳)可用区F。 只有某些规格的虚拟机可以挂载Nvme共享盘: • g7se • c7se • r7se 虚拟机要求是按量付费才可以挂载Nvme共享盘 阿里云的VIP功能目前还在内侧阶段,需要申请其他云环境中使用CLup创建Polardb的情况 天翼云 共享盘:所有虚拟机都 可以挂载 有VIP 机器有反亲和性 华为云 有共享盘 有VIP 机器有反亲和性 移动云 共享盘:所有虚拟机都0 码力 | 34 页 | 3.59 MB | 6 月前3
共 26 条
- 1
- 2
- 3













