Curve文件系统元数据管理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 分片方式一:i 6、curve文件系统的多文件系统的设计 1、设计一个分布式文件系统需要考虑的点: 文件系统的元数据是否全缓存? 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? inode+dentry方式?当前curve块存储的kv方式? 是否有单独的元数据管理服务器? 2、其他文件系统的调研总结 fs 中心化元数据 内存namespace元数据 内存空间分配元数据 元数据持久化 元数据扩展 元数据扩展 小文件优化 空间管理单位 数据持久化 其他© XXX Page 3 of 24 moosefs(mfs) 有元数据服务器 全内存 fsnode → hashtable(inode id) fsedge → hashtable (parent inode + name) 全内存 chunk → hashtable(chunk id) log + dump record 差 否0 码力 | 24 页 | 204.67 KB | 6 月前3
Curve文件系统元数据Proto(接口定义)XXX Page 1 of 15 curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 2 of 15 1、代码结构和代码目录 curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。 2、文件系统proto定义 2.1 mds.proto0 码力 | 15 页 | 80.33 KB | 6 月前3
Curve文件系统元数据持久化方案设计© XXX Page 1 of 12 元数据持久化© XXX Page 2 of 12 前言 Raft Log Raft Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft 存在的问题? redis 改造 vs 自己实现? redis 中哈希表实现的优点? 参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化© XXX Page 3 of 12 Raft Log +------+- "CURVEFS"),用于标识该文件为 curvefs 元数据持久化文件 version 4 文件版本号(当文件格式变化时,可以 100% 向后兼容加载旧版持久化文件) size 8 键值对数量 key_value_pairs / 键值对(当 size 为 0 时,该字段为空) EOF 1 特殊标记常量 (0XFF),表示内容已结束 check_sum 8 保存校验和 (根据前 5 个部分内容计算得出) key_value_pairs0 码力 | 12 页 | 384.47 KB | 6 月前3
新一代云原生分布式存储新一代云原生分布式存储—Curve 上 李小翠 网易数帆存储团队分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 场景介绍 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑存储的发展 互联网时代,数据大爆炸 大型主机 成本高 单点问题 扩容困难 各存储设备通过网络互联 各存储设备通过网络互联 大规模 弹性扩容 底层构建在分布式存储之上 云的概念 成本:共用基础设施 弹性:随意扩缩容 速度:更快的构建发布业务 底层构建在分布式存储之上 云原生的概念: 易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 传统意义的文件系统: Ext4 对指定地址空间进行随机读写 传统意义的块存储:磁盘分布式存储的要素 如何构建分布式文件系统? 以分布式块存储为例。 •提供大容量的块设备 •可以在指定地址空间内随机读写 write(offset, len) •服务质量要求:数据不能丢、服务随时可用、弹性扩缩容 要什么 •成百上千台存储节点 •磁盘故障、机器故障、网络故障概率性发生 有什么 分布式存储系统需要满足0 码力 | 29 页 | 2.46 MB | 6 月前3
CurveFs 用户权限系统调研1 of 33 CurveFs 用户权限系统调研(已实现)© XXX Page 2 of 33 一、Curvefs测试 1. 启动curvefs 问题1:root用户无法访问挂载目录 测试 allow_root 测试allow_other 参考文献 问题2:本地文件系统挂载默认是共享的? 问题3:文件系统访问控制是在哪一层实现的? 二、文件系统权限管理 文件类型 文件权限 特殊权限(SUID 文件默认权限umask 用户&用户组 文件系统用户权限管理 对mode的管理 对ACL(Access Control Lists)的管理 ACL Access Entry保存在哪? ACL的表示 内存中的ACL 是如何与具体的 Inode 相关联 如何存储和获取ACL信息 Inode权限校验 chmod、chown、setfacl、getfacl接口文件系统自己如何实现 结论: 参考文献: 一、Curvefs测试 Page 4 of 33 查阅资料发现这是fuse的一种安全策略,默认是只有filesystem owner拥有该文件系统的访问权限,如果想要其他用户有权访问,需要在挂载参数中指定‘-o allow-root’ 或'-o allow-other'以允许相应用户有权访问该文件系统,如果挂载者不是root还需要在/etc/fuse.conf(/usr/local/etc/fuse.conf)中增加配0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve元数据节点高可用© XXX Page 1 of 30 Curve元数据节点高可用© XXX Page 2 of 30 1. 需求 2. 技术选型 3. etcd clientv3的concurrency介绍 3.1 etcd clientV3的concurrency模块构成 3.2 Campaign的流程 3.2.1 代码流程说明 3.2.2 举例说明Campagin流程 3.3 Observe的流程 mds是元数据节点,负责空间分配,集群状态监控,集群节点间的资源均衡等,mds故障可能会导致client端无法写入。 因此,mds需要做高可用。满足多个mds, 但同时只有一个mds节点提供服务,称该提供服务的mds节点为主,等待节点为备;主节点的服务挂掉之后,备节点能启动服务,尽量减小服务中断的时间。 需要解决的问题就是:如何确定主备节点。 2. 技术选型 提供配置共享和服务发现的系统比较多 提供配置共享和服务发现的系统比较多,其中最为大家熟知的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期0 码力 | 30 页 | 2.42 MB | 6 月前3
Curve文件系统空间分配方案Curve文件系统空间分配方案(基于块的方案,已实现)© XXX Page 2 of 11 背景 本地文件系统空间分配相关特性 局部性 延迟分配/Allocate-on-flush Inline file/data 空间分配 整体设计 空间分配流程 特殊情况 空间回收 小文件处理 并发问题 文件系统扩容 接口设计 RPC接口 空间分配器接口 背景 根据 ,文件系统基于当前的块进 ,文件系统基于当前的块进行实现,所以需要设计基于块的空间分配器,用于分配并存储文件数据。 CurveFS方案设计(总体设计,只实现了部分) 本地文件系统空间分配相关特性 局部性 尽量分配连续的磁盘空间,存储文件的数据。这一特性主要是针对HDD进行的优化,降低磁盘寻道时间。 延迟分配/Allocate-on-flush 在sync/flush之前,尽可能多的积累更多的文件数据块才进行空间分配,一方面可以提高局部性,另一方面可以降低磁盘碎片。 几百字节的小文件不单独分配磁盘空间,直接把数据存放到文件的元数据中。 针对上述的本地文件系统特性,Curve文件系统分配需要着重考虑 。 局部性 虽然Curve是一个分布式文件系统,但是单个文件系统的容量可能会比较大,如果在空间分配时,不考虑局部性,inode中记录的extent数量很多,导致文件系统元数据量很大。© XXX Page 3 of 11 假如文件系统大小为1PiB,空间分配粒度为10 码力 | 11 页 | 159.17 KB | 6 月前3
Curve核心组件之mds – 网易数帆Curve核心组件之 MDS 陈威Curve 是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github Q&A基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查 • 快照克隆服务器MDS各个组件 MDS是中心节点,负责元数据管理、集群状态收集与调度。MDS包含以下几个部分: • Topology: 管理集群的 topo 元数据信息。 • Nameserver: Nameserver: 管理文件的元数据信息。 • Copyset: 副本放置策略。 • Heartbeat: 心跳模块。跟chunkserver进行交互,收集chunkserver上的负载信息、 copyset信息等。 • Scheduler: 调度模块。用于自动容错和负载均衡。TOPOLOGY topology用于管理和组织机器,利用底层机器的放置、网络的规划以面向业务提供如下功能和非功能需求。0 码力 | 23 页 | 1.74 MB | 6 月前3
Curve支持S3 数据缓存方案© XXX Page 1 of 9 Curve支持S3 数据缓存方案© XXX Page 2 of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 通过日志初步分析有2点原因© XXX Page 3 of 9 1.append接口目前采用先从s3 get,在内存中合并完后再put的方式,对s3操作过多 2.对于4k 小io每次都要和s3交互,导致性能非常差。 因此需要通过Cache模块解决以上2个问题。 整体设计 整个dataCache的设计思路,在写场景下能将数据尽可能的合并后flush到s3 读场景上,能够预读1个block大小,减少顺序读对于底层s3的访问频次。从这个思路上该缓存方案主要针对的场景是顺序写和顺序 读,而对于随机写和随机读来说也会有一定性能提升,但效果可能不会太好。 元数据采用2层索引 由于chunk大小是固定的(默认64M),所以Inode中采用maps3ChunkInfoMap用于保存对象存储的位置信息。采用2 0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve核心组件之Client - 网易数帆C u r v e 核 心 组 件 之 C l i e n t 吴汉卿CURVE CURVE是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟存储底座 • 可扩展存储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接 OpenStack 和 k8s • 网易内部线上无故障稳定运行400+天 • 已开源 • github主页: https://opencurve 热升级NEBD总体介绍 新版本Client/NEBD性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 01 02 03 04 Client总体介绍 FileManager:提供接口,记录已挂载卷 FileInstance:对应一个已挂载的卷 LeaseExecutor:负责定期与MDS通信,获取卷的元数据信息 元数据信息在打快照时会进行变化 MetaCache:元数据缓存 IOTracker:跟踪一个上层IO请求 IOSplitor:IO转换拆分 ChunkClient、CliClient:与Chunkserver进行通信0 码力 | 27 页 | 1.57 MB | 6 月前3
共 32 条
- 1
- 2
- 3
- 4













