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 rename:rename /A/C到/B/E symbolic link: hardlink:生成一个hardlink 6TB的盘来计算,一个服务器上可以有32TB的空间,硬盘的空间比内存到100多倍。但是这种方式,由于数据不能去全部缓存到内存,在查询元数据的时候,需要去盘上读数据,而且在文件系统这种使 用场景下,一次对文件的查找,需要在磁盘上读取多次。 我们的文件系统定位是一个高性能的通用文件系统,元数据的缓存倾向于全缓存。 系统加载的时候从持久化介质中进行加载,需要把一条条持久化的记录加载到内存里。实现把string → inode B dentry信息 0 + A → 100 100 + C → 300 0 + B → 200 100 + D → 400 5.1.1 场景分析 查找:查找/A/C。 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100© XXX Page 13 of 24 2、client给server0发送请求:inode0 码力 | 24 页 | 204.67 KB | 6 月前3
 副本如何用CLup管理PolarDBclup-server 数据中心1 CLup管理节点2 高可用机制自动切换  数据一致性保证 数据可用性  提供读写VIP  读写高可用 读写分离  多个读库之间负载均衡 负载均衡  读线性扩展  支持分库分表 高扩展性 写 VIP 读 VIP PG (Primary) PG (Standby1) PG (Standby2) PG (Standby3) 数据同步复制0 码力 | 34 页 | 3.59 MB | 6 月前3
 Curve设计要点测试环境:6台服务器*20块SATA SSD,E5-2660 v4,256G,3副本场景 高性能高性能 • quorum机制:raft • 轻量级快照 • io路径上的优化 • filepool落盘零放大 • 轻量级线性一致性读 • io路径上用户空间零拷贝 10卷4K随机读写IOPS 294k 185k 330k 565k 4K随机写 4K随机读 Ceph(L/N) Curve 58.92% 710 码力 | 35 页 | 2.03 MB | 6 月前3
 Curve文件系统元数据持久化方案设计ht[1] 两个哈希表 (2) 在字典中维持一个索引计数器变量 rehashidx, 并将它的值设置为 0, 表示 rehash 工作正式开始 (3) 在 rehash 进行期间, 每次对字典执行添加、删除、查找或者更新操作时, 程序除了执行指定的操作以外, 还会顺带将 ht[0] 哈希表在 rehashidx 索引上的所有键值对 rehash 到 ht[1], 当 rehash 工作完成之后, 程序将 rehashidx ht[0] 和 ht[1] 两个哈希表, 所以在渐进式 rehash 进行期间, 字典的删除 (delete)、查找(find)、更新(update) 等操作会在两个哈希表上进行: 比如说,要在字典里面查找一个键的话,程序会先在 ht[0] 里面进行查找,如果没找到的话,就会继续到 ht[1] 里面进行查找,诸如此类 另外, 在渐进式 rehash 执行期间, 新添加到字典的键值对一律会被保存到 ht[1]0 码力 | 12 页 | 384.47 KB | 6 月前3
 Curve文件系统空间分配方案附带上file1最后一个字节数据在底层存储的位置,再加1(期望申请的地址空间起始offset)。以图中为例,则附带的值为30MiB。 这次的空间申请,直接从level2中以30MiB作为key进行查找,找到后,进行空间分配。分配之后,相关信息如下图所示: 之前剩余的 30MiB ~ 2MiB 的extent完全分配出去,所以从level2中的list中删除。 文件inode中的extent可 ,随机或者选择可用空间 最大的extent分配出去。 文件申请空间时,之前预分配块的剩余空间被其他文件占用。此时,首先从level1查找一个可用的块,不满足要求时,按情况1进行处理。 file1再次追加写入数据时,会附带32MiB来申请空间。此时,从level1中查找32MiB对应的块标记是否为0,如果为0,则将这个块继续分配给file1。否则,可以从level1中随机选择一个可用的块进行分配© XXX 文件系统重新加载时,再将所有的空间,按照上述的策略,进行分组管理。 接口设计 RPC接口 当前设计是把空间分配器作为内置服务放在元数据节点,所以请求的发起方是fuse client,元数据服务器接收到请求后,根据fsId查找到对应的文件系统的空间分配器后,将空间分配/回收的任务交给这个分配器进行处理,处理完成后,返回RPC。 空间分配器相关的RPC接口,及request/response定义如下。与 里的定义基本一致。0 码力 | 11 页 | 159.17 KB | 6 月前3
 CurveFS Client 概要设计fuse_ino_t ino, const char *buf, size_t size, off_t off, struct fuse_file_info *fi); 首先根据inode id 从缓存中查找到对应inode结构; 如果inode缓存中不存在对应的inode,则从mds获取inode所在copyset,metaserver ip等信息,然后从metaserver获取inode结构,缓存之; (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct fuse_file_info *fi); 首先根据inode id 从缓存中查找到对应inode结构; 如果inode缓存中不存在对应的inode,则从mds获取inode所在copyset,metaserver ip等信息,然后从metaserver获取inode结构,缓存之; 义,已实现) Cache设计 Client的重要部分,就是上述这些cache的组织,基于以下几点考虑cache的组织方式: 1.由于cache不命中情况下,损失了cache查找这部分时间,因此,应当选用cache查找尽可能快的结构,这里考虑采用hash_map。 2. 由于fuse一次mount是一个独立的进程,因此,不需要考虑在同一个进程中支持多文件系统,每个文件系统对应独立进程。 30 码力 | 11 页 | 487.92 KB | 6 月前3
 Curve核心组件之mds – 网易数帆文件的元数据以KV的方式存储。 • Key:ParentID + “/”+ BaseName; • Value:自身的文件ID。 这种方式可以很好地平衡几个需求: • 文件列目录:列出目录下的所有文件和目 录 • 文件查找:查找一个具体的文件 • 目录重命名:对一个目录/文件进行重命名 当前元数据信息编码之后存储在 etcd 中。COPYSET Curve系统中数据分片的最小单位称之为Chunk。在大规模的存储容量下,会产生大量的Chunk,如此众多的0 码力 | 23 页 | 1.74 MB | 6 月前3
 CurveFS Copyset与FS对应关系robin的方式,遍历尝试去所有的partition中,直到找到一个partition可以创建inode。 创建dentry,去parent inodeid所在的meta partition进行创建就好了。 查找inode和partition的时候,通过inodeid去查询应该由哪个partition进行处理。inode是拿着inodeid查询,dentry是拿着parent的inode id去查询。© XXX0 码力 | 19 页 | 383.29 KB | 6 月前3
 Open Flags 调研一般来说,当调用 open() 系统调用打开文件时,如果不指定 O_DIRECT 标志,那么就是使用缓存I/O来对文件进行读写操作。系统缓存位于VFS和真实文件系统之间,当虚拟文件系统读文件时,首先从缓存中查找要读取的文件内容是否存在缓存中,如果存在就直接从缓存中读取。对文 件进行写操作时也一样,首先写入到缓存中,然后由操作系统同步到块设备(如磁盘)中。对于通用块设备层来说要求io请求是块设备blocksize对齐的,对应buffered0 码力 | 23 页 | 524.47 KB | 6 月前3
共 9 条
- 1
 













