CurveFS方案设计
list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 lru cache,因此 list 只能依赖 etcd 的 range 获取方式。如果需要对 list 加速,需要新的缓存结构 c. 扩展性/可用性/可靠性 依赖于第三方kv存储,目前是etcd CurveFS 单机内存元数据设计 类似 fastcfs 和 moosefs 的元数据设计方式,采用通用的 dentry,inode 于这种方式的开发: a. 性能 加载:数据量较大的情况下,元数据节点启动较慢;但是元数据使用 master-slave 可以降低 failover 情况下的加载时间 b. 扩展性/可用性/可靠性 扩展性不够,受限于单机的内存和磁盘,只能纵向扩展 可用性足够,由于是 master-slave 的方式,master 以同步方式调用 slave,slave 在内存中也缓存了全部元数据信息 持久化元数据以及保证多副本数据一致性。基于这种方式开发: a. 性能 由于元数据分片,获取元数据需要跟多个节点进行rpc的交互,因此性能相比单机要弱一些 b. 扩展性/可用性/可靠性 使用 multi-raft, 扩展性、可用性和可靠性与元数据节点一致 对比结论 CurveFS 近期要能支持mysql所要接口,长期需要支持通用文件接口。 kv 虽然改造简单,短期内对基本功能的支持没有问题,但这个架构不利于0 码力 | 14 页 | 619.32 KB | 5 月前3Curve文件系统元数据持久化方案设计
key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft 存在的问题? redis 改造 vs 自己实现? redis 中哈希表实现的优点? 参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: 每次写文件再 sync,那么性能就会下降很多) 所以,单靠 redis 的方案是不行了. redis 的高可用、高可扩方案? 主要是 redis cluster + 主从复制 (或者第三方 codis + 哨兵) redis cluster/codis 主要解决扩展性的问题,它会进行分片,每个 redis 实例保存分片的 key 主从复制主要解决高可用,一个分片实例挂 2 个从实例,当主 multiraft 可行,因为 leveldb 是可嵌入的,一个 raft 实例中可以绑定一个 leveldb 实例(leveldb 中的 wal 和 SST 文件都可以写到指定的目录) redis 改造 vs 自己实现? 结论:从目前元数据持久化的需要来看,更倾向于自己实现,理由如下: redis 目前不支持单独持久化 redis 中的某个 DB (一个 redis 实例可包含多个 DB) 或数据结构,这对于在要使用0 码力 | 12 页 | 384.47 KB | 5 月前3新一代云原生分布式存储
以达到高可靠、高可用、高可扩分布式存储的要素 要 素 拆 解 数据分布 —— 无中心节点/中心节点 均 衡 地址空间的每段数据会分布在不同机器的磁盘上,如 何找到这些数据? 可靠性 & 可用性 —— 多副本/EC 服务不可用时 间 数据一致性 —— 一致性协议 如何保证数据不丢?如何保证各种硬件故障的时候读 写都正常? 可扩展性 —— 和数据分布的方式相关0 码力 | 29 页 | 2.46 MB | 5 月前3CurveFS Copyset与FS对应关系
一台机器上能存放多少个inode和dentry 8.2 一台机器上建议的copyset数量 8.3 每个copyset建议管理存储容量的大小 1、背景 curvefs使用raft作为元数据一致性的保证。为了提高元数据的可扩展性和并发处理能力,采用元数据分片的方式管理inode和dentry的元数据。inode的分片依据是fsid + inodeid,dentry的分片依据是fsid + parentinodeid。借鉴 这块内容参考的curve。metaserver定时向mds上报心跳,心跳内容参考curve。调度上,如果采用类似chubaofs的方案,那么copyset就会一直处于一个不均衡的状态中。如果copyset是可readwrite状态,新创建的 文件和目录,会导致copyset管理的元数据越来越多;如果copyset管理的Inode分配完了,转为readonly状态,随着文件和目录的删除,copyset管理的0 码力 | 19 页 | 383.29 KB | 5 月前3Curve设计要点
新一代分布式存储系统 Curve 李小翠Curve 是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多,线上异常演练 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: 独立于核心服务 储到支持S3接口的 对象存储,不限制数量 异步快照、增量快照 从快照/镜像克隆 ( lazy/非lazy ) 从快照回滚数据组织形式 • 底层 可用性 / 可靠性 扩展性 / 负载均衡 向上提供无差别文件流 • Application 块/对象/EC等 感知具体格式 提供不同文件类型支撑不同上层应用数据组织形式 • PageFile/AppendFile/AppendECFile0 码力 | 35 页 | 2.03 MB | 5 月前3Curve文件系统元数据管理
要消耗比较多的内存,元数据服务的扩展性受限于内存,而且在元数据服务启动的 时候,需要等待一段时间加载内存。 一种是元数据需要全部加载到内存,这种情况下,元数据只需要加载一小部分主要的元数据,比如说super block这种,剩下的比如inode,dentry这种,按需加载,而且使用淘汰机制,内存中不常用的元数据可以淘汰出去。这种方式,扩展性好,元数据服务的扩展性不受限于内存,服务上的内存只有几百GB,而硬盘空0 码力 | 24 页 | 204.67 KB | 5 月前3副本如何用CLup管理PolarDB
CLup管理节点2 高可用机制自动切换 数据一致性保证 数据可用性 提供读写VIP 读写高可用 读写分离 多个读库之间负载均衡 负载均衡 读线性扩展 支持分库分表 高扩展性 写 VIP 读 VIP PG (Primary) PG (Standby1) PG (Standby2) PG (Standby3) 数据同步复制 写请求 读请求 应用层0 码力 | 34 页 | 3.59 MB | 5 月前3Curve核心组件之snapshotclone
chunk的修正版本号 locationSi ze size_t 可缺省,当前为CloneChunk时表示 location占用的字节数 location char[] 可缺省,当前为CloneChunk时表示 克隆源字段 bits uint32_t 可缺省,当前为CloneChunk时表示 bitmap的位数 bitmap char[] 可缺省,位图表 crc uint32_t 上述字段的crc校验码0 码力 | 23 页 | 1.32 MB | 5 月前3Curve核心组件之mds – 网易数帆
Curve核心组件之 MDS 陈威Curve 是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github ,可以以CopySet的粒度进行探活、配置变更,降低 开销。 3. 提高数据可靠性:在数据复制组过度打散的情况下,在发生多个节点同时故障的情况下,数据的可靠性会受 到影响。引入CopySet,可提高分布式存储系统中的数据持久性,降低数据丢失的概率。COPYSET ChunkServer,Copyset和Chunk三者之间的关系如下图: Mds在分配空间时,轮流在不同的copyset中分配 Schedule(系统调度)是为了实现系统的自动容错和负载均衡,这两个功能是分布式 存储系统的核心问题,也是 curve 是否能上生产环境的决定因素之一。 • 自动容错保证常见异常(如坏盘、机器宕机)导致的数据丢失不依赖人工处理,可 以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内存等资源的利用率最大化。SCHEDULE Schdedule的具体实现 Coordinator: 调度模块的对外接口。心跳会将0 码力 | 23 页 | 1.74 MB | 5 月前3Curve 分布式存储设计
NebdServer实现大部分的客 户端逻辑Curve块存储 故障对I/O抖动延迟的影响 FAULTS CASE CURVE I/O 抖动Curve文件存储 1. 元数据服务 2. 高性能 3. 可扩展易运维 4. 云原生 设计目标Curve文件存储 1. 兼顾性能与容量的机器学习 场景 2. 快速跨云弹性发布的业务 3. 低成本大容量需求的业务 4. 中间件冷热数据自动分离 50 码力 | 20 页 | 4.13 MB | 5 月前3
共 18 条
- 1
- 2