Curve文件系统元数据管理tree(key ino) dentry → b tree (key parentIno + name) extent → B+ tree 这个在inode的ExtentsTree字段 meta partition(raft group) Btree、B+ tree 好 有 tiny extent,多个文件共用 normal extent,属于一个文件 partition append→ overwrite → raft 更适合大文件顺序写 fastcfs 有元数据服务器 inode和dentry放一个结构体。 inode → hashtable(key是ino,全局) dentry → skip list (key是name,每个目录下一个) 计算出来的 binlog,随时间会越来越大 差 DG Master/Slave glusterfs 无中心化服务器 dht算法 和写数据一样 好 写多份 overwirte有数据不一致风险 curve 有元数据服务器 lru cache缓存 kv → hashtable(key parent inode + name) segment kv → hashtable(key inode + offset) etcd 差 块设备,最小10GB segment + chunk raft 块设备的元数据管理 cephfs0 码力 | 24 页 | 204.67 KB | 6 月前3
CurveFS Copyset与FS对应关系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 3.2 copyset ofs的用volume管理一个文件系统,每个volume有若干meta partition和data partition。meta partition管理的元数据,data partition管理数据。meta partition管理inode和dentry信息。 创建一个文件系统时,如何初始化meta partition? master\cluster.go, chubaofs的文件系统使用 eta partition和10个data partition。chubaofs的data partition的功能我们使用curve块设备替换。meta partition的创建,以及meta partition的管理的,下面会详细分析一下。 2.1、meta partition的创建 再创建文件系统的时候,会创建好指定大小的metapartition,meta partition的数量最小0 码力 | 19 页 | 383.29 KB | 6 月前3
curvefs client删除文件和目录功能设计较为复杂,不能复用原有的client逻辑,需要组织成moosefs那样的meta文件系统可能需要引入额外的复杂性,但是依然可以实现简单的 工具查询。 由于该方案,删除的inode是分散于每个partition中,那么查询工具可能需要遍历所有partion去查询所有的删除inode。 第二种方案: 将inode移动到隐藏的trash目录,这个trash目录可以是实际的目录结构,有dentry和i0 码力 | 15 页 | 325.42 KB | 6 月前3
Curve元数据节点高可用使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删掉。这在很多分布式锁的实现上都会用到,可以保证锁的实时性和有效性。CAS(Atomic Compare-and-Swap)指的是在对key进行赋值的时候,客户端需要提供一些条件,当这些条件满足后才能赋值成功。 3. etcd clientv3的concurrency介绍 Election提供的方法如下:© XXX Page 4 of 30 1. // Campaign puts a value as eligible for the election on the prefix // key. // Multiple sessions can participate in the election for the // same prefix, but only one can be the func (e *Election) Resign(ctx context.Context) (err error) // leaderkeyleader func (e *Election) Key() string // leaderkeyrevision func (e *Election) Rev() int64 // response header func (e *Election)0 码力 | 30 页 | 2.42 MB | 6 月前3
Curve文件系统元数据持久化方案设计© XXX Page 1 of 12 元数据持久化© XXX Page 2 of 12 前言 Raft Log Raft Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft of 12 Raft Log +------+------------+-----+----------------+---------+----------+ | type | key_length | key | [value_length] | [value] | checksum | +------+------------+-----+----------------+---------+----------+ (0X01):ADD 和 UPDATE 都可以转换成 SET 操作 DEL (0X02):当为 DEL 操作时,value_length 和 value 则为空 key_length 4 key 长度 key $key_length 编码后的 key [value_length] 4 value 长度 [value] $value_length 编码后的 value checksum 8 前面0 码力 | 12 页 | 384.47 KB | 6 月前3
OID CND Asia Slide: CurveFSHangzhou Research InstituteAgenda � Why develop storage Design objectives Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayWhy develop Storage requirements requirements cannot be metAgenda Why develop storage � Design objectives Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayDesign objectives App scenario maintenance ● Cloud NativeAgenda Why develop storage Design objectives � Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayPerformance in database scenario0 码力 | 24 页 | 3.47 MB | 6 月前3
NJSD eBPF 技术文档 - 0924版本FUSE_SETATTR / • map 结构 • dentry map BPF_MAP_TYPE_HASH • key (inode id, node name) • value inode id • inode map BPF_MAP_TYPE_HASH • key inode id • value fuse_attr (⽂件属性)基于data cache部分 • bpf程序类型 WriteCache map BPF_MAP_TYPE_HASH • key inodeid • value CacheStatus, blocklist[ ] {fd, chunk, size, kernel file, ver} • ReadCache map BPF_MAP_TYPE_HASH • key inodeid • value CacheStatus, filemap[0 码力 | 20 页 | 7.40 MB | 6 月前3
Curve文件系统空间分配方案所对应的一块空间(以4MiB为例,具体大小可配置)是否分配出去。 第二层为free extent list,表示每个已分配的块,哪些仍然是空闲的(offset, length),以offset为key进行排序(这里可以用map或者btree对所有的free extent进行管理)。 当前设计不考虑持久化问题,空间分配器只作为内存结构,负责空间的分配与回收。在初始化时,扫描文件系统所有inode中已使用的空间。 时,需要附带上file1最后一个字节数据在底层存储的位置,再加1(期望申请的地址空间起始offset)。以图中为例,则附带的值为30MiB。 这次的空间申请,直接从level2中以30MiB作为key进行查找,找到后,进行空间分配。分配之后,相关信息如下图所示: 之前剩余的 30MiB ~ 2MiB 的extent完全分配出去,所以从level2中的list中删除。 文件inode中的ext0 码力 | 11 页 | 159.17 KB | 6 月前3
CurveFS ChunkID持久化返回一个新的chunkid 方案 class ChunkIDGenerator { client_; // etcd chunkIdStoreKey_; // chunkid 存储在etcd上的 key nextId_; // 下一个可分配的 chunkID lastId_; // 当前chunkID bundle 内最后一个可分配的chunkID bundleSize_;// chunkId池子的大小0 码力 | 3 页 | 79.38 KB | 6 月前3
Curve for CNCF MainDistributed storage system https://www.opencurve.io/Agenda • What is Curve • Use Cases • CurveBS • Key Features • Comparing to Ceph • CurveFS • Comparing to Ceph • Current Status • RoadmapWhat0 码力 | 21 页 | 4.56 MB | 6 月前3
共 14 条
- 1
- 2













