CurveFs 用户权限系统调研and root. This option and allow_other are mutually exclusive. 测试 allow_root© XXX Page 5 of 33 # filesystem owner wanghai01@pubbeta1-nostest2:/tmp$ ls -l | grep fsmount drwxrwxrwx 0 root ,这些新的文件或目录都会有默认的访问权限 创建一个新的文件或者目录时 umask命令与文件和目录的默认访问权限有关,umask值则表明了需要从默认权限中去掉哪些权限来成 为最终的默认权限值。 root@pubbeta2-curve5:~# umask 0022 权限为777,文件为666,经过与umask作用,最终权限为755、644 默认目录 Windows Linux umask /etc/login.defs fsId = 2; required uint64 length = 3; required uint32 ctime = 4; required uint32 mtime = 5; required uint32 atime = 6; required uint32 uid = 7; required uint32 gid = 8; required0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve核心组件之mds – 网易数帆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-1, copyset-5] cs8 [copyset-3, copyset-8] cs9 cs9 cs10 cs1 cs5 cs8 cs12 ------------------------ copyset-5: (cs2, cs6, cs7) copyset-6: (cs11, cs3, cs4) copyset-7: (cs9, cs10, cs1) copyset-8: (cs5, cs8, cs12) round1: zone1 zone2 cs4 cs7 cs10 cs2 cs5 cs8 cs11 cs3 cs6 cs9 cs12 ------------------------- copyset-1: (cs1, cs4, cs7) copyset-2: (cs10, cs2, cs5) copyset-3: (cs8, cs11, cs3) copyset-4:0 码力 | 23 页 | 1.74 MB | 6 月前3
CurveFS对接S3方案设计required 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 s3Info = 5; } message FsInfo { required uint32 fsId = 1; required string fsName = 2; required FsStatus status = 3; required uint64 rootInodeId = 4; required uint64 capacity = 5; required optional common.Volume volume = 10; optional common.S3Info s3Info = 11; } client端数据结构© XXX Page 5 of 11 // clients3 class S3ClientAdaptor { public: S3ClientAdaptor() {} void Init(const S0 码力 | 11 页 | 145.77 KB | 6 月前3
Curve文件系统元数据管理1、设计一个分布式文件系统需要考虑的点: 2、其他文件系统的调研总结 3、各内存结构体 4、curve文件系统的元数据内存组织 4.1 inode定义: 4.2 dentry的定义: 4.3 内存组织 5 元数据分片 5.1 分片方式一:inode和dentry都按照parentid分片 5.1.1 场景分析 查找:查找/A/C。 创建:/A/C不在,创建/A/C 删除文件:删除/A/C 删除目录:删除/A 块设备的元数据管理 cephfs 3、各内存结构体 时间复杂度 空间复杂度 特点 可用实现 Btree 一个节点上保存多条数据,减少树的层次(4~5层),方便从盘上读取数据,减少去盘上读取次数。适合在盘上和内存组织目录树。 google,https://github.com/abseil/abseil-cpp/tree/master/absl/c curve文件系统元数据主要有3个类型,inode, dentry, 。 extent 4.1 inode定义: inode定义见:curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 5 of 24 typedef uint64_t InodeId; enum FileType { TYPE_DIRECTORY = 0, TYPE_FILE, TYPE_SYM_LINK0 码力 | 24 页 | 204.67 KB | 6 月前3
Curve文件系统元数据Proto(接口定义)2; 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 uint64 rootInodeId = 3; required uint64 capacity = 4; required uint64 blockSize = 5; required Volume volume = 6; required uint32 mountNum = 7; repeated mountPoint mountpoints UmountFsRequest { required string fsName = 1; required mountPoint mountpoint = 2;© XXX Page 5 of 15 } message UmountFsResponse { required MetaStatusCode statusCode = 1; } /* UpdateFsInfoRequest0 码力 | 15 页 | 80.33 KB | 6 月前3
Curve支持S3 数据缓存方案required uint64 offset = 3; required uint64 len = 4; // file logic length required uint64 size = 5; // file size in object storage }; message Inode { required uint64 inodeId = 1; required uint32 fsId = 2; required uint64 length = 3; required uint32 ctime = 4; required uint32 mtime = 5; required uint32 atime = 6; required uint32 uid = 7; required uint32 gid = 8; required S3ClientAdaptorOption option, S3Client *client, std::shared_ptr inodeManager);© XXX Page 5 of 9 int Write(Inode *inode, uint64_t offset, uint64_t length, const char* buf bool0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve设计要点软件单元:chunkserver • 物理机:server • 故障域:zone • 物理池:poolIO流程 client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 查询 chunk 所在的 copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求, Chunkserver 完成后通知client; 5. Client通知用户请求完成。背景 01 02 03 04 总体设计 系统特性 近期规划单卷4K随机读写IOPS 102k 39.7k 41.7k 127k 4K随机写 4K随机读 204.56% 单卷4K随机读写平均延迟(ms) 1.244 3.2 3.1 0.998 4K随机写 4K随机读 61.12 % 67.8% 测试环境:6台服务器*20块SATA SSD,E5-2660 v4,256G,3副本场景 高性能高性能 • quorum机制:raft • 轻量级快照 • io路径上的优化 • filepool落盘零放大 • 轻量级线性一致性读 • io路径上用户空间零拷贝0 码力 | 35 页 | 2.03 MB | 6 月前3
CurveFS S3本地缓存盘方案int64_t CacheDiskUsedRatio(); bool IsDiskCacheFull(); bool IsDiskCacheSafe(); /**© XXX Page 5 of 9 * @brief trim cache func. */ void TrimCache(); /** * @brief: start trim i < 100000; i++) { char str[5]; sprintf(str, " %d" , i); Write(str, buf, length); } LOG(INFO) << "whs end write."; 如上,写10万个4k文件,最终耗时5秒左右,如下: hzwuhongsong@pubbeta1-nostest2:/mnt$ est2:/mnt$ sudo cat /data/log/curve/libcurve-cb6f5cfd.log.INFO.20210825-171813.1930722 | grep whs | egrep "start|end" I 2021-08-25T17:18:13.642961+0800 1930722 disk_cache_manager.cpp:55] whs start write0 码力 | 9 页 | 150.46 KB | 6 月前3
Curve文件系统元数据持久化方案设计$key_length 编码后的 key [value_length] 4 value 长度 [value] $value_length 编码后的 value checksum 8 前面 5 部分的校验和© XXX Page 4 of 12 Raft Snapshot +---------+---------+------+-----------------+-----+-----------+ check_sum 8 保存校验和 (根据前 5 个部分内容计算得出) key_value_pairs 字段 字节数 说明 key_length 4 key 的长度 key $key_length 保存编码后的 key value_length 4 value 长度 value $value_length 保存编码后的 value© XXX Page 5 of 12 其他说明 持久化文件中涉及到的数字均以小端序存储 fsId = 2; required uint64 length = 3; required uint32 ctime = 4; required uint32 mtime = 5; required uint32 atime = 6; required uint32 uid = 7; required uint32 gid = 8; required0 码力 | 12 页 | 384.47 KB | 6 月前3
CurveFS方案设计的场景,元数据的量比块存储场景会多很多,长期看元数据节点的设计也是需要满足高可用、高可扩、高可靠的。 因此对元数据节点的要求总结为:高可用、高可扩、高可靠、高性能。 架构设计 卷和文件系统© XXX Page 5 of 14 1. 1. 2. 2. 1. 2. 1. 2. 一个卷对应一个文件系统 文件系统中文件数据和chunk是一对多的关系。 底层 chunk 创建 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 交互获取 inode 和 dentry 就是元数据的快照。© XXX Page 10 of 14 1. 1. 2. 3. 2. 1. 2. 3. 1. 4. 5. 1. 2. 3. 4. 5. 由于元数据使用raft, apply的时候是以kv的方式写入到文件,因此可以复用这个逻辑。 客户端感知文件版本号。如果版本号变更,就触发raft的sanpshot,并且只apply小于版本号的部分0 码力 | 14 页 | 619.32 KB | 6 月前3
共 32 条
- 1
- 2
- 3
- 4













