新一代云原生分布式存储新一代云原生分布式存储—Curve 上 李小翠 网易数帆存储团队分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 场景介绍 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑存储的发展 互联网时代,数据大爆炸 大型主机 成本高 单点问题 扩容困难 各存储设备通过网络互联 各存储设备通过网络互联 大规模 弹性扩容 底层构建在分布式存储之上 云的概念 成本:共用基础设施 弹性:随意扩缩容 速度:更快的构建发布业务 底层构建在分布式存储之上 云原生的概念: 易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 PG有23种状态:Peering,Degraded等 • 强一致性协议对异常的容忍较差 使用WARO一致性协议 • 所有副本写完成返回客户端 • 延迟取决于所有副本中最慢的那一个块存储场景 为云主机提供云盘,云盘提供随机读写、快照(数据备份,灾备使用)、镜像(模板,自定义)功能。块存储场景 为物理机提供块设备 Linux IO栈 应用程序 -> 文件系统 -> 块设备层 -> 不同协议/驱动使用中的问题0 码力 | 29 页 | 2.46 MB | 6 月前3
Raft在Curve存储中的工程实践Curve对raft的优化项目背景 Curve是一个 高性能、更稳定、易运维 的 云原生 分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS Curve块存储和文件存储均采用raft协议整体架构 • 对接OpenStack平台为云主机提供高性能块 存储服务 • 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 支持在物理机上挂载使用块设备或FUSE文件 系统开源社区 社区运营 生态共建 开源共建 源码兜底 技术领先 目标 方法 影响力 降本 获客 用户 开发者 操作系统 芯片 数据库 云原生 AI训练 大数据 社区生态Curve介绍 01 02 raft和braft 03 raft在Curve中的应用 05 Q&A 04 Curve对raft的优化RAFT协议简介 什么是raft0 码力 | 29 页 | 2.20 MB | 6 月前3
MySQL 兼容性可以做到什么程度如 何 做 生 态兼 容 好的 MySQL 兼容性可以做到什么程度 胡中泉(舟济) 阿里云数据库解决方案架构师为什么要兼容 MySQL 01 The longer you look back, the farther you can look forward.也从阿里巴巴的“去IOE”运动说起 业务驱动下的分布式技术实践之路 5月17日,支付宝最后一台小型 机下线标志去IOE落下帷幕 首次双十一大考卡顿半分钟后稳 TDDL首次双十一 “去IOE完成” 天价账单 上云 2009 2011 2012 2013 2013 2015 TDDL 以中间件形态在阿里云上 发布: DRDS Oracle根据双十一350的交易量, 反推出了天价账单也谈所谓的“中间件” 中间件只是起点,PolarDB-X 可能是离终点最近的那个 对近十年的探索以及五年的上云 经验进行重新思考,面向未来设 从运维视角实现计算存储一体化 02 If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.业务系统 上游 Single Source of Truth 问题背景 数据孤岛怎么办? 下游MySQL 怎么做 Binlog Maxwell DebeziumPolarDB-X 完全兼容 MySQL0 码力 | 18 页 | 3.02 MB | 6 月前3
CurveFS方案设计文件系统快照 方案一:文件/目录级别快照 方案二:文件系统快照 关键点 元数据设计 数据结构 索引设计 文件空间管理 开发计划及安排 背景 为更好的支持云原生的场景,Curve需要支持高性能通用文件系统,其中高性能主要是适配云原生数据库的场景。当前Curve是实现了块存储,向上提供块设备服务,CurveFS会基于此实现。第一阶段的目标是实现 满足数据库场景的文件接口。 调研 开源fs 27909 性能对比 并对以上文件系统在相同环境进行了元数据节点性能测试: 。测试结果c开发的moosefs和fastcfs元数据性能远优于go开发的chubaofs和c开发的cephfs,理论上分析这个结果是合理的,分布式的元数据设 调研测试 计会涉及到多次rpc的交互。这里需要确认的一点是:我们需要怎样的元数据节点的性能? 可行性分析 方案对比 根据上述调研和测试结果,我们考虑了三种curvefs的元数据设计方案: 够用的。从可解决程度和解决的必要性考虑,选择第二种方 案。 关键点 mds volume 文件空间管理 文件系统的元数据所在的copyset分配策略(前期可以考虑都分配到同一个copyset上) metaserver inode/dentry的内存组织形式 数据持久化 client curvefs 的 client 开发 快照逻辑 各接口实现元数据交互流程 元数据设计 元数据设计分以下几个部分0 码力 | 14 页 | 619.32 KB | 6 月前3
Curve质量监控与运维 - 网易数帆v e 质 量 、 监 控 与 运 维 秦 亦 1/33背景 01 02 03 04 Curve质量控制 Curve监控体系 Curve运维体系Curve 是网易针对块存储、对象存储、云原生数据库、EC等 多种场景自研的分布式存储系统: 高性能、低延迟 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行近两年 已完整开源 • Curve所有代码均在github托管。新 代码需要通过CI测试和code review才 能合入master分支,确保新合入代码 的功能、正确性、规范性等都有基本 保障;而每日运行的dailybuild测试在 CI测试基础上增加了异常自动化测试 和混沌测试,确保master分支代码的 bug尽可能早地暴露出来。 通过这种流程,curve可以在一定 程度上保证master分支的稳定性。 master 10/33版本管理 通过测试集覆盖任意两个变量的所有取值组合。理论上两因素组合测 试最多可发现95%的缺陷,平均缺陷检出率也达到了86%,在用例数量 和缺陷检测能力上达到了平衡。因此,一般测试用例应该保证两因素组 合的100%覆盖。 多因素组合测试 生成的测试集可以覆盖任意t个变量(t>2)的所有取值组合。 基于选择的覆盖 选择最常用的参数值作为基础组合,在此基础上每次改变一个参数, 生成新用例。 16/330 码力 | 33 页 | 2.64 MB | 6 月前3
Curve 分布式存储设计Curve社区Curve的由来 1. 代码复杂/代码量大 2. 运维难度高 3. 无法满足高的性能需求Curve的设计目标 1. Curve云原生软件定义存储 2. Curve块存储 3. Curve文件存储 4. 高性能,易运维,云原生Curve块存储 1. 高性能分布式共享数据库场景 2. Curve块存储提供底层分布式共享存储 3. Polardb for PostgreSQL提供上层高性能数 (降低写放大) 7. data stripe (增大并发) 8. zerocopy 9. 云原生 核心设计Curve块存储 1. physical pool用于实现对机 器资源物理隔离 2. zone故障隔离的基本单元 3. server表示物理服务器 4. chunkserver物理服务器上 的服务实例 拓扑结构Curve块存储 1. Curve块存储将虚拟块设备 映射到文件 可扩展易运维 4. 云原生 设计目标Curve文件存储 1. 兼顾性能与容量的机器学习 场景 2. 快速跨云弹性发布的业务 3. 低成本大容量需求的业务 4. 中间件冷热数据自动分离 5. S3和POSIX统一访问需求 主要挑战和支持场景Curve Roadmap 1. 架构 1. 文件存储支持分布式缓存、完善冷热数据分层存储能力 2. 完善混合云、公有云上部署架构 3. 完善高性能3副本存储引擎,支持混合盘0 码力 | 20 页 | 4.13 MB | 6 月前3
Curve核心组件之mds – 网易数帆Curve核心组件之 MDS 陈威Curve 是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github 副本放置策略。 • Heartbeat: 心跳模块。跟chunkserver进行交互,收集chunkserver上的负载信息、 copyset信息等。 • Scheduler: 调度模块。用于自动容错和负载均衡。TOPOLOGY topology用于管理和组织机器,利用底层机器的放置、网络的规划以面向业务提供如下功能和非功能需求。 1. 故障域的隔离:比如副本的放置分布在不同机器,不同机架,或是不同的交换机下面。 能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔离的基本单元,一般来说属于不同zone的机 器至少是部署在不同的机架,一个server必须归属于一个 zone。 • server: 用于抽象描述一台物理服务器,chunkserver必须 归属一个于server。 • Chunkserver: 用于抽象描述物理服务器上的一块物理磁盘 (SSD)0 码力 | 23 页 | 1.74 MB | 6 月前3
Curve设计要点新一代分布式存储系统 Curve 李小翠Curve 是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多,线上异常演练 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: 测试环境: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 leader copyset scatter-width • 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client: 对接上层业务 • NEBD Server: 接受请求 调用Curve Client处理 • 升级只需重启Server 秒级影响易运维 • 丰富的metric体系 • prometheus + grafana0 码力 | 35 页 | 2.03 MB | 6 月前3
Curve核心组件之Client - 网易数帆r v e 核 心 组 件 之 C l i e n t 吴汉卿CURVE CURVE是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟存储底座 • 可扩展存储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接 OpenStack 和 k8s • 网易内部线上无故障稳定运行400+天 • 已开源 • github主页: https://opencurve MDS:只有主MDS才会监听端口 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 off: 8M len: 16M 请求落在两个逻辑chunk上,所以 请求会被拆分成两个子请求: ChunkIdx 1, off: 8M len 8M ChunkIdx 2, off: 0 len 8MCLIENT IO流程 子请求由哪个chunkserver处理,依赖以 用户请求的所有子请求完成后,调用 IOTracker::Done 12.调用异步请求回调,返回用户CLIENT IO请求重试 IO分发线程将拆分后的子请求通过RPC请求发往指定的Chunkserver上,RPC有可能会失败,一般情况下 处理逻辑是sleep一个较短时间后重试,但是存在两种特殊的场景: Chunkserver Overload: 这种情况下,对应的RPC Response中返回的0 码力 | 27 页 | 1.57 MB | 6 月前3
Curve文件系统元数据管理/B/E,指向文件/A/C 6、curve文件系统的多文件系统的设计 1、设计一个分布式文件系统需要考虑的点: 文件系统的元数据是否全缓存? 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? inode+dentry方式?当前curve块存储的kv方式? 是否有单独的元数据管理服务器? 2、其他文件系统的调研总结 fs 中心化元数据 内存namespace元数据 + chunk raft 块设备的元数据管理 cephfs 3、各内存结构体 时间复杂度 空间复杂度 特点 可用实现 Btree 一个节点上保存多条数据,减少树的层次(4~5层),方便从盘上读取数据,减少去盘上读取次数。适合在盘上和内存组织目录树。 google,https://github.com/abseil/abseil-cpp/tree/master/absl/c fsid+parentId+name , value : struct dentry; 分别从不同场景上进行分析,curve文件系统的元数据应该有以下的操作: 1、系统加载的时候,元数据从持久化介质加载。 2、业务运行过程中,元数据的增删改查。 3、系统退出的时候,元数据持久化。© XXX Page 7 of 24 场景一:系统加载的时候,元数据从持久化介质中加载。 元数据进行恢复的时候,有两种情况。0 码力 | 24 页 | 204.67 KB | 6 月前3
共 30 条
- 1
- 2
- 3













