CurveFS Copyset与FS对应关系陈威 初稿 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和inode以及dentry的对应关系? 3、curvefs的copyset和fs的对应关系 3.1 如何获取inodeid 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 ry信息。 创建一个文件系统时,如何初始化meta partition? master\cluster.go, chubaofs的文件系统使用volume的来表示,在创建一个文件系统的时候,会创建3个meta partition和10个data partition。chubaofs的data partition的功能我们使用curve块设备替换。meta partition的创建,以及meta0 码力 | 19 页 | 383.29 KB | 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
CurveFS Client 概要设计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_t req, fuse_ino_t parent, const char *name, mode_t mode); 根据parent inode id 和name,向mds查询创建dentry和inode的位置,去meta server创建dentry和inode forget void (*forget) (fuse_req_t req, fuse_ino_t ino, uint64_t nlookup);0 码力 | 11 页 | 487.92 KB | 6 月前3
CurveFS方案设计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 所在的 copyset 所在的 copyset /A 对应的dentry新增计数 创建 /B 节点 删除 /A 节点 Symlink 创建新的inode节点,dentry中标明符号链接 实际数据保存链接到的路径 Link 创建新的dentry, 指向同一个inode 文件系统快照 方案一:文件/目录级别快照 快照是文件系统或卷的只读副本,快照要求可以即时创建。类似 moosefs,curvefs 可以计划支持目0 码力 | 14 页 | 619.32 KB | 6 月前3
Curve核心组件之snapshotclone基于brpc提供restful API的对外http接口 HttpService: • Serivce层面区分上层请求为同步接口调用,还是异步接口调用, 同步接口调用直接调用Core层接口实现功能,异步接口创建Task, 并交由TaskManager调度。 SnapshotService & CloneService: • 任务管理层负责调度SnapshotTask和CloneTask,并向上提供如 负责管理快照和克隆源卷的引用计数。 SnapshotRef & CloneRef:快照总体流程 • 1.用户发起快照,生成快照任务,并持久化到 etcd,开始执行快照任务。 • 2.在curve中创建内部快照,并返回快照信息, 然后将快照信息更新到etcd。此时,即返回用 户快照成功,可以进行读写。 • 3.向mds查询快照的元数据,转储快照元数据 块metaObject。 • 4.根据快照元数据信息,转储快照数据块 Snap Task etcd mds client 3.获取快照元数据 datastore metastore http service clone Task user 快照元数据 2.创建内部快照 5.删除内部快照 快照数据 1.发起快照 SnapshotCloneServer 6.删除内部快照数据快照的元数据和数据组织 字段 类型 说明 uuid string 快照唯一Id0 码力 | 23 页 | 1.32 MB | 6 月前3
BRPC与UCX集成指南BRPC SERVER8 BRPC client9 BRPC EndPoint EndPoint是一个代表通讯地址的数据结构, 是一个C++类。 字段: ip,port ●在Socket创建时需要提供EndPoint ●Socket::Connect时需要Remote EndPoint ●Accept的Socket可以获得Remote EndPoint10 BRPC Socket对象 ,要么返回已经存在的Socket对象(引用计数加一),要么创建一 个新的12 BRPC EventDispatcher ●是socket事件分发的中心 ●使用epoll和边沿触发 ●提供监视一个fd是否可读写,并调用对应socket对象的成员函数1314 Socket 输入事件处理15 Socket options ●是创建socket的参数 ●主要成员: –fd 是socket文件句柄 (Socket*) ●可读事件的回调函数16 Server创建Socket Listener 把系统调用创建的listen socket fd传给Socket::Create,获得一个Socket对象17 Socket Listener::OnNewConnections Listener 获得一个socket fd后,创建通讯Socket。 SocketOptions关键字段: fd0 码力 | 66 页 | 16.29 MB | 6 月前3
Curve文件系统元数据管理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 /A/C到/B/E symbolic link: hardlink:生成一个hardlink /B/E,指向文件/A/C 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 4、client给server1发送请求:inode 300,查询"C"的inode信息。 创建:/A/C不在,创建/A/C 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询不到 4、client给server1发送请求:分配inodeid 300,创建文件C的inode。 生成记录300→ inode C 生成记录100 + C → 300 删除文件:删除/A/C 1、client给server0发送请求:parentid 0 + name0 码力 | 24 页 | 204.67 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 请求进行并发控制,对上层的读写请 求安照chunk粒度进行Hash,使得不同 chunk的请求可以并发执行。 ChunkServer架构DataStore是对chunk落盘逻辑的封装。 包含chunkfile的创建、删除,以及实际 对chunk的读写,chunk基本cow的快照, 克隆chunk的管理等等。 ChunkServer架构LocalFileSystermAdaptor是对底层文件 系统的一层抽象,目前适配封装了ext40 码力 | 29 页 | 1.61 MB | 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删除文件和目录功能设计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字段减到0时,才真正的执行删除inode。 目录的nlink字段与文件的nlink字段不同, , 并且在目录下, , 删除目录nlink相应的减1。 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 目录不支持硬链接。 二是删除时lookup count未考虑: lookup count 指的是文件的访问计数。当文件/目录被打开时, ,该文件/目录 lient的当前设计,甚至可以参考moosefs实现一个meta文件系统来管理,更为优雅。 但是缺点是DEL和UNDEL需 ,这部分处理会引入 。(这个过程其实类似于rename) 要在trash下创建和删除dentry 额外的复杂性 由于moose是单文件系统,对于我们实现多文件系统,这里还有两种方案: ,二是每个fs一个trash,并且trash不能放在fs的根目录下,因为存在跟用户的目录重名的问题。0 码力 | 15 页 | 325.42 KB | 6 月前3
共 20 条
- 1
- 2













