 Curve元数据节点高可用© XXX Page 1 of 30 Curve元数据节点高可用© XXX Page 2 of 30 1. 需求 2. 技术选型 3. etcd clientv3的concurrency介绍 3.1 etcd clientV3的concurrency模块构成 3.2 Campaign的流程 3.2.1 代码流程说明 3.2.2 举例说明Campagin流程 3.3 Observe的流程 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, 但同时只有一个mds节点提供服务,称该提供服务的 的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删0 码力 | 30 页 | 2.42 MB | 6 月前3 Curve元数据节点高可用© XXX Page 1 of 30 Curve元数据节点高可用© XXX Page 2 of 30 1. 需求 2. 技术选型 3. etcd clientv3的concurrency介绍 3.1 etcd clientV3的concurrency模块构成 3.2 Campaign的流程 3.2.1 代码流程说明 3.2.2 举例说明Campagin流程 3.3 Observe的流程 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, 但同时只有一个mds节点提供服务,称该提供服务的 的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删0 码力 | 30 页 | 2.42 MB | 6 月前3
 Curve文件系统元数据管理of 24 Curve文件系统元数据管理(已实现)© XXX Page 2 of 24 1. 2. 3. 4. Inode 1、设计一个分布式文件系统需要考虑的点: 2、其他文件系统的调研总结 3、各内存结构体 4、curve文件系统的元数据内存组织 4.1 inode定义: 4.2 dentry的定义: 4.3 内存组织 5 元数据分片 5.1 分片方式一:in 1、设计一个分布式文件系统需要考虑的点: 文件系统的元数据是否全缓存? 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? inode+dentry方式?当前curve块存储的kv方式? 是否有单独的元数据管理服务器? 2、其他文件系统的调研总结 fs 中心化元数据 内存namespace元数据 内存空间分配元数据 元数据持久化 元数据扩展 小文件优化 空间管理单位 数据持久化 其他© XXX Page moosefs(mfs) 有元数据服务器 全内存 fsnode → hashtable(inode id) fsedge → hashtable (parent inode + name) 全内存 chunk → hashtable(chunk id) log + dump record 差 否 chunk 链式多副本 overwirte有数据不一致风险 chubaofs(cfs) 有元数据服务器 inode0 码力 | 24 页 | 204.67 KB | 6 月前3 Curve文件系统元数据管理of 24 Curve文件系统元数据管理(已实现)© XXX Page 2 of 24 1. 2. 3. 4. Inode 1、设计一个分布式文件系统需要考虑的点: 2、其他文件系统的调研总结 3、各内存结构体 4、curve文件系统的元数据内存组织 4.1 inode定义: 4.2 dentry的定义: 4.3 内存组织 5 元数据分片 5.1 分片方式一:in 1、设计一个分布式文件系统需要考虑的点: 文件系统的元数据是否全缓存? 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? inode+dentry方式?当前curve块存储的kv方式? 是否有单独的元数据管理服务器? 2、其他文件系统的调研总结 fs 中心化元数据 内存namespace元数据 内存空间分配元数据 元数据持久化 元数据扩展 小文件优化 空间管理单位 数据持久化 其他© XXX Page moosefs(mfs) 有元数据服务器 全内存 fsnode → hashtable(inode id) fsedge → hashtable (parent inode + name) 全内存 chunk → hashtable(chunk id) log + dump record 差 否 chunk 链式多副本 overwirte有数据不一致风险 chubaofs(cfs) 有元数据服务器 inode0 码力 | 24 页 | 204.67 KB | 6 月前3
 Curve支持S3 数据缓存方案© XXX Page 1 of 9 Curve支持S3 数据缓存方案© XXX Page 2 of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 通过日志初步分析有2点原因© XXX Page 3 of 9 1.append接口目前采用先从s3 get,在内存中合并完后再put的方式,对s3操作过多 2.对于4k 小io每次都要和s3交互,导致性能非常差。 因此需要通过Cache模块解决以上2个问题。 整体设计 整个dataCache的设计思路,在写场景下能将数据尽可能的合并后flush到s3 读场景上,能够预读1个block大小,减少顺序读对于底层s3的访问频次。从这个思路上该缓存方案主要针对的场景是顺序写和顺序 读,而对于随机写和随机读来说也会有一定性能提升,但效果可能不会太好。 元数据采用2层索引 由于chunk大小是固定的(默认64M),所以Inode中采用map Curve支持S3 数据缓存方案© XXX Page 1 of 9 Curve支持S3 数据缓存方案© XXX Page 2 of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 通过日志初步分析有2点原因© XXX Page 3 of 9 1.append接口目前采用先从s3 get,在内存中合并完后再put的方式,对s3操作过多 2.对于4k 小io每次都要和s3交互,导致性能非常差。 因此需要通过Cache模块解决以上2个问题。 整体设计 整个dataCache的设计思路,在写场景下能将数据尽可能的合并后flush到s3 读场景上,能够预读1个block大小,减少顺序读对于底层s3的访问频次。从这个思路上该缓存方案主要针对的场景是顺序写和顺序 读,而对于随机写和随机读来说也会有一定性能提升,但效果可能不会太好。 元数据采用2层索引 由于chunk大小是固定的(默认64M),所以Inode中采用map- s3ChunkInfoMap用于保存对象存储的位置信息。采用2 0 码力 | 9 页 | 179.72 KB | 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 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
 CurveFS S3数据整理(合并碎片、清理冗余)1 of 3 curvefs s3数据整理(合并碎片、清理冗余)© XXX Page 2 of 3 1. 2. 3. 1. 2. 3. 4. 5. 6. 1. 2. 背景 只考虑单客户端, 单metaserver 为了解决的问题: 客户端在对一个文件的某个部分多次写入后, 同一个chunk会产生很多版本数据; 而客户端在读的时候, 会需要对这些chunk进行筛选和构建 会需要对这些chunk进行筛选和构建, 得到有效的部分, 越是散乱的状态, 就越需要发送更多次读请求至s3. 最后导致无效旧数据的堆积和读请求性能的下降, 所以需要在合适的时候进行重叠元数据和数据的合并 原则是尽力而为, 并不能做到完美 方案 基于一下3个基础的数据结构, 2层索引 s3chuninfolist[index] = [s3chunkinfo(s)] s3chunkinfo { } s3 object命名: chunkid_version_index (index为obj在chunk内的index) 执行步骤 数据整理作为一个后台服务(线程池), 运行于metaserver, 遍历metaserver的inode进行数据整理的尝试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行, 尝试根据inodekey获取inode信息0 码力 | 3 页 | 101.58 KB | 6 月前3 CurveFS S3数据整理(合并碎片、清理冗余)1 of 3 curvefs s3数据整理(合并碎片、清理冗余)© XXX Page 2 of 3 1. 2. 3. 1. 2. 3. 4. 5. 6. 1. 2. 背景 只考虑单客户端, 单metaserver 为了解决的问题: 客户端在对一个文件的某个部分多次写入后, 同一个chunk会产生很多版本数据; 而客户端在读的时候, 会需要对这些chunk进行筛选和构建 会需要对这些chunk进行筛选和构建, 得到有效的部分, 越是散乱的状态, 就越需要发送更多次读请求至s3. 最后导致无效旧数据的堆积和读请求性能的下降, 所以需要在合适的时候进行重叠元数据和数据的合并 原则是尽力而为, 并不能做到完美 方案 基于一下3个基础的数据结构, 2层索引 s3chuninfolist[index] = [s3chunkinfo(s)] s3chunkinfo { } s3 object命名: chunkid_version_index (index为obj在chunk内的index) 执行步骤 数据整理作为一个后台服务(线程池), 运行于metaserver, 遍历metaserver的inode进行数据整理的尝试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行, 尝试根据inodekey获取inode信息0 码力 | 3 页 | 101.58 KB | 6 月前3
 Curve文件系统元数据持久化方案设计© XXX Page 1 of 12 元数据持久化© XXX Page 2 of 12 前言 Raft Log Raft Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft 存在的问题? redis 改造 vs 自己实现? redis 中哈希表实现的优点? 参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化© XXX Page 3 of 12 Raft Log +------+- -----------+---------+ 持久化文件 字段 字节数 说明 CURVEFS 7 magic number(常量字符 "CURVEFS"),用于标识该文件为 curvefs 元数据持久化文件 version 4 文件版本号(当文件格式变化时,可以 100% 向后兼容加载旧版持久化文件) size 8 键值对数量 key_value_pairs / 键值对(当 size 为0 码力 | 12 页 | 384.47 KB | 6 月前3 Curve文件系统元数据持久化方案设计© XXX Page 1 of 12 元数据持久化© XXX Page 2 of 12 前言 Raft Log Raft Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft 存在的问题? redis 改造 vs 自己实现? redis 中哈希表实现的优点? 参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化© XXX Page 3 of 12 Raft Log +------+- -----------+---------+ 持久化文件 字段 字节数 说明 CURVEFS 7 magic number(常量字符 "CURVEFS"),用于标识该文件为 curvefs 元数据持久化文件 version 4 文件版本号(当文件格式变化时,可以 100% 向后兼容加载旧版持久化文件) size 8 键值对数量 key_value_pairs / 键值对(当 size 为0 码力 | 12 页 | 384.47 KB | 6 月前3
 古月《ROS入门21讲》15.服务数据的定义与使用.pdf15.服务数据的定义与使用 主 讲 人 : 古 月 服务模型 自定义服务数据 ➢ ➢ 古月《ROS入门21讲》15.服务数据的定义与使用.pdf15.服务数据的定义与使用 主 讲 人 : 古 月 服务模型 自定义服务数据 ➢ ➢- message_generation - message_runtime ➢ • find_package( …… message_generation) • add_service_files(FILES0 码力 | 9 页 | 1.29 MB | 1 年前3
 openEuler 21.09 技术白皮书场景创新 18 概述 02 增强特性 21 平台架构 05 社区治理 25 运行环境 08 著作权说明 32 内核创新 10 商标 32 云化基座 14 附录 32 CONTENTS 目录 openEuler 21.09 技术白皮书 01 场景创新 18 概述 02 增强特性 21 平台架构 05 社区治理 25 运行环境 08 著作权说明 32 内核创新 10 商标 32 CPU 的实时抢占及抖动 抑制,创新业务优先级 OOM 内存回收算法保障在线业务安全可靠运行。 • 新文件系统 EulerFS:面向非易失性内存的新文件系统,采用软更新、目录双视图等技术减少文件元数据同步时间, 提升文件读写性能。 • 内存分级扩展 etMem:新增用户态 swap 功能,策略配置淘汰的冷内存交换到用户态存储,用户无感知,性能 优于内核态 swap。 夯实云化基座 容器操作系统 繁荣社区生态 友好桌面环境:UKUI、DDE 、Xfce 桌面环境,丰富社区桌面环境生态。 • 欧拉 DevKit:支持操作系统迁移、兼容性评估、简化安全配置 secPaver 等更多开发工具。 数据中心 云原生 边缘 HPC 嵌入式/工控 … CPU:X86、ARM、RISC-V DPU NPU 介质 总线 服务器套件 云原生套件 分布式套件 虚拟化/容器 边云协同套件 嵌入式套件 机密计算服务0 码力 | 35 页 | 3.72 MB | 1 年前3 openEuler 21.09 技术白皮书场景创新 18 概述 02 增强特性 21 平台架构 05 社区治理 25 运行环境 08 著作权说明 32 内核创新 10 商标 32 云化基座 14 附录 32 CONTENTS 目录 openEuler 21.09 技术白皮书 01 场景创新 18 概述 02 增强特性 21 平台架构 05 社区治理 25 运行环境 08 著作权说明 32 内核创新 10 商标 32 CPU 的实时抢占及抖动 抑制,创新业务优先级 OOM 内存回收算法保障在线业务安全可靠运行。 • 新文件系统 EulerFS:面向非易失性内存的新文件系统,采用软更新、目录双视图等技术减少文件元数据同步时间, 提升文件读写性能。 • 内存分级扩展 etMem:新增用户态 swap 功能,策略配置淘汰的冷内存交换到用户态存储,用户无感知,性能 优于内核态 swap。 夯实云化基座 容器操作系统 繁荣社区生态 友好桌面环境:UKUI、DDE 、Xfce 桌面环境,丰富社区桌面环境生态。 • 欧拉 DevKit:支持操作系统迁移、兼容性评估、简化安全配置 secPaver 等更多开发工具。 数据中心 云原生 边缘 HPC 嵌入式/工控 … CPU:X86、ARM、RISC-V DPU NPU 介质 总线 服务器套件 云原生套件 分布式套件 虚拟化/容器 边云协同套件 嵌入式套件 机密计算服务0 码力 | 35 页 | 3.72 MB | 1 年前3
 Zadig 面向开发者的云原生 DevOps 平台自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署 / 灰度上线 xN 监控 / 告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 贡献者流程优化 2022 年 9 月 场 景 深 化 能 力 增 强 Helm/K8s YAML/ 托管场景接入流程优化 UX/UI 升级,工程师一线体验优化 推出效能看板,实时客观度量工程数据指标 效 率 优 化 、 开 发 者 体 验 增 强 2023 年 面向生态伙伴开放场景 面向开发者提供 IDE 插件 / 自测环境 通用工作流广泛链接生态赋能开发者 企业解决方案和最佳实践内置 组织能力提升 业务负责人 研发不透明,规划凭感觉: • 发版时间靠运气 • 团队熬夜冲进度 研发透明化:不同项目清晰可见的效率、质量、进度 进度管理:根据团队客观数据,预测和确定项目规划 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高0 码力 | 59 页 | 81.43 MB | 1 年前3 Zadig 面向开发者的云原生 DevOps 平台自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署 / 灰度上线 xN 监控 / 告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 贡献者流程优化 2022 年 9 月 场 景 深 化 能 力 增 强 Helm/K8s YAML/ 托管场景接入流程优化 UX/UI 升级,工程师一线体验优化 推出效能看板,实时客观度量工程数据指标 效 率 优 化 、 开 发 者 体 验 增 强 2023 年 面向生态伙伴开放场景 面向开发者提供 IDE 插件 / 自测环境 通用工作流广泛链接生态赋能开发者 企业解决方案和最佳实践内置 组织能力提升 业务负责人 研发不透明,规划凭感觉: • 发版时间靠运气 • 团队熬夜冲进度 研发透明化:不同项目清晰可见的效率、质量、进度 进度管理:根据团队客观数据,预测和确定项目规划 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高0 码力 | 59 页 | 81.43 MB | 1 年前3
 Zadig 面向开发者的云原生 DevOps 平台集成验证 xN 写测试用例 系统验证 xN 自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署/灰度上线 xN 监控/告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 需求阶段 研发阶段 建立产品发展委员会 贡献者流程优化 2022年9月 场 景 深 化 能 力 增 强 Helm/K8s YAML/托管场景接入流程优化 UX/UI 升级,工程师一线体验优化 推出效能看板,实时客观度量工程数据指标 效 率 优 化 、 开 发 者 体 验 增 强 2023年 面向生态伙伴开放场景 面向开发者提供 IDE插件/ 自测环境 通用工作流广泛链接生态赋能开发者 企业解决方案和最佳实践内置 组织能力提升 业务负责人 研发不透明,规划凭感觉: • 发版时间靠运气 • 团队熬夜冲进度 研发透明化:不同项目清晰可见的效率、质量、进度 进度管理:根据团队客观数据,预测和确定项目规划 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高0 码力 | 59 页 | 23.57 MB | 1 年前3 Zadig 面向开发者的云原生 DevOps 平台集成验证 xN 写测试用例 系统验证 xN 自动化测试 xN 性能测试 xN 安全测试 xN 数据变更 xN 代码变更 xN 配置变更 xN 部署测试环境 xN 部署预发环境 xN 部署生产环境 xN 部署/灰度上线 xN 监控/告警 xN 版本归档 xN 交付追踪 xN 数据度量 xN 服务、工单管理 事件、缺陷管理 想 法 用 户 运行阶段 需求阶段 研发阶段 建立产品发展委员会 贡献者流程优化 2022年9月 场 景 深 化 能 力 增 强 Helm/K8s YAML/托管场景接入流程优化 UX/UI 升级,工程师一线体验优化 推出效能看板,实时客观度量工程数据指标 效 率 优 化 、 开 发 者 体 验 增 强 2023年 面向生态伙伴开放场景 面向开发者提供 IDE插件/ 自测环境 通用工作流广泛链接生态赋能开发者 企业解决方案和最佳实践内置 组织能力提升 业务负责人 研发不透明,规划凭感觉: • 发版时间靠运气 • 团队熬夜冲进度 研发透明化:不同项目清晰可见的效率、质量、进度 进度管理:根据团队客观数据,预测和确定项目规划 迭代进度一目了然 项目从无到有可核算 管理有数据科学依据 解放管理,更多时间花在 业务创新 平台运维 业务压力大,能力建设缓慢: • 大量工作花在工具链维护 • 项目间依赖复杂,环境管理难 • 交付版本依赖工单,发布风险高0 码力 | 59 页 | 23.57 MB | 1 年前3
共 132 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14














