Curve支持S3 数据缓存方案
© XXX Page 1 of 9 Curve支持S3 数据缓存方案© XXX Page 2 of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程0 码力 | 9 页 | 179.72 KB | 5 月前3Curve 分布式存储设计
拓扑结构Curve块存储 1. Curve块存储将虚拟块设备 映射到文件 2. 每个文件包含的chunk分散 在集群的存储节点 3. chunkserver按照故障域分组 4. copyset中的节点属于不同的 故障域 数据组织Curve块存储 IO流程Curve块存储 1. chunkserver负责数据的存储 2. RAFT协议保持数据的一致 性 3. chunkfile 兼顾性能与容量的机器学习 场景 2. 快速跨云弹性发布的业务 3. 低成本大容量需求的业务 4. 中间件冷热数据自动分离 5. S3和POSIX统一访问需求 主要挑战和支持场景Curve Roadmap 1. 架构 1. 文件存储支持分布式缓存、完善冷热数据分层存储能力 2. 完善混合云、公有云上部署架构 3. 完善高性能3副本存储引擎,支持混合盘 4. 文件存储支持数据存储到HDFS、rados等引擎 大文件读写性能优化,RAFT优化,降低写放大 3. 功能 1. 文件存储支持回收站/生命周期管理/配额/用户权限等 2. 支持NFS、CIFS/SMB、HDFS等协议 3. 块存储支持按存储池创建卷Curve 社区介绍 1. Curve的成长离不开社区贡献者的支持和参与。非常欢迎广大 社区用户为Curve贡献代码、文档,提交issue和改进网站。我 们愿意为您提供必要的支持 2. 社区成员组成: 网易杭研、网易云0 码力 | 20 页 | 4.13 MB | 5 月前3Curve核心组件之mds – 网易数帆
topology用于管理和组织机器,利用底层机器的放置、网络的规划以面向业务提供如下功能和非功能需求。 1. 故障域的隔离:比如副本的放置分布在不同机器,不同机架,或是不同的交换机下面。 2. 隔离和共享:不同用户的数据可以实现固定物理资源的隔离和共享。 • pool: 用于实现对机器资源进行物理隔离,server不能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔 ,以实现统一存储系统的需求,即在单个存储系统中多副 本PageFile支持块设备、三副本AppendFile(待开发)支持在线对象存储、AppendECFile(待开发)支持 近线对象存储可以共存。 如上所示LogicalPool与pool为多对一的关系,一个物理pool可以存放各种类型的file。当然由于curve支持 多个pool,可以选择一个logicalPool独享一个pool。 模块进行均衡及配置变更的依据 • 通过chunkserver定期上报copyset的copyset的epoch, 检测chunkserver的copyset与mds差异,同 步两者的copyset信息 • 支持配置变更功能,在心跳回复报文中下发mds发起的配置变更命令,并在后续心跳中获取配置 变更进度。HEARTBEAT MDS端:mds 端的心跳主要由三个部分组成: • TopoUpdater: 根据0 码力 | 23 页 | 1.74 MB | 5 月前3Curve设计要点
收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查基本架构 • 快照克隆服务器 独立于核心服务 储到支持S3接口的 对象存储,不限制数量 异步快照、增量快照 从快照/镜像克隆 ( lazy/非lazy ) 从快照回滚数据组织形式 • 底层 可用性 / 可靠性 扩展性 / 负载均衡 向上提供无差别文件流 多个单副本的 chunk 形成 EC 组 一个对象作为 EC 组的一个满条带 挖洞即时空间回收拓扑 • 管理和组织机器 • 软件单元:chunkserver • 物理机:server • 故障域:zone • 物理池:poolIO流程 client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4.34 7 3.7 2.423 4K随机写 4K随机读 38% 34.5% 测试环境:6台服务器*20块SATA SSD,E5-2660 v4,256G,3副本场景高可用 核心组件支持多实例部署,允许部分实例异常 MDS、Snapshotcloneserver 通过 etcd 选主,实现高可用高可用 chunkserver 使用raft,2N + 1 个副本允许 N 副本异常自治0 码力 | 35 页 | 2.03 MB | 5 月前3新一代云原生分布式存储
弹性:随意扩缩容 速度:更快的构建发布业务 底层构建在分布式存储之上 云原生的概念: 易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 通常意义是支持 POSIX 接口 传统意义的文件系统: Ext4 对指定地址空间进行随机读写 传统意义的块存储:磁盘分布式存储的要素 03 04 Ceph 架构简介 | 块存储场景 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑架构简介 — 总体架构 开源分布式存储界的扛把子 支持块存储、文件存储、对象存储架构简介 — 概念介绍 object:存储单元 PG:Placement Groups 归置组 归置组中的成员为副本 OSD:Object 分布式存储的要素 02 03 04 Ceph 架构简介 | 块存储场景 | 使用中的问题 Curve 架构简介 | 主要亮点 | 应用情况 FAQ 答疑架构简介 — 总体架构 支持块存储、文件存储(多种存储后端)架构简介 — 概念介绍 Segment: 空间分配的基本单元 Chunk: 数据分片 Copyset: 复制组 ChunkServer: 管理一个磁盘进程架构简介0 码力 | 29 页 | 2.46 MB | 5 月前3Curve文件系统元数据管理
进行组织,还有一些因素需要考虑。 是mds节点上组成一个全局的结构体,还是分目录,按照一个目录进行组织。 这需要考虑的元数据管理的分片策略。当前curve文件系统目的是提供一个通用的文件系统,能够支持海量的文件,这就需要文件系统的元数据有扩展能力。元数据管理仅使用一台元数据管理服务器是不够的。使 用多台元数据服务器需要对元数据进行合理的分片。 当前的一个可行方案是按照inodeid进行分片。分 inode B dentry信息 0 + A → 100 100 + D → 400 200 + E → 300 0 + B → 200 这里rename的时候,涉及到inode信息跨节点迁移。需要引入分布式锁,是个难点。 symbolic link: 这个类型的文件和普通文件一样创建删除,区别在于,在inode信息中记录需要链接到的地址。 hardlink:生成一个hardlink c请求,对性能的影响 可能没有想象中的大。一旦client知道了文件或者目录的inodeid,后续对inode的修改,都不需要去先查询dentry信息,可能直接对inode进行修改。 还有将来如果支持多挂载或者一写多读或者多写多读的场景,那么面临着client的缓存失效的问题,这个时候需要去metaserver重新查询inode的信息,这个查询也不需要重新查询dentry信息。因为一个文件或者0 码力 | 24 页 | 204.67 KB | 5 月前3副本如何用CLup管理PolarDB
数据赋能│价值创新 关于我 《PostgreSQL修炼之道:从小工到专家》的作者,中 启乘数科技联合创始人,PostgreSQL中国用户会常委。 从业近20年,拥有20年数据库、操作系统、存储领 域的工作经验,历任过阿里巴巴高级数据库专家、 网易研究院开发专家,从事过阿里巴巴Greenplum、 PostgreSQL、 MySQL数据库的架构设计和运维。 既熟悉数据库的,是最早的Oracle 数据中心1 CLup管理节点2 高可用机制自动切换 数据一致性保证 数据可用性 提供读写VIP 读写高可用 读写分离 多个读库之间负载均衡 负载均衡 读线性扩展 支持分库分表 高扩展性 写 VIP 读 VIP PG (Primary) PG (Standby1) PG (Standby2) PG (Standby3) 数据同步复制 写请求0 码力 | 34 页 | 3.59 MB | 5 月前3curvefs client删除文件和目录功能设计
de。 目录的nlink字段与文件的nlink字段不同, , 并且在目录下, , 删除目录nlink相应的减1。 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 目录不支持硬链接。 二是删除时lookup count未考虑: lookup count 指的是文件的访问计数。当文件/目录被打开时, ,该文件/目录仍然可以被打开的进程访问,不会造成崩溃或报错,我们的curvefs也需要实现 sefs的演进也是可以的。 我们的整个架构设计本身就类似chubao方式,这个方案本身是chubaofs的成熟方案,说明是已经被验证过是可行的方案。 缺点: 由于link、unlink等接口涉及跨服务器的两个请求的处理,可能会存在孤儿inode的问题,这一情况,chubaofs是通过运维手段去修复,见遗留问题。moosefs由于单mds,不存在这个问题。 方案设计思考 首先我们可以确定以下几个设计点:0 码力 | 15 页 | 325.42 KB | 5 月前3CurveFS Copyset与FS对应关系
r。 curvefs的topo信息的层级最终是这样: →pool :存储池(curve的physical pool和logic pool这里合并,只保留一个pool) →zone:可用域 →server:代表着一台服务器 →metaserver:代表着一块盘© XXX Page 9 of 19 每个copyset的由处于不同zone的metaserver组成复制组。0 码力 | 19 页 | 383.29 KB | 5 月前3TGT服务器的优化
服务器的优化块设备协议 • NBD • Linux专有块设备协议 • iSCSI • 广泛支持的外部设备协议(块,磁带等)Curve云原生存储支持块设备 • 通过NBD,只支持Linux • 通过SDK API,目前只支持Linux • PFS • 扩大使用范围 • 通过iSCSI支持更多系统,例如Windows, 类UNIX系统等,使用两项基础 技术 • TCP/IP • SCSI open-iscsi • Windows iSCSI 发起者 • 服务器端 • 必须是CurveBS原生支持的平台,因为需要curve原生接口,目前是LinuxiSCSI target服务器 • LINUX LILO • 一般用于输出内核本地块设备 • TCMU • 作为LILO支持用户态的接口 • 如何评价LILO • 输出内核块设备I/O效率高 • 不利于把复杂的存储协议代码搬进内核,例如(curve 比较久的历史,原来叫STGT,后来改成TGT • 纯用户态,不与内核绑定 • 支持复杂的存储系统,例如ceph rbd, sheepdog, glfs • 纯C代码,外加一些脚本 • 完整的源代码和维护工具、手册 • 编写IO驱动比较容易,容易扩展支持新的存储系统 • 代码独立,容易编译、调试、修改,适应性强让TGT支持curve • 编写curve驱动,底层异步提交I/O,pipeline •0 码力 | 15 页 | 637.11 KB | 5 月前3
共 23 条
- 1
- 2
- 3