CurveFs 用户权限系统调研? fsmount root@pubbeta1-nostest2:/tmp# cd fsmount bash: cd: fsmount: Permission denied© XXX Page 4 of 33 查阅资料发现这是fuse的一种安全策略,默认是只有filesystem owner拥有该文件系统的访问权限,如果想要其他用户有权访问,需要在挂载参数中指定‘-o allow-root’ wanghai01@pubbeta1-nostest2:/tmp$ ls -l | grep fsmount drwxrwxrwx 0 root root 0 Dec 4 2078 fsmount wanghai01@pubbeta1-nostest2:/tmp$ cd fsmount/ wanghai01@pubbeta1-nostest2:/tmp/fsmount$ nbs@pubbeta1-nostest2:/tmp$ ls -l | grep fsmount drwxrwxrwx 0 root root 0 Dec 4 2078 fsmount nbs@pubbeta1-nostest2:/tmp$ cd fsmount/ nbs@pubbeta1-nostest2:/tmp/fsmount$ ls nbs@pu0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve设计要点地址空间到—>chunk: 1 : N chunk有先后关系 • 创建时指定大小,lazy分配chunk • 提供4kb随机读写能力数据组织形式 • PageFile • 地址空间到—>chunk: 1 : N chunk有先后关系 • 创建时指定大小,lazy分配chunk • 提供4kb随机读写能力 • 支撑块设备应用场景 块设备层面的快照功能 即为文件层面快照数据组织形式 • AppendFile 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 chunk 的请求 3. Client 向 chunkserver 查询 chunk 所在的 copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求 01 02 03 04 总体设计 系统特性 近期规划单卷4K随机读写IOPS 102k 39.7k 41.7k 127k 4K随机写 4K随机读 Ceph(L/N) Curve 151.89% 204.56% 单卷4K随机读写平均延迟(ms) 1.244 3.2 3.1 0.998 4K随机写 4K随机读 61.12 % 67.8% 测试环境:6台服务器*20块SATA0 码力 | 35 页 | 2.03 MB | 6 月前3
CurveFS Copyset与FS对应关系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 partition的管理 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 6.2、挂载fs 6.3、创建文件/目录 6.4、open流程 6.5、读写流程 set在预分配的时候已经确定。后续的读写的操作直接去对应的copyset上去进行读写。这个 分配copyset方式,并不适合curvefs的元数据。这种分配方式是提前分配了一批空间,即使用户只需要写4KB数据,也一次性分配1GB的空间。而curvefs的元数据,并不能一次申请一批在client端,而是每次都需 要去metaserver上去进行分配。 这里需要重新考虑curvefs的copyset和fs的元数据分片的对应关系。©0 码力 | 19 页 | 383.29 KB | 6 月前3
CurveFS对接S3方案设计ck最大4M,每个block对应s3上一个object。 s3上对象已chunkid_indexblock_version进行命名,元数据则已S3ChunkInfo(见数据结构)的方式存储在inode中。对于文件顺序写场景,文件0~4M的s3对象必然为chunkid_0_0,4M~8M为chunkid_1_0,以此类推, 还有一种情况是文件先写了0~2M,然后在写2M~4M,这里会 采用append到同一个对象的方式进行写,而不是额外upload到一个新的对象;元数据则为{2,0,0,8M}。对于覆盖写,为了区分新老数据,则会对version进 行++,比如覆盖写了0~4M,则数据会写到chunkid_0_1的对象,则元数据包含了2个S3Chunkinfo{2,0,0,8M}和{2,1,0,4M}。 接口和关键数据结构 common.proto enum FSType string endpoint = 3; required string bucketname = 4; required uint64 blockSize = 5; required uint64 chunkSize = 6; } mds.proto© XXX Page 4 of 11 import "curvefs/proto/common.proto"; message0 码力 | 11 页 | 145.77 KB | 6 月前3
Curve核心组件之mds – 网易数帆zone2 zone3 zone4)中创建8个copyset: result: cs1 [copyset-1, copyset-7] cs2 [copyset-2, copyset-5] cs3 [copyset-3, copyset-6] cs4 [copyset-1, copyset-6] cs5 [copyset-2, copyset-8] cs6 [copyset-4, copyset-5] cs7 [copyset-3, copyset-8] cs9 [copyset-4, copyset-7] cs10[copyset-2, copyset-7] cs11[copyset-3, copyset-6] cs12[copyset-4, copyset-8] round2: zone1 zone2 zone3 zone4 ------------------------ cs2 cs6 cs6 cs7 cs11 cs3 cs4 cs9 cs10 cs1 cs5 cs8 cs12 ------------------------ copyset-5: (cs2, cs6, cs7) copyset-6: (cs11, cs3, cs4) copyset-7: (cs9, cs10, cs1) copyset-8:0 码力 | 23 页 | 1.74 MB | 6 月前3
CurveBS IO Processing Flowadd, delete, modify, and query metadata l Interacts with the chunkServer to read and write data 4. Snapshotcloneserver l Independent of core services l Snapshot data is stored in object storage system. For example, chunk1 corresponds to the address space of 0 to 4MB in /dev/sda, and chunk2 corresponds to the address space of 4 to 8MB in /dev/sda. The size of chunk can be configured 3. Each contains chunks scattered all over the storage nodes. ChunkServer provides 4KB random read/write capability to support 4KB aligned read/write on block devices.CurveBS file structure of virtual block0 码力 | 13 页 | 2.03 MB | 6 月前3
Curve文件系统元数据管理Page 1 of 24 Curve文件系统元数据管理(已实现)© XXX Page 2 of 24 1. 2. 3. 4. Inode 1、设计一个分布式文件系统需要考虑的点: 2、其他文件系统的调研总结 3、各内存结构体 4、curve文件系统的元数据内存组织 4.1 inode定义: 4.2 dentry的定义: 4.3 内存组织 5 元数据分片 5.1 块设备的元数据管理 cephfs 3、各内存结构体 时间复杂度 空间复杂度 特点 可用实现 Btree 一个节点上保存多条数据,减少树的层次(4~5层),方便从盘上读取数据,减少去盘上读取次数。适合在盘上和内存组织目录树。 google,https://github.com/abseil/abseil-cpp/tree/master/absl/c https://github.com/begeekmyfriend/bplustree,(MIT),实现了落 盘 BST O(log(n)) O(n) c++ stl 模板© XXX Page 4 of 24 skip list O(log(n)) O(n) level db,https://github.com/google/leveldb/blob/master/db/skip list0 码力 | 24 页 | 204.67 KB | 6 月前3
Curve 分布式存储设计1. Curve云原生软件定义存储 2. Curve块存储 3. Curve文件存储 4. 高性能,易运维,云原生Curve块存储 1. 高性能分布式共享数据库场景 2. Curve块存储提供底层分布式共享存储 3. Polardb for PostgreSQL提供上层高性能数 据库服务 4. 性能测试 1. benchmarkSQL 每分钟事务数提升39% 2. pgbench TPS提升26% 研究现状Curve块存储 1. 分布式块存储服务 2. KVM块存储服务 3. iSCSI协议 4. 容器云块存储(CSI) 应用场景Curve块存储 1. 高可用性/高可靠性 (易运维) 2. RAFT一致性协议 3. CopySet分配算法 4. 拓扑结构 5. 高性能 6. chunkfilepool (降低写放大) 7. data stripe (增大并发) 器资源物理隔离 2. zone故障隔离的基本单元 3. server表示物理服务器 4. chunkserver物理服务器上 的服务实例 拓扑结构Curve块存储 1. Curve块存储将虚拟块设备 映射到文件 2. 每个文件包含的chunk分散 在集群的存储节点 3. chunkserver按照故障域分组 4. copyset中的节点属于不同的 故障域 数据组织Curve块存储 IO流程Curve块存储0 码力 | 20 页 | 4.13 MB | 6 月前3
Curve文件系统元数据Proto(接口定义)required string volumeName = 3; required string user = 4; optional string password = 5; } message FsInfo { required uint32 fsId = 1;© XXX Page 4 of 15 required string fsName = 2; required required uint64 rootInodeId = 3; required uint64 capacity = 4; required uint64 blockSize = 5; required Volume volume = 6; required uint32 mountNum = 7; repeated mountPoint mountpoints = 8; required uint64 inodeId = 2; required uint64 parentInodeId = 3; required string name = 4; } message GetDentryResponse { required MetaStatusCode statusCode = 1; optional Dentry dentry0 码力 | 15 页 | 80.33 KB | 6 月前3
Curve核心组件之chunkserverChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化Curve ChunkServer是数据节点, 对外提供数据读写和节点管理功 能,底层基于ext4文件系统,操 作实际的磁盘。 ChunkServer架构ChunkServer通过RPC网络层与client, MDS,其他ChunkServer通信。RPC 网络层是由brpc框架去完成的。包 括读写socket,rpc协议解析等。 对chunk的读写,chunk基本cow的快照, 克隆chunk的管理等等。 ChunkServer架构LocalFileSystermAdaptor是对底层文件 系统的一层抽象,目前适配封装了ext4 文件系统的接口。 之所以要做这层抽 象,目的是隔离了底层文件系统的实 际读写请求,如果将来curve要适配裸 盘或者采用其他文件系统,可以在这 层进行适配。 ChunkServer架构CURVE基本架构 本地持久化entry的同时发送给其他peer 4. 本地持久化log entry成功,并且有一个peer也落 盘成功,则commit 5. Commit后apply,此时把写请求写到chunkChunkServer核心模块-CopysetNode 坏盘(CS1对应的盘)后的迁移流程 初始状态,copyset1,copyset2,copyset3的三个副本分别在 CS1,CS3,CS4上,完成迁移后,CS1上的副本迁移到CS2上0 码力 | 29 页 | 1.61 MB | 6 月前3
共 33 条
- 1
- 2
- 3
- 4













