Curve质量监控与运维 - 网易数帆为了确保最终交付的软件满足需求,必须将质量控制贯穿于设计、开发到测试的整个流程中。 设计  设计流程  文档规范 开发  编码规范与提交流程  版本管理 测试  测试方法论  CI与异常测试 6/33设计流程 Curve团队采用敏捷开发模式,负责人在制定迭代计划时,确认哪些任务需要设计 文档:  小需求(改动小)将实现思路记录到任务管理系统中(JIRA),即可进行开发; 代码提交流程 异常自动化 测试 混沌测试 (每周一次) CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 邮件通知 Curve所有代码均在github托管。新 代码需要通过CI测试和code review才 能合入master分支,确保新合入代码 的功能、正确性、规范性等都有基本 保障;而每日运行的dailybuild测试在 CI测试基础上增加了异常自动化测试 从测试粒度看,测试可以分为单元测试、集成测试、系统测试; 从测试角度看,测试可以分为常规测试、性能测试、异常测试、稳定性测试、混沌测试,等等  单元测试 1300+用例 行覆盖80%+,分支覆盖70%+  集成测试 Given When Then 设计方法 500+用例  异常测试 40+自动化用例  混沌测试 20轮自动化随机故障注入 12/33单元测试 单元测试是软0 码力 | 33 页 | 2.64 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 ElectionTime 4.2.4.3 MDS1、MDS2、MDS3的租约全部过期 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是元数据节点,负责空间分配,集群状态监控,集群节点间的 in成功© XXX Page 13 of 30 异常情况1:备MDS2中途退出 step1:MDS3收到MDS2的key被删除的消息 step2: MDS3重新获取到有相同前缀Leader的key为{ [Leader/MDS1, revision:2]}, 因此watch Leader/MDS1© XXX Page 14 of 30 异常情况2:EtcdLeader重新进行leader选0 码力 | 30 页 | 2.42 MB | 6 月前3
 新一代云原生分布式存储多副本: 写三次? 一致性协议 一致性:WARO(Write-all-read-one)、Quorum WARO • 所有副本写成功 • 读可用性高:可以读任一副本 • 写可用性较低,任一副本异常写失败 Quorum • 大多数副本写成功 • 读写服务可用性做一个折中 • 写性能提升,速度取决于写的较快的大多数 W R client W W W client分布式存储介绍 rbd\udata.6855c174a277a30.000000000005c2架构简介 — 多副本一致性协议 复制策略 • 主动拷贝、链式复制、splay复制 异常处理 • PG有23种状态:Peering,Degraded等 • 强一致性协议对异常的容忍较差 使用WARO一致性协议 • 所有副本写完成返回客户端 • 延迟取决于所有副本中最慢的那一个块存储场景 为云主机提供云盘,云盘提供随机读 )功能。块存储场景 为物理机提供块设备 Linux IO栈 应用程序 -> 文件系统 -> 块设备层 -> 不同协议/驱动使用中的问题 • io抖动(一致性协议): 异常场景(比如阵列卡一致性巡检,坏盘,慢盘,网络异常),服务升级 • 性能差(一致性协议):在通用硬件下,无法支撑数据库、kafka等中间件对存储性能和稳定性要求 • 容量不均衡(数据放置):集群各节点容量不均衡需要人为干预0 码力 | 29 页 | 2.46 MB | 6 月前3
 Curve设计要点是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多,线上异常演练 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve 概述背景 01 02 03 04 总体设计 系统特性 近期规划背景 • 多个存储软件:SDFS、NEFS、NBS • 已有的开源软件:Ceph • 不能胜任性能、延迟敏感的场景 • 异常场景抖动较大(比如慢盘场景) • 去中心节点设计在集群不均衡的情况下需要人工运维 • 基于通用分布式存储构建上层存储服务背景 01 02 03 04 总体设计 系统特性 近期规划基本架构 测试环境:6台服务器*20块SATA SSD,E5-2660 v4,256G,3副本场景高可用 核心组件支持多实例部署,允许部分实例异常 MDS、Snapshotcloneserver 通过 etcd 选主,实现高可用高可用 chunkserver 使用raft,2N + 1 个副本允许 N 副本异常自治 • 自动故障恢复 • 多对多,恢复时间短 • 精确的流量控制,对io几乎无影响自治 • 集群负载和资源均衡0 码力 | 35 页 | 2.03 MB | 6 月前3
 Raft在Curve存储中的工程实践在curve自动容错和负载均衡时,需要进行raft配 置变更。 • 自动容错保证常见异常(如坏盘、机器宕机)导 致的数据丢失不依赖人工处理,可以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内 存等资源的利用率最大化。 Curve块存储和文件存储的配置变更实现基本一致CURVE的RAFT配置变更 异常场景下配置变更 • ReplicaSchedule • RecoverSchedule RecoverSchedule 均衡场景下配置变更 • CopySetSchedule • LeaderSchedule • RapidLeaderSchedulerCURVE的RAFT配置变更 异常场景下配置变更 • ReplicaSchedule (a, b) -> (a, b, c) or (a, b, c, d) -> (a, b, c, d) 保持raft的副本个数为指定值 • RecoverSchedule0 码力 | 29 页 | 2.20 MB | 6 月前3
 CurveFS S3本地缓存盘方案缓存目录中的文件上传到远端对象存储集群,上传成功后,删除本地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬盘缓存目录容量情况,如果容量已经达到阈值了,则进行文件的清理工作。 另外,异常管理模块处理客户端挂掉后的文件重新上传问题。 主要数据结构定义 class DiskCacheManagerImpl : public DiskCacheManager{ public: 工作队列: 该队列中保存缓存盘中的待上传文件名 工作线程: 遍历工作队列(队列swap),从缓存盘目录读取到文件内容并上传到对象存储。文件上传到对象存储后,直接删除。 工作队列做好互斥管理 异常管理 如果客户端挂掉,那么写缓存盘中可能会有残留文件没有上传到对象存储;如果忘记处理,那么这些数据也就相当于是丢失了。 所以在客户端初始化建立的时候,可以先遍历写缓存目录,如果里面有文件,那么则上传到远端对象存储0 码力 | 9 页 | 150.46 KB | 6 月前3
 Curve核心组件之mds – 网易数帆OFFLINESCHEDULE Schedule(系统调度)是为了实现系统的自动容错和负载均衡,这两个功能是分布式 存储系统的核心问题,也是 curve 是否能上生产环境的决定因素之一。 • 自动容错保证常见异常(如坏盘、机器宕机)导致的数据丢失不依赖人工处理,可 以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内存等资源的利用率最大化。SCHEDULE Schdedule的具体实现 Coordinator:0 码力 | 23 页 | 1.74 MB | 6 月前3
 curvefs client删除文件和目录功能设计还有两种方案: ,二是每个fs一个trash,并且trash不能放在fs的根目录下,因为存在跟用户的目录重名的问题。 一是使用全局唯一的trash 倾向于使用方案1,各方面实现上较为简单,异常处理不会很复杂,查询工具可以先实现一个简单的。 3. 是否需要做session机制(在metaserver打开),来维护inode的打开情况? 经讨论,需要实现session机制,以应对打开文件被另一个进程删除的场景的场景。0 码力 | 15 页 | 325.42 KB | 6 月前3
 TGT服务器的优化线程也要使用这些数据,多线程冲突,数据一 致性问题就来了对TGT的性能优化(续) • 为每一个target增加一把锁 • Target event loop (TEL)线程和管理面线程使用这把锁互斥 • TEL在运行时锁住这把锁,管理面只能等待,等TEL线程进入epoll wait状 态,会释放这把锁,管理面可以增删改target信息。 • 不需要target list lock • 因为TEL线程只存取自0 码力 | 15 页 | 637.11 KB | 6 月前3
 CurveFS Copyset与FS对应关系uest请求需要带上copyset信息。 7.2 mds端 1、需要实现topo模块 2、实现mds和metaserver的心跳 3、实现fs和copyset的分片策略的实现 4、实现出现异常场景下的数据恢复,副本修复的调度。 7.3 metaserver端 1、需要提供copyset的创建功能 2、由copyset负责inode和dentry的管理 3、定期向mds上报心跳,并根据心跳结果执行配置变更0 码力 | 19 页 | 383.29 KB | 6 月前3
共 10 条
- 1
 













