Curve质量监控与运维 - 网易数帆提交issue 开发设计 提交PR review +1 CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 合入master 分支 代码提交流程 异常自动化 测试 混沌测试 (每周一次) CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 邮件通知 Curve所有代码均在github托管。新 代码需要通过CI测试和code review才 20轮自动化随机故障注入 12/33单元测试 单元测试是软件开发的过程中最基本的测试,它用来对一个模块、一个函数或者一个类来进行 正确性检验的测试工作。 curve通过lcov统计代码覆盖率,衡量单元测试的完备程度,如下图所示: 13/33集成测试 测试目的 测试内容 单元测试后,有必要进行集成测试,发现 并排除在模块连接中可能发生的上述问题, 最终构成要求的软件子系统或系统。集成 度。因此,需要通过组合测试的方法,尽量用较少的用例数量覆盖绝大 多数情况: 两因素组合测试 通过测试集覆盖任意两个变量的所有取值组合。理论上两因素组合测 试最多可发现95%的缺陷,平均缺陷检出率也达到了86%,在用例数量 和缺陷检测能力上达到了平衡。因此,一般测试用例应该保证两因素组 合的100%覆盖。 多因素组合测试 生成的测试集可以覆盖任意t个变量(t>2)的所有取值组合。0 码力 | 33 页 | 2.64 MB | 6 月前3
新一代云原生分布式存储•服务质量要求:数据不能丢、服务随时可用、弹性扩缩容 要什么 •成百上千台存储节点 •磁盘故障、机器故障、网络故障概率性发生 有什么 分布式存储系统需要满足接口需求,并且有持续监控、错误检测、容错与自动恢复的能力 以达到高可靠、高可用、高可扩分布式存储的要素 要 素 拆 解 数据分布 —— 无中心节点/中心节点 均 衡 地址空间的每段数据会分布在不同机器的磁盘上,如 io持续抖动,util持续100% 网络丢包 随着loss增大,还有部分io 随着loss增大,无法进行io 机器宕机 io略微波动 io卡住10s以上 机器卡住 io抖动4s 不可恢复主要亮点 — 高质量 良好的模块化和抽象设计;完善的测试体系 单元测试覆盖率 lines functions link Curve 85.4% 89% curve Ceph 37.1% 43.3% ceph应用情况 Curve 在网易集团内有大规模的生产应用0 码力 | 29 页 | 2.46 MB | 6 月前3
Curve元数据节点高可用这种情况是常态,大概率情况ElectionTime略大于ElectionTimeout, LeaseTime >= 1.5*ElectionTimeout > ElectionTime 这种情况下etcd集群恢复正常之后,MDS与etcd集群的lease维持正常;定期get Leader/MDS1正常;Observe正常 4.2.4 异常情况3:Etcd的leader发生重新选举,MDS1受到影响退出,不一定可以正常处理。 GetTimeout < ElectionTime 4.2.4.1 LeaseTIme < ElectionTime的情况 这种情况发生概率较小,etcd集群选出新leader耗时较长 当etcd集群恢复正常的情况下,MDS1的lease已过期,etcd server把MDS1注册过来的Key删掉© XXX Page 22 of 30 2. 1. 此时会有两件事情发生, 顺序不定: 一是MDS1定期去get 这种情况下出现双主的最长时间为PeriodicGetTime(蓝色直线段), 短暂时间内的双主情况是可以接受的。 4.2.4.2 GetTimeout < ElectionTime 当etcd集群恢复正常的情况下,MDS1的lease没有过期,但是get Leader/MDS1超时。© XXX Page 23 of 30 1. 2. MDS1会退出,但lease的最短过期时间为0,最长过期时间为LeaseTIme0 码力 | 30 页 | 2.42 MB | 6 月前3
CurveFS Copyset与FS对应关系副本数量调度器。根据当前copyset的副本数生成副本增删任务; RecoverScheduler: 恢复调度器。根据当前copyset副本的存活状态生成迁移任务。 结论:心跳参考curve。目前这些调度器在curvefs第一阶段不用全部实现。所有和均衡相关的,暂时不做。只做和故障处理相关的副本补全恢复的调度。 6、详细设计 6.1 创建fs curvefs管理工具发起创建fs命令,mds收到 带上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
Curve设计要点MDS、Snapshotcloneserver 通过 etcd 选主,实现高可用高可用 chunkserver 使用raft,2N + 1 个副本允许 N 副本异常自治 • 自动故障恢复 • 多对多,恢复时间短 • 精确的流量控制,对io几乎无影响自治 • 集群负载和资源均衡 • leader copyset scatter-width • 无需人工干预 • 对io影响几乎无影响易运维0 码力 | 35 页 | 2.03 MB | 6 月前3
Curve核心组件之chunkserverrver核心模块-CopysetNode 换盘(CS1对应的盘)后重新上线的流程 初始状态,copyset1,copyset2,copyset3的三个副本分别在 CS2,CS3,CS4上,完成恢复后,CS2上的copyset1,2,3迁移到CS1上 ① CS1换了新盘,并重新格式化后启动chunkserver ② CS1重新向MDS注册 ③ MDS生成新的chunkserver id和token给CS1 raft日志,当CS1成功赶上进度时,本次raft成员变更成功完成, CS1成为了复制组的一员, CS2不再属于这个复制组。 ⑧ CS3在下一次心跳中向MDS报告本次raft成员变更已完成 ⑨ 等CS1上的copyset数量恢复到和其它节点相差不大时,集群回 到均衡状态,迁移结束ChunkServer核心模块-DataStore ChunkServer的目录结构: • 每个copyset一个目录,后面三个目录由bra0 码力 | 29 页 | 1.61 MB | 6 月前3
Curve核心组件之Client - 网易数帆以链接库的形式提供给QEMU使用 NEBD Server(part2):将NEBD Client的请求转 发到Curve Client 升级过程只需要重启NEBD Server即可,IO可在 1~5s内恢复NEBD 整体介绍CURVE基本架构 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化NEBD性能优化 场景:fio 128深度、4K随机写0 码力 | 27 页 | 1.57 MB | 6 月前3
Raft在Curve存储中的工程实践由于chunk可以覆盖写,所以chunk的写入天然具有幂 等性。 • 对chunk打快照不需要把chunk重新换个地方复制一遍, 只需要记录下chunk文件的list。 • follower从快照恢复,只需要leader把最近一次快照 涉及到chunk数据给到follower,follower再从上次快 照后的日志重放即可。 • chunkserver服务重启,只需要加载快照,然后对 chunk重放快照之后日志即可。0 码力 | 29 页 | 2.20 MB | 6 月前3
Curve核心组件之mds – 网易数帆群中leader的分布情况生成leader变更任务; • ReplicaScheduler 是副本数量调度器,根据当 前copyset的副本数生成副本增删任务; • RecoverScheduler 是恢复调度器,根据当前 copyset副本的存活状态生成迁移任务。 触发任务: • RapidLeaderScheduler 是快速leader均衡器, 由外部触发,一次生成多个leader变更任务,0 码力 | 23 页 | 1.74 MB | 6 月前3
curvefs client删除文件和目录功能设计YPE_TRASH并且将该节点从文件树移除然后放到trash链表中表示该文件已经进入回收 若其trashtime大于0 站。 通过META文件系统来访问trash 通过trash机制,可实现文件的恢复UNDEL 回收站实现了一个timer,定期判断trashtime,执行定期清理回收站 清理时,当文件仍处于打开状态,则还需要进入下sustained/reserve中。 sustained机制/reserve机制0 码力 | 15 页 | 325.42 KB | 6 月前3
共 11 条
- 1
- 2













