CurveBS IO Processing Flowvirtual block device in CurveBS1. CurveBS maps the virtual block device to a file. For example, block device /dev/sda corresponds to file /foo/bar in CurveBS 2. The address space of the block device capability to support 4KB aligned read/write on block devices.CurveBS file structure of virtual block device As mentioned above, CurveBS maps virtual block devices to files. Let's look at the metadata0 码力 | 13 页 | 2.03 MB | 6 月前3
OID CND Asia Slide: CurveFScapacity expansion ○ capacity imbalance ○ apps bundled with data locations ● Requirements for elastic block storage ● Requirements for file systemopen-source storage ● Requirements ○ Cloud Native ○ Easy Community You can take awayDesign objectives App scenario & requires ● Database scenario ● Elastic block Storage for KVM / Kubernetes / iSCSI Design objectives ● Thin provisioning storage pools ● High Data availability of 6 nines can be achievedCloud native Support Currently we offer CSI Driver for block storage to provide PV/PVC resources on KubernetesAgenda Why develop storage Design objectives0 码力 | 24 页 | 3.47 MB | 6 月前3
CurveFS对接S3方案设计metaserver.proto space相关数据结构和proto 关键流程 init流程 write流程 read流程 整体架构 S3ClientAdaptor模块:负责将文件数据进行chunk,以及block的拆分为s3的object,并写入/读取s3的object。 S3-allocator模块:负责分配s3-object唯一标识。© XXX Page 3 of 11 整体思路 s3不需要释放空间,可 直接删除对应s3 object) 文件首先会按照chunk进行拆分,每个chunk固定64M/1G(待定),chunk内部会划分为多个block,每个block最大4M,每个block对应s3上一个object。 s3上对象已chunkid_indexblock_version进行命名,元数据则已S3ChunkInfo(见数据结构)的方式存储 对于overlap的场景,会将inode中的versio+1,但是不会处理被overlap的相关数据,由后台进行处理。 2.如果是带了append flag则在writechunk的时候会调用s3的append接口追加写到同一个block object。 3.更新inode中s3元数据的时候,现在只会将可以直接合并的S3Info进行了合并,后面需要考虑如果S3Info太大,需要进行rewrite将元数据进行重新合并 4.inode0 码力 | 11 页 | 145.77 KB | 6 月前3
Curve文件系统元数据管理存,元数据服务的扩展性受限于内存,而且在元数据服务启动的 时候,需要等待一段时间加载内存。 一种是元数据需要全部加载到内存,这种情况下,元数据只需要加载一小部分主要的元数据,比如说super block这种,剩下的比如inode,dentry这种,按需加载,而且使用淘汰机制,内存中不常用的元数据可以淘汰出去。这种方式,扩展性好,元数据服务的扩展性不受限于内存,服务上的内存只有几百GB,而硬盘空 间按照20块1 这里只需要增加一台dentry,然后inode中link++。同样这里的操作也分为两步,事务性也需要处理,留到下半年考虑。 6、curve文件系统的多文件系统的设计 curve文件系统设计上支持多文件系统。文件系统的super block元数据设计。 多文件系统相对于单文件系统,多了一个fsid,在上面的inode和dentry中,需要添加相应的fsId字段。并且在查询inode和dentry的过程中,也需要带上fsId字段进行查询。 password; }; // proto enum FSErrorNum { FS_OK = 0, // TODO FS_UNKNOWN = 1000, }; // S3super block class VolumeFs { public: // open VolumeFs(VolumeInfo volumeInfo, std::string name); uint64_t GetId();0 码力 | 24 页 | 204.67 KB | 6 月前3
Curve Cloud NativeCloud native • Curve is composed of two parts • Curve Block Storage (CurveBS) • CurveBS: a high performance cloud native distributed block storage • Curve File System (CurveFS) • CurveFS: a high0 码力 | 9 页 | 2.85 MB | 6 月前3
Curve for CNCF Mainis an distributed storage system • Components • Curve Block Storage (CurveBS) • CurveBS: a high performance cloud native distributed block storage • Curve File System (CurveFS) • CurveFS: a high0 码力 | 21 页 | 4.56 MB | 6 月前3
Curve核心组件之Client - 网易数帆MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 CLIENT整体架构QEMU: 实现了QEMU block与Client的对接层 向cinder/glance提供了Python API https://github.com/opencurve/curve-qemu-block-driver NBD: 实现了Curve-NBD,与内核NBD模块进行交互 可以作为容器的数据存储0 码力 | 27 页 | 1.57 MB | 6 月前3
Curve支持S3 数据缓存方案小io每次都要和s3交互,导致性能非常差。 因此需要通过Cache模块解决以上2个问题。 整体设计 整个dataCache的设计思路,在写场景下能将数据尽可能的合并后flush到s3上,在读场景上,能够预读1个block大小,减少顺序读对于底层s3的访问频次。从这个思路上该缓存方案主要针对的场景是顺序写和顺序 读,而对于随机写和随机读来说也会有一定性能提升,但效果可能不会太好。 元数据采用2层索引 由于chu ,这里就要求inodeId是永远不可重复。 读写缓存分离 读写缓存的设计采用的是读写缓存分离的方案。 写缓存一旦flush即释放,读缓存采用可设置的策略进行淘汰(默认LRU),对于小io进行block级别的预读。 即读写缓存相互没影响不相关, 缓存层级 缓存层级分为fs->file->chunk->datacache 4层,通过inodeId找到file,通过index找到chunk,然后0 码力 | 9 页 | 179.72 KB | 6 月前3
CurveFS Client 概要设计根据挂载信息,从mds获取文件系统信息(或superblock),块分配器(bitmap)和root inode所在的copyset、 metaserver ip等信息 去metaserver获取文件系统信息(super block),缓存到client端。 destroy void (*destroy) (void *userdata); 清理init缓存的文件系统信息。 lookup void (*lookup) 低版本中没有,因此不是必须接口,也先不实现。 功能分析 根据上述接口的分析,可以把client端的功能进行汇总,client需实现的功能主要有: 缓存文件系统元数据(包括super block, bitmap & allocator等) 缓存文件和目录信息(包括inode struct,dentry struct) 缓存metaserver copyset 和 topo信息(目前先支持0 码力 | 11 页 | 487.92 KB | 6 月前3
CurveFs 用户权限系统调研用于访问控制表上 。目前Linux 的 ACL 存储实现就是基于这种扩展属性的。 Inode Table中保存有若干个 Ext4_inode ,每个 Inode 大小为 ext4_super_block 中指定的 s_inode_size, 然而一个 Inode 不一定用到这么多的大小,节点信息只用到 128 个字节的空间。剩下的部分作为扩展文件属性 (Xattr),扩展属性内部是由一个扩展属性头和若干个扩展属性实体项构成的。© of name */ __u8 e_name_index; /* attribute name index */ __le16 e_value_offs; /* offset in disk block of value */ __le32 e_value_inum; /* inode in which the value is stored */ __le32 e_value_size; /*0 码力 | 33 页 | 732.13 KB | 6 月前3
共 14 条
- 1
- 2













