 Curve质量监控与运维 - 网易数帆质量管理体系(设计、开发、review、CI) ✓ 测试方法论(单元测试、集成测试、系统测试) 监控 ✓ 监控架构 ✓ 指标采集、后端处理、可视化展示 运维 ✓ 运维特性 (易部署、易升级、自治) ✓ 运维工具(部署工具、管理工具) 4/33背景 01 02 03 04 Curve质量控制 Curve监控体系 Curve运维体系软件质量 软件质量的定义是:软件与明确地和隐含地定义的需求相一致的程度。 通过测试集覆盖任意两个变量的所有取值组合。理论上两因素组合测 试最多可发现95%的缺陷,平均缺陷检出率也达到了86%,在用例数量 和缺陷检测能力上达到了平衡。因此,一般测试用例应该保证两因素组 合的100%覆盖。  多因素组合测试 生成的测试集可以覆盖任意t个变量(t>2)的所有取值组合。  基于选择的覆盖 选择最常用的参数值作为基础组合,在此基础上每次改变一个参数, 生成新用例。 16/33 我们可 MDS SnapshotClone Server HTTP采集 bvar数据 定时获取图表 并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示:  Prometheus——面向云原生应用程序的开源 的监控&报警工具,curve利用它进行监控指标 的采集与存储。  Daily0 码力 | 33 页 | 2.64 MB | 6 月前3 Curve质量监控与运维 - 网易数帆质量管理体系(设计、开发、review、CI) ✓ 测试方法论(单元测试、集成测试、系统测试) 监控 ✓ 监控架构 ✓ 指标采集、后端处理、可视化展示 运维 ✓ 运维特性 (易部署、易升级、自治) ✓ 运维工具(部署工具、管理工具) 4/33背景 01 02 03 04 Curve质量控制 Curve监控体系 Curve运维体系软件质量 软件质量的定义是:软件与明确地和隐含地定义的需求相一致的程度。 通过测试集覆盖任意两个变量的所有取值组合。理论上两因素组合测 试最多可发现95%的缺陷,平均缺陷检出率也达到了86%,在用例数量 和缺陷检测能力上达到了平衡。因此,一般测试用例应该保证两因素组 合的100%覆盖。  多因素组合测试 生成的测试集可以覆盖任意t个变量(t>2)的所有取值组合。  基于选择的覆盖 选择最常用的参数值作为基础组合,在此基础上每次改变一个参数, 生成新用例。 16/33 我们可 MDS SnapshotClone Server HTTP采集 bvar数据 定时获取图表 并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示:  Prometheus——面向云原生应用程序的开源 的监控&报警工具,curve利用它进行监控指标 的采集与存储。  Daily0 码力 | 33 页 | 2.64 MB | 6 月前3
 Curve设计要点是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多,线上异常演练 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve 地址空间到—>chunk: 1 : 1 • 采用append的方式写入数据组织形式 • AppendFile • 地址空间到—>chunk: 1 : 1 • 采用append的方式写入 • 支撑多副本对象存储 通过文件/特殊目录隔离 挖洞即时回收 单独的元信息的存储方案数据组织形式 • AppendECFile • 地址空间到—>chunk: 1 : 1 • 数据chunk + 校验chunk数据组织形式 测试环境: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 Curve设计要点是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多,线上异常演练 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve 地址空间到—>chunk: 1 : 1 • 采用append的方式写入数据组织形式 • AppendFile • 地址空间到—>chunk: 1 : 1 • 采用append的方式写入 • 支撑多副本对象存储 通过文件/特殊目录隔离 挖洞即时回收 单独的元信息的存储方案数据组织形式 • AppendECFile • 地址空间到—>chunk: 1 : 1 • 数据chunk + 校验chunk数据组织形式 测试环境: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
 MySQL 兼容性可以做到什么程度Maxwell DebeziumPolarDB-X 完全兼容 MySQL Binlog 可行性 • 多节点产生多个增量事件队列 • 不同队列中事件之间的顺序 • 分布式事务完整性 • DDL 引起的多 Schema 版本问题 • 扩缩容引起的队列增减 ? Maxwell Debezium A: PolarDB-X 全局 Binlog:完全兼容 • 与 MySQL Binlog 体验完全一致 mysql-binlog-connector-java • Flink CDC 性能指标 • 25w rps • 8GB 大事务 • 5s 延迟* 下一步 • 验证更多工具 • GTID • 多流业务系统 上游 Single Source of Truth 问题背景 已有系统迁移怎么办? 下游Demo for ReplicationPolarDB-X Replication 特性详情 下一步 • 多流 • GTID事务并行复制 • 更多源端完全兼容 MySQL 吗 03 History doesn't repeat itself but it often rhymes.Short Answer:No and NO ONE Does进入 Kubernetes 生态 04 When in Rome, do as the Romans do.参数设置 容灾部署 CDC 备库重搭0 码力 | 18 页 | 3.02 MB | 6 月前3 MySQL 兼容性可以做到什么程度Maxwell DebeziumPolarDB-X 完全兼容 MySQL Binlog 可行性 • 多节点产生多个增量事件队列 • 不同队列中事件之间的顺序 • 分布式事务完整性 • DDL 引起的多 Schema 版本问题 • 扩缩容引起的队列增减 ? Maxwell Debezium A: PolarDB-X 全局 Binlog:完全兼容 • 与 MySQL Binlog 体验完全一致 mysql-binlog-connector-java • Flink CDC 性能指标 • 25w rps • 8GB 大事务 • 5s 延迟* 下一步 • 验证更多工具 • GTID • 多流业务系统 上游 Single Source of Truth 问题背景 已有系统迁移怎么办? 下游Demo for ReplicationPolarDB-X Replication 特性详情 下一步 • 多流 • GTID事务并行复制 • 更多源端完全兼容 MySQL 吗 03 History doesn't repeat itself but it often rhymes.Short Answer:No and NO ONE Does进入 Kubernetes 生态 04 When in Rome, do as the Romans do.参数设置 容灾部署 CDC 备库重搭0 码力 | 18 页 | 3.02 MB | 6 月前3
 Curve核心组件之mds – 网易数帆是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve pool: 用于实现对机器资源进行物理隔离,server不能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔离的基本单元,一般来说属于不同zone的机 器至少是部署在不同的机架,一个server必须归属于一个 zone。 • server: 用于抽象描述一台物理服务器,chunkserver必须 归属一个于server。 • Chunkserver: 用于抽象描述物理服务器上的一块物理磁盘 curve在上物理pool之上又引入逻辑pool的概念,以实现统一存储系统的需求,即在单个存储系统中多副 本PageFile支持块设备、三副本AppendFile(待开发)支持在线对象存储、AppendECFile(待开发)支持 近线对象存储可以共存。 如上所示LogicalPool与pool为多对一的关系,一个物理pool可以存放各种类型的file。当然由于curve支持 多个pool,可0 码力 | 23 页 | 1.74 MB | 6 月前3 Curve核心组件之mds – 网易数帆是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟 • 可支撑储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多 • 已开源 • github主页: https://opencurve.github.io/ • github代码仓库: https://github.com/opencurve/curve pool: 用于实现对机器资源进行物理隔离,server不能跨 Pool交互。运维上,建议以pool为单元进行物理资源的扩 容。 • zone: 故障隔离的基本单元,一般来说属于不同zone的机 器至少是部署在不同的机架,一个server必须归属于一个 zone。 • server: 用于抽象描述一台物理服务器,chunkserver必须 归属一个于server。 • Chunkserver: 用于抽象描述物理服务器上的一块物理磁盘 curve在上物理pool之上又引入逻辑pool的概念,以实现统一存储系统的需求,即在单个存储系统中多副 本PageFile支持块设备、三副本AppendFile(待开发)支持在线对象存储、AppendECFile(待开发)支持 近线对象存储可以共存。 如上所示LogicalPool与pool为多对一的关系,一个物理pool可以存放各种类型的file。当然由于curve支持 多个pool,可0 码力 | 23 页 | 1.74 MB | 6 月前3
 副本如何用CLup管理PolarDB实现对PostgreSQL/PolarDB的监控管理  对PostgreSQL/PolarDB的TopSQL的管理  架构说明  有一台机器上部署的CLup管理节点,这个管 理节点提供WEB管理界面统一管理所有的 PostgreSQL/PolarDB数据库。  每台数据库主机上部署clup-agent。CLup管 理节点通过clup-agent来管理这台机器上的 PostgreSQL/PolarDB数据库。 机器有反亲和性创建PolarDB需要的阿里云环境 创建虚拟机的时 候选中的盘都不 是共享盘,必须 在创建完虚拟机 后,在单独添加 共享盘 注意创建PolarDB需要的阿里云环境创建PolarDB需要的阿里云环境 部署集把虚拟机打散到不通的物理机上创建PolarDB需要的阿里云环境 VIP的使用创建PolarDB需要的阿里云环境 把VIP绑定到多台数据库主机创建PolarDB需要的阿里云环境 创建虚拟机的时候选中的盘都不是共享盘,必须在创建完0 码力 | 34 页 | 3.59 MB | 6 月前3 副本如何用CLup管理PolarDB实现对PostgreSQL/PolarDB的监控管理  对PostgreSQL/PolarDB的TopSQL的管理  架构说明  有一台机器上部署的CLup管理节点,这个管 理节点提供WEB管理界面统一管理所有的 PostgreSQL/PolarDB数据库。  每台数据库主机上部署clup-agent。CLup管 理节点通过clup-agent来管理这台机器上的 PostgreSQL/PolarDB数据库。 机器有反亲和性创建PolarDB需要的阿里云环境 创建虚拟机的时 候选中的盘都不 是共享盘,必须 在创建完虚拟机 后,在单独添加 共享盘 注意创建PolarDB需要的阿里云环境创建PolarDB需要的阿里云环境 部署集把虚拟机打散到不通的物理机上创建PolarDB需要的阿里云环境 VIP的使用创建PolarDB需要的阿里云环境 把VIP绑定到多台数据库主机创建PolarDB需要的阿里云环境 创建虚拟机的时候选中的盘都不是共享盘,必须在创建完0 码力 | 34 页 | 3.59 MB | 6 月前3
 Curve文件系统元数据管理行分片,Dentry按照parentid进行分片 rename:rename /A/C到/B/E hardlink:生成一个hardlink /B/E,指向文件/A/C 6、curve文件系统的多文件系统的设计 1、设计一个分布式文件系统需要考虑的点: 文件系统的元数据是否全缓存? 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? inode+dentry方式?当前curve块存储的kv方式? hashtable (parent inode + name) 全内存 chunk → hashtable(chunk id) log + dump record 差 否 chunk 链式多副本 overwirte有数据不一致风险 chubaofs(cfs) 有元数据服务器 inode → b tree(key ino) dentry → b tree (key parentIno + hash 扩展时大量迁移 client缓存 inode→ hashtable(gfid) dentry→ hashtable(name) inode扩展属性字段 和写数据一样 好 写多份 overwirte有数据不一致风险 curve 有元数据服务器 lru cache缓存 kv → hashtable(key parent inode + name) segment kv0 码力 | 24 页 | 204.67 KB | 6 月前3 Curve文件系统元数据管理行分片,Dentry按照parentid进行分片 rename:rename /A/C到/B/E hardlink:生成一个hardlink /B/E,指向文件/A/C 6、curve文件系统的多文件系统的设计 1、设计一个分布式文件系统需要考虑的点: 文件系统的元数据是否全缓存? 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? inode+dentry方式?当前curve块存储的kv方式? hashtable (parent inode + name) 全内存 chunk → hashtable(chunk id) log + dump record 差 否 chunk 链式多副本 overwirte有数据不一致风险 chubaofs(cfs) 有元数据服务器 inode → b tree(key ino) dentry → b tree (key parentIno + hash 扩展时大量迁移 client缓存 inode→ hashtable(gfid) dentry→ hashtable(name) inode扩展属性字段 和写数据一样 好 写多份 overwirte有数据不一致风险 curve 有元数据服务器 lru cache缓存 kv → hashtable(key parent inode + name) segment kv0 码力 | 24 页 | 204.67 KB | 6 月前3
 CurveFS方案设计slave,slave 在内存中也缓存了全部元数据信息 master-slave 多副本数据 CurveFS 分布式元数据设计 类似 chubaofs 的元数据设计方式,同样是采用 dentry,inode 两层映射关系,所有的元数据都缓存在内存中。元数据是分片的,使用 multi-raft 持久化元数据以及保证多副本数据一致性。基于这种方式开发: a. 性能 由于元数据分片,获取元数据 的场景,元数据的量比块存储场景会多很多,长期看元数据节点的设计也是需要满足高可用、高可扩、高可靠的。 因此对元数据节点的要求总结为:高可用、高可扩、高可靠、高性能。 架构设计 卷和文件系统© XXX Page 5 of 14 1. 1. 2. 2. 1. 2. 1. 2. 一个卷对应一个文件系统 文件系统中文件数据和chunk是一对多的关系。 底层 chunk metaserver: 元数据服务进程。一个进程管理多个复制组 copyset: 复制组,使用 raft 保证数据一致性。复制组中保存文件系统的部分元数据信息 文件系统元数据和复制组是多对多的关系 一个复制组可以包含多个文件的元数据信息 复制组 wal 记录元数据操作 定期 snapshot 对 wal 进行清理。snapshot 中存储的是键值对,其中 inode 文件中存储 inode-inodeInfo;0 码力 | 14 页 | 619.32 KB | 6 月前3 CurveFS方案设计slave,slave 在内存中也缓存了全部元数据信息 master-slave 多副本数据 CurveFS 分布式元数据设计 类似 chubaofs 的元数据设计方式,同样是采用 dentry,inode 两层映射关系,所有的元数据都缓存在内存中。元数据是分片的,使用 multi-raft 持久化元数据以及保证多副本数据一致性。基于这种方式开发: a. 性能 由于元数据分片,获取元数据 的场景,元数据的量比块存储场景会多很多,长期看元数据节点的设计也是需要满足高可用、高可扩、高可靠的。 因此对元数据节点的要求总结为:高可用、高可扩、高可靠、高性能。 架构设计 卷和文件系统© XXX Page 5 of 14 1. 1. 2. 2. 1. 2. 1. 2. 一个卷对应一个文件系统 文件系统中文件数据和chunk是一对多的关系。 底层 chunk metaserver: 元数据服务进程。一个进程管理多个复制组 copyset: 复制组,使用 raft 保证数据一致性。复制组中保存文件系统的部分元数据信息 文件系统元数据和复制组是多对多的关系 一个复制组可以包含多个文件的元数据信息 复制组 wal 记录元数据操作 定期 snapshot 对 wal 进行清理。snapshot 中存储的是键值对,其中 inode 文件中存储 inode-inodeInfo;0 码力 | 14 页 | 619.32 KB | 6 月前3
 CurveFs 用户权限系统调研存在,且默认情况大多数不能登录系统 普通用户: UID:500~65535 具备系统管理员root的权限的运维人员添加的,权限很小,一般用sudo管理提权 用户和用户组的关系: 一对一、一对多、多对一、多对多 文件系统用户权限管理 对mode的管理 uidgidmode message Inode { required uint64 inodeId = 1; required 存储实现就是基于这种扩展属性的。 Inode Table中保存有若干个 Ext4_inode ,每个 Inode 大小为 ext4_super_block 中指定的 s_inode_size, 然而一个 Inode 不一定用到这么多的大小,节点信息只用到 128 个字节的空间。剩下的部分作为扩展文件属性 (Xattr),扩展属性内部是由一个扩展属性头和若干个扩展属性实体项构成的。© XXX Page 29 of 33 // fs/ext4/xattr0 码力 | 33 页 | 732.13 KB | 6 月前3 CurveFs 用户权限系统调研存在,且默认情况大多数不能登录系统 普通用户: UID:500~65535 具备系统管理员root的权限的运维人员添加的,权限很小,一般用sudo管理提权 用户和用户组的关系: 一对一、一对多、多对一、多对多 文件系统用户权限管理 对mode的管理 uidgidmode message Inode { required uint64 inodeId = 1; required 存储实现就是基于这种扩展属性的。 Inode Table中保存有若干个 Ext4_inode ,每个 Inode 大小为 ext4_super_block 中指定的 s_inode_size, 然而一个 Inode 不一定用到这么多的大小,节点信息只用到 128 个字节的空间。剩下的部分作为扩展文件属性 (Xattr),扩展属性内部是由一个扩展属性头和若干个扩展属性实体项构成的。© XXX Page 29 of 33 // fs/ext4/xattr0 码力 | 33 页 | 732.13 KB | 6 月前3
 新一代云原生分布式存储要 素 拆 解 数据分布 —— 无中心节点/中心节点 均 衡 地址空间的每段数据会分布在不同机器的磁盘上,如 何找到这些数据? 可靠性 & 可用性 —— 多副本/EC 服务不可用时 间 数据一致性 —— 一致性协议 如何保证数据不丢?如何保证各种硬件故障的时候读 写都正常? 可扩展性 —— 和数据分布的方式相关 所用容量都用完后,可以新增机器扩展容量分布式存储的要素 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB, 16MB) 50分布式存储的要素 — 一致性协议 多副本: 写三次? 一致性协议 一致性:WARO(Write-all-read-one)、Quorum WARO • 所有副本写成功 • 读可用性高:可以读任一副本 • 写可用性较低,任一副本异常写失败 head_D35c9011 根据 offset, len, name.. 生成ObjectID rbd\udata.6855c174a277a30.000000000005c2架构简介 — 多副本一致性协议 复制策略 • 主动拷贝、链式复制、splay复制 异常处理 • PG有23种状态:Peering,Degraded等 • 强一致性协议对异常的容忍较差 使用WARO一致性协议0 码力 | 29 页 | 2.46 MB | 6 月前3 新一代云原生分布式存储要 素 拆 解 数据分布 —— 无中心节点/中心节点 均 衡 地址空间的每段数据会分布在不同机器的磁盘上,如 何找到这些数据? 可靠性 & 可用性 —— 多副本/EC 服务不可用时 间 数据一致性 —— 一致性协议 如何保证数据不丢?如何保证各种硬件故障的时候读 写都正常? 可扩展性 —— 和数据分布的方式相关 所用容量都用完后,可以新增机器扩展容量分布式存储的要素 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB, 16MB) 50分布式存储的要素 — 一致性协议 多副本: 写三次? 一致性协议 一致性:WARO(Write-all-read-one)、Quorum WARO • 所有副本写成功 • 读可用性高:可以读任一副本 • 写可用性较低,任一副本异常写失败 head_D35c9011 根据 offset, len, name.. 生成ObjectID rbd\udata.6855c174a277a30.000000000005c2架构简介 — 多副本一致性协议 复制策略 • 主动拷贝、链式复制、splay复制 异常处理 • PG有23种状态:Peering,Degraded等 • 强一致性协议对异常的容忍较差 使用WARO一致性协议0 码力 | 29 页 | 2.46 MB | 6 月前3
 Raft在Curve存储中的工程实践采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一个实现,实现了raft的一致性协议和复制状态机,而且提供了一种通用的基础库。基 于braft,可以基于自己的业务逻辑构建自己的分布式系统。 每个raft实例用一个copyset管理,copyset是个逻辑 概念。写入chunk的数据,由copyset对应的raft完成 3副本的写入。 • multi-raft:copyset和chunkserver是多对多的关系 • 每个copyset由3个chunkserver组成 • 每个chunkserver可以服务多个copyset raft复制组 • disk -> segment -> chunk • 用户数据的写入最终转化为对chunk的写入。 • raft的apply,直接在对应的chunk上写入数据。Curve文件存储RAFT应用 Curve文件存储 • 分布式文件系统 • 支持多挂载,提供close-to-open一致性 • 提供缓存加速,可使用内存、本地盘、云盘加速 • 存储后端可对接对象存储,降低成本 • 支持生命周期管理 Curve文件存储架构 • clien0 码力 | 29 页 | 2.20 MB | 6 月前3 Raft在Curve存储中的工程实践采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一个实现,实现了raft的一致性协议和复制状态机,而且提供了一种通用的基础库。基 于braft,可以基于自己的业务逻辑构建自己的分布式系统。 每个raft实例用一个copyset管理,copyset是个逻辑 概念。写入chunk的数据,由copyset对应的raft完成 3副本的写入。 • multi-raft:copyset和chunkserver是多对多的关系 • 每个copyset由3个chunkserver组成 • 每个chunkserver可以服务多个copyset raft复制组 • disk -> segment -> chunk • 用户数据的写入最终转化为对chunk的写入。 • raft的apply,直接在对应的chunk上写入数据。Curve文件存储RAFT应用 Curve文件存储 • 分布式文件系统 • 支持多挂载,提供close-to-open一致性 • 提供缓存加速,可使用内存、本地盘、云盘加速 • 存储后端可对接对象存储,降低成本 • 支持生命周期管理 Curve文件存储架构 • clien0 码力 | 29 页 | 2.20 MB | 6 月前3
共 17 条
- 1
- 2













