Curve质量监控与运维 - 网易数帆当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行近两年 已完整开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve Curve 3/33为用户服务 作为一个复杂的大型分布式存储系统,Curve 需要利用科学的方法论和专业的工具,在整个 参考文献 8/33代码编写规范 Curve代码编写规范遵循Google Style Guides(https://google.github.io/styleguide/) 9/33新代码提交 Dailybuild测试 提交issue 开发设计 提交PR review +1 CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 合入master 分支 代码提交流程 异常自动化 查、单元测试、集成测 试、覆盖率80%卡点) 邮件通知 Curve所有代码均在github托管。新 代码需要通过CI测试和code review才 能合入master分支,确保新合入代码 的功能、正确性、规范性等都有基本 保障;而每日运行的dailybuild测试在 CI测试基础上增加了异常自动化测试 和混沌测试,确保master分支代码的 bug尽可能早地暴露出来。 通过这种流程,curve可以在一定0 码力 | 33 页 | 2.64 MB | 6 月前3
Curve核心组件之snapshotclone装,就 从临时目录rename,用户可见。 Lazy Alloc Chunk,利于超售: Lazy克隆不直接分配chunk,而是等到client来写 时才分配chunk 额外接口: 不进行数据复制,而是提供额外的Flatten接口, 完成数据复制。 适用场景: 适用于从镜像快速创建云主机场景 非Lazy克隆 较慢,分钟级: Cloned状态可用,即完成整个数据克隆,才从临 异步完成源chunk读到的数据写入到本地 chunk :欢 迎 大 家 参 与 C U R V E 项 目 ! • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve • 系列讲座:https://space.bilibili.com/700847536/channel/detail?cid=1539490 码力 | 23 页 | 1.32 MB | 6 月前3
CurveFS S3数据整理(合并碎片、清理冗余)chunkid_version_index (index为obj在chunk内的index) 执行步骤 数据整理作为一个后台服务(线程池), 运行于metaserver, 遍历metaserver的inode进行数据整理的尝试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行, 尝试根据inodekey获取inode信息, 获取不到就退出; 不是s3类型的inode退出0 码力 | 3 页 | 101.58 KB | 6 月前3
PFS SPDK: Storage Performance Development Kit●读写都需要CPU拷贝数据 ●不能发挥某些NVME的功能,例如write zero10/17/22 5 为什么用PFS ●对代码比较熟悉 ●找一个能管理裸盘,具有产品级可靠性的代码挺难的 ●PFS支持类POSIX文件的接口,与使用EXT4的存储引擎代码很像, 所以容易移植现有代码到PFS存储引擎 ●CurveBS对文件系统元数据的操作非常少,对文件系统的要求不高, 所以不需要元数据高性能,这方面PFS也合适10/17/22 ●修改BRPC,允许使用dpdk内存作为IOBuf的内存分配器 ●BRPC接收到的数据在IOBuf中,IOBuf直接使用于NVME DMA传输 ●使用IOBuf内存读nvme,避免自己写PRP页面对齐内存分配代码10/17/22 11 pfs_pwrite_zero ●在初始化curvebs时,需要创建chunk pool, 每一个chunk都要填零 ●chunk不再被卷使用时,需要回归chunk pool,为了安全也需要填0。 ●CurveBS 使用brpc::Controller 的attachment 发送数据 ●attachment是一个IOBuf ●IOBuf直接通过rdma发送出去 ●以上过程在读chunk的代码路径上实现了零copy。10/17/22 15 写入nvme的零copy实现 ●当前只支持到SGL,对于PRP的实现不支持。 ●对于只支持PRP的nvme,可以开启读数据零copy功能 ●对0 码力 | 23 页 | 4.21 MB | 6 月前3
TGT服务器的优化• 作为LILO支持用户态的接口 • 如何评价LILO • 输出内核块设备I/O效率高 • 不利于把复杂的存储协议代码搬进内核,例如(curve, brpc, c++, protobuf 等) • TCMU多了一层转接,配置过程复杂,业界踩的坑不够多。 • TCMU的用户态代码会受到框架约束,不够灵活。iSCSI target 服务器 • TGT(STGT) • 比较久的历史,原来叫STGT,后来改成TGT 比较久的历史,原来叫STGT,后来改成TGT • 纯用户态,不与内核绑定 • 支持复杂的存储系统,例如ceph rbd, sheepdog, glfs • 纯C代码,外加一些脚本 • 完整的源代码和维护工具、手册 • 编写IO驱动比较容易,容易扩展支持新的存储系统 • 代码独立,容易编译、调试、修改,适应性强让TGT支持curve • 编写curve驱动,底层异步提交I/O,pipeline • 利用NEBD PART0 码力 | 15 页 | 637.11 KB | 6 月前3
BRPC与UCX集成指南●能透明支持多个链路传输,例如多网卡bond ●编译成.so或lib的方式,可以集成到应用程序里 ●有完善的配置功能,ucx_info可以dump配置信息 ●有性能测试工具 ●比较详细的文档2223 UCS ●是一些工具代码,例如 –链表 –hash table –epoll event loop – memory register cache –config file24 UCT ●特点是比较原始,开销小,但是没有很强的功能 butil::EndPoint &peer); –UcpConnectionRef GetConnection(int fd1);44 连接管理器UcpCm ●Brpc socket代码不少地方需要文件句柄表示连接,使用句柄可以减少代码修改。例如 SocketOptions.fd为-1表示尚未连接。 ●UcpCm返回的文件句柄实际上是pipe的写端句柄 ●记得brpc的event dispatcher是边沿触发 c判断连接成功的措施 ●UcpCm从来不会写入pipe,如果pipe有可读字节,会打印错误,说明有地方遗漏了修 改。 ●Socket通过关闭UcpCm返回的句柄来关闭连接。此举和Socket原来代码一样,减少了修 改。UcpCm检测到pipe读端可读,关闭UcpConnection。 ●以上修改实际上绕过了BRPC的Event dispatcher触发读写机制,UCX自己完成发送接收45 连接管理器UcpCm0 码力 | 66 页 | 16.29 MB | 6 月前3
Curve元数据节点高可用需求 2. 技术选型 3. etcd clientv3的concurrency介绍 3.1 etcd clientV3的concurrency模块构成 3.2 Campaign的流程 3.2.1 代码流程说明 3.2.2 举例说明Campagin流程 3.3 Observe的流程 4. MDS使用election模块的功能进行选主 4.1 Curve中MDS的选举过程 4.2 图示说明选举流程 Page 5 of 30 1. 2. Campagin用于leader竞选 Observe用于监测集群中leader的变化 3.2 Campaign的流程 3.2.1 代码流程说明 如对相关代码实现不感兴趣,请直接跳到 3.2.2 举例说明Campagin流程 按照官方对Campagin的定义: blocked until it becomes the leader func leaderSession = nil } return err } e.hdr = resp.Header© XXX Page 7 of 30 return nil } 代码流程说明如下:© XXX Page 8 of 30© XXX Page 9 of 30© XXX Page 10 of 30 etcd中的revision是全局的,只要有key-value的修改(put0 码力 | 30 页 | 2.42 MB | 6 月前3
CurveFS方案设计元数据节点 dentry/inode 数据结构 内存结构确认 2021-05-13 @陈威 代码框架完成,主要涉及接口对接 2021-05-20 @陈威 开发完成 2021-05-28 @陈威等 空间分配 空间分配方案确认 2021-05-14 @吴汉卿 代码框架完成,主要涉及接口对接 2021-05-20 @吴汉卿等 模块开发完成 2021-05-28 @吴汉卿 @吴汉卿 curvefs client端 主要接口及流程梳理和确认 2021-05-19 @许超杰 代码框架开发 2021-05-27 @许超杰 主要接口代码开发完成 2021-06-09 @许超杰等 联调 2021-06-10起 @所有人© XXX Page 14 of 140 码力 | 14 页 | 619.32 KB | 6 月前3
Curve 分布式存储设计Maintainer XAgenda 第二 第三 第四 第一 Curve的由来 Curve的设计目标 Curve块存储 和 Curve文件存储 Curve社区Curve的由来 1. 代码复杂/代码量大 2. 运维难度高 3. 无法满足高的性能需求Curve的设计目标 1. Curve云原生软件定义存储 2. Curve块存储 3. Curve文件存储 4. 高性能,易运维,云原生Curve块存储 2. 支持NFS、CIFS/SMB、HDFS等协议 3. 块存储支持按存储池创建卷Curve 社区介绍 1. Curve的成长离不开社区贡献者的支持和参与。非常欢迎广大 社区用户为Curve贡献代码、文档,提交issue和改进网站。我 们愿意为您提供必要的支持 2. 社区成员组成: 网易杭研、网易云音乐、腾讯、zstack、西安邮电大学生等等 3. 项目 https://github.com/opencurve/curve0 码力 | 20 页 | 4.13 MB | 6 月前3
Curve文件系统元数据Proto(接口定义)© XXX Page 1 of 15 curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 2 of 15 1、代码结构和代码目录 curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。 2、文件系统proto定义 2.1 mds.proto0 码力 | 15 页 | 80.33 KB | 6 月前3
共 24 条
- 1
- 2
- 3













