CurveFS Copyset与FS对应关系© XXX Page 1 of 19 curvefs 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 2、meta partition的管理 2.3、meta partition和inode以及dentry的对应关系? 3、curvefs的copyset和fs的对应关系 3.1 如何获取inodeid 3.2 copyset fs共用吗? 3.3 copyset个数是否可以动态调整? 4、curvefs的topo信息 5、curvefs mds和metaserver的心跳 6、详细设计 6.1 创建fs B的空间。而curvefs的元数据,并不能一次申请一批在client端,而是每次都需 要去metaserver上去进行分配。 这里需要重新考虑curvefs的copyset和fs的元数据分片的对应关系。© XXX Page 3 of 19 2、chubaofs的元数据管理 chubaofs(补充链接)的元数据也是采用的raft的方式进行管理,可以借鉴一下chubaofs的元数据的分片策略。0 码力 | 19 页 | 383.29 KB | 6 月前3
CurveFs 用户权限系统调研of 33 1. 2. 3. 用户&用户组 用户的角色是通过UID和GID在系统内进行识别的,username 和 group name是便于人工记忆,它们和uid、gid是一一对应的关系。 UID(User Identify) GID(Group Identity) 超级用户: UID:0 默认是root用户,UID为0的用户为超级用户, 虚拟用户: UID:1~499 与真实普通 与真实普通用户区分开来,这类用户最大的特点是安装系统后默认就会存在,且默认情况大多数不能登录系统 普通用户: UID:500~65535 具备系统管理员root的权限的运维人员添加的,权限很小,一般用sudo管理提权 用户和用户组的关系: 一对一、一对多、多对一、多对多 文件系统用户权限管理 对mode的管理 uidgidmode message Inode { required uint64 inodeId = 1; s_inode_size, 然而一个 Inode 不一定用到这么多的大小,节点信息只用到 128 个字节的空间。剩下的部分作为扩展文件属性 (Xattr),扩展属性内部是由一个扩展属性头和若干个扩展属性实体项构成的。© XXX Page 29 of 33 // fs/ext4/xattr.h struct ext4_xattr_header { __le32 h_magic; /* magic number0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve核心组件之mds – 网易数帆本PageFile支持块设备、三副本AppendFile(待开发)支持在线对象存储、AppendECFile(待开发)支持 近线对象存储可以共存。 如上所示LogicalPool与pool为多对一的关系,一个物理pool可以存放各种类型的file。当然由于curve支持 多个pool,可以选择一个logicalPool独享一个pool。 通过结合curve的用户系统,LogicalPool可以 PageFileSegment: segment是给文件分配空间的最小单位 。 • PageFileChunkInfo: chunk是数据分片的最小单元。 segment 和 chunk的关系如下图:NAMESERVER Namespace的文件的目录层次关系如右图。 文件的元数据以KV的方式存储。 • Key:ParentID + “/”+ BaseName; • Value:自身的文件ID。 这种方式可以很好地平衡几个需求: ySet 可以理解为一组复制组,这组复制组的成员关系完全一样。CopySet的概念在文献「Copysets: Reducing the Frequency of Data Loss in Cloud Storage」提出。 在 Curve 系统引入 CopySet 有几个目的: 1. 减少元数据量:如果为每个Chunk去保存复制组成员关系,需要至少 ChunkID+3×NodeID=200 码力 | 23 页 | 1.74 MB | 6 月前3
Curve核心组件之Client - 网易数帆 元数据获取及缓存 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 复制组所在的chunkserver列表 复制组的leader信息 Failover支持 MDS:只有主MDS才会监听端口 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 off: 8M len: 子请求由哪个chunkserver处理,依赖以 下信息: 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 复制组所在的chunkserver列表 复制组的leader信息CLIENT IO流程 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 由MDS分配并持久化,client拆分用户请 求时会获取并进行缓存 为了减少元数据量,MDS一次会连续分配 1G范围内的映射关系,称为SegmentCLIENT IO流程 复制组所在的chunkserver列表 chunkserver心跳定期上报给MDS 通过MDSClient向MDS获取 复制组的leader信息 复制组之间通过raft维护 通过CliClient向Chunkserver获取 这两种信息client也会进行缓存0 码力 | 27 页 | 1.57 MB | 6 月前3
CurveFS方案设计扩展性/可用性/可靠性 依赖于第三方kv存储,目前是etcd CurveFS 单机内存元数据设计 类似 fastcfs 和 moosefs 的元数据设计方式,采用通用的 dentry,inode 两层映射关系,所有的元数据都缓存在内存中,持久化在 binlog 文件中,binlog采用定期dump的方式删除。基于这种方式的开发: a. 性能 加载:数据量较大的情况下,元数据节点启动较慢;但是元数据使用 在内存中也缓存了全部元数据信息 master-slave 多副本数据 CurveFS 分布式元数据设计 类似 chubaofs 的元数据设计方式,同样是采用 dentry,inode 两层映射关系,所有的元数据都缓存在内存中。元数据是分片的,使用 multi-raft 持久化元数据以及保证多副本数据一致性。基于这种方式开发: a. 性能 由于元数据分片,获取元数据需要跟多个节点进行rpc的交互,因此性能相比单机要弱一些 卷和文件系统© XXX Page 5 of 14 1. 1. 2. 2. 1. 2. 1. 2. 一个卷对应一个文件系统 文件系统中文件数据和chunk是一对多的关系。 底层 chunk 固定大小,一个 chunk 可以分为多个固定大小的 extent 大文件可以包含多个 chunk, 小文件可以共用 chunk 文件的目录数结构有单独的元数据节点存储 元0 码力 | 14 页 | 619.32 KB | 6 月前3
Curve文件系统元数据管理uint64_t fsId; InodeId parentId; InodeId inode; string name; }; 4.3 内存组织 inode和dentry的关系需要在内存中通过某种方式组织起来。 还需要额外考虑一下的hard link, symlink,rename的处理。 fastcfs的inode和dentry没有分开,两者在同一个结构体里面。这种方式如何应对硬链接? 这个问题可以有两个解决办法: 一、 ,去所有的metaserver上查询id为300的inode信息。 遍历所有的metaserver 二、通过一个额外的缓存,缓存inode id和partition的映射关系。这个缓存可以在挂载文件系统的时候缓存在client端。不缓存具体的Inode的结构体,仅仅缓存(inodeid, partitionid)的映射,如果inodeid为uint64类型,partit 5.2 分片方式二:Inode按照inodeid进行分片,Dentry按照parentid进行分片© XXX Page 18 of 24 这种分片方式的,inode和dentry的分布没有任何关系,查找inode和查找dentry的大概率需要不同的分片进行处理。这样第一步通过parentid和name去查询inodeid,第二步通过inodeid去查询inode结构体,这两 步就必须通过两次0 码力 | 24 页 | 204.67 KB | 6 月前3
Curve设计要点Storage」数据组织形式 • PageFile • 地址空间到—>chunk: 1 : N chunk有先后关系 • 创建时指定大小,lazy分配chunk • 提供4kb随机读写能力数据组织形式 • PageFile • 地址空间到—>chunk: 1 : N chunk有先后关系 • 创建时指定大小,lazy分配chunk • 提供4kb随机读写能力 • 支撑块设备应用场景 块设备层面的快照功能0 码力 | 35 页 | 2.03 MB | 6 月前3
NJSD eBPF 技术文档 - 0924版本set_initial_rtoCurve的Cache模块 • 底层ext4⽂件系统作为cache • cache分为写cache与读cache,读/ 写cache独⽴配置 • 与底层⽂件关系 (filename, offset, len) = func (inodeid, offset, len) • 读cache流程 • 写cache流程基于inode cache优化 •0 码力 | 20 页 | 7.40 MB | 6 月前3
新一代云原生分布式存储342165799 5 51 • 映射信息无需记录,直接通过计算获得 • 伪随机算法在服务器数量特别大的时候接近均衡 • 节点故障(DiskNums)变更会涉及其他数据的迁移 有中心节点:持久化对应关系 • 需要将数据分布(元数据)持久化 • 中心节点感知集群的信息,进行资源实时调度 • 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (00 码力 | 29 页 | 2.46 MB | 6 月前3
Raft在Curve存储中的工程实践每个raft实例用一个copyset管理,copyset是个逻辑 概念。写入chunk的数据,由copyset对应的raft完成 3副本的写入。 • multi-raft:copyset和chunkserver是多对多的关系 • 每个copyset由3个chunkserver组成 • 每个chunkserver可以服务多个copyset raft复制组 • disk -> segment -> chunk •0 码力 | 29 页 | 2.20 MB | 6 月前3
共 12 条
- 1
- 2













