Raft在Curve存储中的工程实践存文 件文件的元数据,包括inode,dentry,文件的 空间分配信息。 • 数据集群:采用外部存储,S3或者Curve块存储,保 存写入文件的数据。Curve文件存储RAFT应用 基于rocksdb的存储引擎 • 要求存储的元数据的大小不超过内存的大小 • raft apply的请求,数据都在内存,直接修改 内存中的数据 • raft snapshot,为避免快照对正常操作的影 响,利用操作系统的内存写时复制技术, 后台遍历内存,把内存的数据持久化到本地 磁盘 基于memory的存储引擎 • 存储元数据量不受内存大小限制 • raft apply请求,数据保存在rocksdb,向 rocksdb插入记录。 • raft snapshot,利用rocksdb的快照功能, 对rocksdb打快照。 • Curve文件系统也是使用copyset管理。 • 写日志的方式与Curve块存储基本一致,实现细节略有差异。 • raft raft apply和raft snapshot的实现和Curve块存储不同。 • metaserver有两套存储引擎,基于memory和基于rocksdb。 Curve文件系统与Curve块存储的实现区别CURVE的RAFT配置变更 心跳 • 通过心跳维持mds和chunkserver/metaserve的 数据交互 • mds发起配置变更,copyset复制组执行 • 在curve0 码力 | 29 页 | 2.20 MB | 6 月前3
Curve for CNCF MainCeph) META MANAGEMENT CURVE CHUNK SERVER BLUESTORE META Precreate Chunk File Pool on ext4 RocksDB META OVERHEAD without ext4 meta overhead increase read/write magnification PERFORMANCE High Need0 码力 | 21 页 | 4.56 MB | 6 月前3
Curve文件系统元数据持久化方案设计个从实例,当主节点挂掉时,cluster/哨兵会自动将从节点升为主节点 redis + muliraft 存在的问题? 每个 raft ,需要独立的 snapshot(目前 redis 做不到)探索其可行性?? rocksdb/leveldb + multiraft 可行,因为 leveldb 是可嵌入的,一个 raft 实例中可以绑定一个 leveldb 实例(leveldb 中的 wal 和 SST 文件都可以写到指定的目录)0 码力 | 12 页 | 384.47 KB | 6 月前3
CurveFS方案设计两个结构描述 还是 由一个dentry描述所有信息) inode 和 dentry 的索引设计(btree / skiplist / hashmap ?) 元数据的持久化(以 kv 的方式存入文件?存储 rocksdb ?) 元数据节点的高可用 元数据分片策略(哪些范围的元数据存储在哪些复制组上) 数据结构 在元数据设计上,扁平化元数据(用 parentID+Filename → FileInfo 表示一0 码力 | 14 页 | 619.32 KB | 6 月前3
共 4 条
- 1













