Curve核心组件之mds – 网易数帆当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve 概述整体架构 01 02 03 MDS各组件详细介绍 Q&A基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查 • 快照克隆服务器MDS各个组件 MDS是中心节点,负责元数据管理、集群状态收集与调度。MDS包含以下几个部分: • Topology: 管理集群的 topo 元数据信息。 • Nameserver: 管理文件的元数据信息。 • Copyset: 副本放置策略。 • Heartbeat: 心跳模块。 故障域的隔离:比如副本的放置分布在不同机器,不同机架,或是不同的交换机下面。 2. 隔离和共享:不同用户的数据可以实现固定物理资源的隔离和共享。 • pool: 用于实现对机器资源进行物理隔离,server不能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔离的基本单元,一般来说属于不同zone的机 器至少是部署在不同的机架,一个server必须归属于一个0 码力 | 23 页 | 1.74 MB | 6 月前3
Curve设计要点李小翠Curve 是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多,线上异常演练 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github • 异常场景抖动较大(比如慢盘场景) • 去中心节点设计在集群不均衡的情况下需要人工运维 • 基于通用分布式存储构建上层存储服务背景 01 02 03 04 总体设计 系统特性 近期规划基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver Chunkserver 数据存储 数据一致性基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查基本架构 • 快照克隆服务器 独立于核心服务 储到支持S3接口的 对象存储,不限制数量 异步快照、增量快照 从快照/镜像克隆 ( lazy/非lazy ) 从快照回滚数据组织形式0 码力 | 35 页 | 2.03 MB | 6 月前3
Curve质量监控与运维 - 网易数帆Curve监控体系 Curve运维体系Curve 是网易针对块存储、对象存储、云原生数据库、EC等 多种场景自研的分布式存储系统: 高性能、低延迟 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行近两年 已完整开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github 单个模块的误差积累是否会放大,从而 达到不可接受的程度。 功能测试 站在使用者的角度,对模块提供的功能进行完备 的测试。 异常测试 制造或模拟系统异常(磁盘错误、网络错误、资源 冲突等)、依赖服务异常、应用本身异常等非正常 情况,测试软件的性能和稳定性是否符合预期。 规模测试 测试模块在一定规模下是否能够正常工作,是否 会出现异常或者崩溃, 14/33系统测试 并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示: Prometheus——面向云原生应用程序的开源 的监控&报警工具,curve利用它进行监控指标 的采集与存储。 Daily reporter——python脚本,定时从 Grafana获取指定集群的图表,生成集群监控 日报,并通过邮件发送。0 码力 | 33 页 | 2.64 MB | 6 月前3
Curve核心组件之chunkserverCURVE是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟存储底座 • 可扩展存储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接 openstack 和 k8s 网易内部线上无故障稳定运行500+天 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github 03 04 ChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 功完成, CS1成为了复制组的一员, CS2不再属于这个复制组。 ⑧ CS3在下一次心跳中向MDS报告本次raft成员变更已完成 ⑨ 等CS1上的copyset数量恢复到和其它节点相差不大时,集群回 到均衡状态,迁移结束ChunkServer核心模块-DataStore ChunkServer的目录结构: • 每个copyset一个目录,后面三个目录由braft管理,data目录由DataStore管理0 码力 | 29 页 | 1.61 MB | 6 月前3
Curve核心组件之Client - 网易数帆CURVE是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟存储底座 • 可扩展存储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接 OpenStack 和 k8s • 网易内部线上无故障稳定运行400+天 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构0 码力 | 27 页 | 1.57 MB | 6 月前3
CurveFS Copyset与FS对应关系应关系 curvefs的元数据的分片,需要考虑到在创建inode的时候,其实是不知道inodeid的,在创建完成之后,才有inodeid。inodeid的分配最好下放到各个分片去进行处理。否则整个集群的inode都去一个地方获取id会 造成巨大的锁开销,这个是不能接受的。 curve块设备的元数据管理,在分配数据的时候,offset一开始就是知道的,这是和curvefs分配很大的一个不同点。 用copyset的影响比较大的方面在其他地 方。一个是copyset的数目,如果的每个fs独占copyset,那么整个系统的copyset的个数一定会比非独占多。copyset对资源的占用开销大不大。 会不会因为太吃资源导致性能反而下降。chubaofs的 大量的copyset 方案里面,每一个metanode上能够服务的copyset个数是有限制的,当内存和磁盘的到达一定的限度之后,这个met copyset 带来的copyset数量过多影响性能的问题。 3.3 copyset个数是否可以动态调整? 根据copyset个数是否可以动态调整,有两种实现。 一种是curve块存储方案,在集群初始化的时候,把所有的copyset创建好。采用这种方式, 可以采用hash的方式去确定inode的分片。比如说, , copysetid = (fsid + inodeid << shift )0 码力 | 19 页 | 383.29 KB | 6 月前3
Raft在Curve存储中的工程实践成为领导者。 • Follower: 响应来自其他服务器的请求,如果接受不 到消息,就变成候选人并发起一次选举。 • 时间被划分成一个个的任期,每个任期开始都是一次 选举。 • 选举成功,领导⼈会管理整个集群直到任期结束。 • 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. le 点初始状态一致的时候,保证节点之间状态一致。 raft日志复制RAFT协议简介 raft配置变更 • 配置:加入一致性算法的服务器集合。 • 集群的配置不可避免会发生变更,比如替换宕机的机器。 直接配置变更可能出现双主问题 • 共同一致(joint consensus) • 集群先切换到一个过渡的配置(old + new),一旦共同一 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 client:接受用户请求,采用fuse的方式挂载挂载使用。 • 元数据集群:mds 和 metaserver。 • mds:保存元数据,包括topo信息、文件系统信 息、元数据分布信息等,持久化到etcd中。 • metaserver:采用raft协议3副本的方式保存文 件文件的元数据,包括inode,dentry,文件的 空间分配信息。 • 数据集群:采用外部存储,S3或者Curve块存储,保 存写入文件的数据。Curve文件存储RAFT应用0 码力 | 29 页 | 2.20 MB | 6 月前3
Curve元数据节点高可用MDS使用election模块的功能进行选主 4.1 Curve中MDS的选举过程 4.2 图示说明选举流程 4.2.1 正常流程 4.2.2 异常情况1:MDS1退出,可以正常处理 4.2.3 异常情况2:Etcd集群的leader发生重新选举,MDS1未受影响,可以正常处理 4.2.4 异常情况3:Etcd的leader发生重新选举,MDS1受到影响退出,不一定可以正常处理。 4.2.4.1 LeaseTIme 4.2.4.4 总结 4.2.5 异常情况四: Etcd集群与MDS1(当前leader)出现网络分区 4.2.5.1 事件一先发生 4.2.5.2 事件二先发生 4.2.6 异常情况4:Etcd集群的follower节点异常 4.2.7 各情况汇总 1. 需求 mds是元数据节点,负责空间分配,集群状态监控,集群节点间的资源均衡等,mds故障可能会导致client端无法写入。 因此,mds需要做高可用。满足多个mds 需要解决的问题就是:如何确定主备节点。 2. 技术选型 提供配置共享和服务发现的系统比较多,其中最为大家熟知的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time0 码力 | 30 页 | 2.42 MB | 6 月前3
新一代云原生分布式存储伪随机算法在服务器数量特别大的时候接近均衡 • 节点故障(DiskNums)变更会涉及其他数据的迁移 有中心节点:持久化对应关系 • 需要将数据分布(元数据)持久化 • 中心节点感知集群的信息,进行资源实时调度 • 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB, 16MB) io抖动(一致性协议): 异常场景(比如阵列卡一致性巡检,坏盘,慢盘,网络异常),服务升级 • 性能差(一致性协议):在通用硬件下,无法支撑数据库、kafka等中间件对存储性能和稳定性要求 • 容量不均衡(数据放置):集群各节点容量不均衡需要人为干预 • 上述问题和架构涉及、核心功能的选型有关,在已有开源版本上改进代价很大分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 运维场景 Curve Ceph 加盘 对IO无影响 秒级io影响 服务端升级 对IO无影响 重启管控面IO无影响,重启osd io秒级影响 客户端升级 热升级,秒级抖动 不支持热升级,需要业务停服 集群监控 丰富的metric metric类型较少主要亮点 — 更稳定 异常场景 Curve Ceph 坏盘 基本无抖动 无明显抖动 慢盘 io持续抖动,但util未100% io持续抖动,util持续100%0 码力 | 29 页 | 2.46 MB | 6 月前3
Curve 分布式存储设计核心设计Curve块存储 1. physical pool用于实现对机 器资源物理隔离 2. zone故障隔离的基本单元 3. server表示物理服务器 4. chunkserver物理服务器上 的服务实例 拓扑结构Curve块存储 1. Curve块存储将虚拟块设备 映射到文件 2. 每个文件包含的chunk分散 在集群的存储节点 3. chunkserver按照故障域分组 4. copyset中的节点属于不同的0 码力 | 20 页 | 4.13 MB | 6 月前3
共 17 条
- 1
- 2













