 Curve质量监控与运维 - 网易数帆1300+用例 行覆盖80%+,分支覆盖70%+  集成测试 Given When Then 设计方法 500+用例  异常测试 40+自动化用例  混沌测试 20轮自动化随机故障注入 12/33单元测试 单元测试是软件开发的过程中最基本的测试,它用来对一个模块、一个函数或者一个类来进行 正确性检验的测试工作。 curve通过lcov统计代码覆盖率,衡量单元测试的完备程度,如下图所示: 单个模块的误差积累是否会放大,从而 达到不可接受的程度。  功能测试 站在使用者的角度,对模块提供的功能进行完备 的测试。  异常测试 制造或模拟系统异常(磁盘错误、网络错误、资源 冲突等)、依赖服务异常、应用本身异常等非正常 情况,测试软件的性能和稳定性是否符合预期。  规模测试 测试模块在一定规模下是否能够正常工作,是否 会出现异常或者崩溃, 14/33系统测试 系统测试是  常规测试,主要是新增功能的手工测试;  性能测试,将性能数据与基准对照,确定性能没有出现预期外的下降或提升;  稳定性测试,在正常压力下运行足够长的时间;  异常测试,在正常流程中注入一种软硬件异常;  混沌测试,大压力多级故障(随机组合软硬件异常)。 在系统测试过程中,我们尽可能将所有用例自动化,其优点是:  大幅降低了测试回归成本,加快了测试进度;  可以对代码0 码力 | 33 页 | 2.64 MB | 6 月前3 Curve质量监控与运维 - 网易数帆1300+用例 行覆盖80%+,分支覆盖70%+  集成测试 Given When Then 设计方法 500+用例  异常测试 40+自动化用例  混沌测试 20轮自动化随机故障注入 12/33单元测试 单元测试是软件开发的过程中最基本的测试,它用来对一个模块、一个函数或者一个类来进行 正确性检验的测试工作。 curve通过lcov统计代码覆盖率,衡量单元测试的完备程度,如下图所示: 单个模块的误差积累是否会放大,从而 达到不可接受的程度。  功能测试 站在使用者的角度,对模块提供的功能进行完备 的测试。  异常测试 制造或模拟系统异常(磁盘错误、网络错误、资源 冲突等)、依赖服务异常、应用本身异常等非正常 情况,测试软件的性能和稳定性是否符合预期。  规模测试 测试模块在一定规模下是否能够正常工作,是否 会出现异常或者崩溃, 14/33系统测试 系统测试是  常规测试,主要是新增功能的手工测试;  性能测试,将性能数据与基准对照,确定性能没有出现预期外的下降或提升;  稳定性测试,在正常压力下运行足够长的时间;  异常测试,在正常流程中注入一种软硬件异常;  混沌测试,大压力多级故障(随机组合软硬件异常)。 在系统测试过程中,我们尽可能将所有用例自动化,其优点是:  大幅降低了测试回归成本,加快了测试进度;  可以对代码0 码力 | 33 页 | 2.64 MB | 6 月前3
 Curve设计要点完善的测试体系 • 单元测试 行覆盖80%+,分支覆盖70%+ • 集成测试 Given When Then 方法 完备的测试用例集 • 自动化异常测试 41个异常用例 • 自动化大压力随机故障注入 20轮随机故障注入背景 01 02 03 04 总体设计 系统特性 近期规划• 性能优化 • 满足数据库性能要求 • 大io吞吐优化 • muti raft 性能优化 • 开源 • 系列技术分享0 码力 | 35 页 | 2.03 MB | 6 月前3 Curve设计要点完善的测试体系 • 单元测试 行覆盖80%+,分支覆盖70%+ • 集成测试 Given When Then 方法 完备的测试用例集 • 自动化异常测试 41个异常用例 • 自动化大压力随机故障注入 20轮随机故障注入背景 01 02 03 04 总体设计 系统特性 近期规划• 性能优化 • 满足数据库性能要求 • 大io吞吐优化 • muti raft 性能优化 • 开源 • 系列技术分享0 码力 | 35 页 | 2.03 MB | 6 月前3
 Curve核心组件之Client - 网易数帆请求会被拆分成两个子请求:  ChunkIdx 1, off: 8M len 8M  ChunkIdx 2, off: 0 len 8MCLIENT IO流程 子请求由哪个chunkserver处理,依赖以 下信息:  逻辑chunk与物理chunk映射关系  物理chunk所属的复制组(copyset)  复制组所在的chunkserver列表  复制组的leader信息CLIENT 放入任务队列后,异步请求发起成功,返回用户 IO拆分线程 4. 从任务队列取出任务后进行拆分 5. 拆分过程依赖元数据,可能会通过MDSClient向 MDS获取 6. 拆分成的子请求放入队列CLIENT IO线程模型 IO分发线程 7. 从队列中取出子请求准备发送 8. 发送依赖复制组leader,可能会向 Chunkserver查询复制组leader 9. 发送写请求给Chunkserver 热升级之前,QEMU是直接链接curve-client, 所以client版本需要升级时,需要对QEMU进 程进行重启。NEBD 整体介绍 在QEMU和Curve Client中间加入热升级模块,避 免直接依赖 热升级模块是CS结构:  NEBD Client(part1):只包含轻量的业务逻辑, 以链接库的形式提供给QEMU使用  NEBD Server(part2):将NEBD Client的请求转0 码力 | 27 页 | 1.57 MB | 6 月前3 Curve核心组件之Client - 网易数帆请求会被拆分成两个子请求:  ChunkIdx 1, off: 8M len 8M  ChunkIdx 2, off: 0 len 8MCLIENT IO流程 子请求由哪个chunkserver处理,依赖以 下信息:  逻辑chunk与物理chunk映射关系  物理chunk所属的复制组(copyset)  复制组所在的chunkserver列表  复制组的leader信息CLIENT 放入任务队列后,异步请求发起成功,返回用户 IO拆分线程 4. 从任务队列取出任务后进行拆分 5. 拆分过程依赖元数据,可能会通过MDSClient向 MDS获取 6. 拆分成的子请求放入队列CLIENT IO线程模型 IO分发线程 7. 从队列中取出子请求准备发送 8. 发送依赖复制组leader,可能会向 Chunkserver查询复制组leader 9. 发送写请求给Chunkserver 热升级之前,QEMU是直接链接curve-client, 所以client版本需要升级时,需要对QEMU进 程进行重启。NEBD 整体介绍 在QEMU和Curve Client中间加入热升级模块,避 免直接依赖 热升级模块是CS结构:  NEBD Client(part1):只包含轻量的业务逻辑, 以链接库的形式提供给QEMU使用  NEBD Server(part2):将NEBD Client的请求转0 码力 | 27 页 | 1.57 MB | 6 月前3
 curvefs client删除文件和目录功能设计1 当内核移除其inode cache时,会调用forget,此时lookup count需要减nlookup(forget的参数) 当umount时,所有lookup count减至0 不应该完全依赖forget接口去实现inode的移除,因为forget接口可能不会被内核调用(例如client崩溃) 相关调研 moosefs moosefs 未对接forget moosefs 实现了在m 。所以实际的内存和外存中的inode的删除机制,必须是在metaserver中实现的。client端只是 进行nlink-1的操作。 不能完全依赖forget接口的调用来移除inode,因为client可能会崩溃,也可能下线。所以实际移除inode只能依赖于metaserver,两种方式:chubaofs的简单粗暴放7天就删,或者moosefs使用session机 制来维护inode是否被打开。所以从这一点来看,0 码力 | 15 页 | 325.42 KB | 6 月前3 curvefs client删除文件和目录功能设计1 当内核移除其inode cache时,会调用forget,此时lookup count需要减nlookup(forget的参数) 当umount时,所有lookup count减至0 不应该完全依赖forget接口去实现inode的移除,因为forget接口可能不会被内核调用(例如client崩溃) 相关调研 moosefs moosefs 未对接forget moosefs 实现了在m 。所以实际的内存和外存中的inode的删除机制,必须是在metaserver中实现的。client端只是 进行nlink-1的操作。 不能完全依赖forget接口的调用来移除inode,因为client可能会崩溃,也可能下线。所以实际移除inode只能依赖于metaserver,两种方式:chubaofs的简单粗暴放7天就删,或者moosefs使用session机 制来维护inode是否被打开。所以从这一点来看,0 码力 | 15 页 | 325.42 KB | 6 月前3
 Curve元数据节点高可用提供配置共享和服务发现的系统比较多,其中最为大家熟知的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个 Campagin成功后再次获取竞选时使用的key值Leader/MDS2,获取失败,退出 MDS2 Campagin成功后再次获取竞选时使用的key值Leader/MDS3,获取失败,退出 这种情况可以被正确的处理,三个mds都退出,依赖daemon重新拉起,发起新一轮的MDS leader竞选。 4.2.4.4 总结 etcd集群发生leader选举的情况,会造成MDS出现双主或者一段时间内没有MDS提供服务的情况。© XXX0 码力 | 30 页 | 2.42 MB | 6 月前3 Curve元数据节点高可用提供配置共享和服务发现的系统比较多,其中最为大家熟知的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个 Campagin成功后再次获取竞选时使用的key值Leader/MDS2,获取失败,退出 MDS2 Campagin成功后再次获取竞选时使用的key值Leader/MDS3,获取失败,退出 这种情况可以被正确的处理,三个mds都退出,依赖daemon重新拉起,发起新一轮的MDS leader竞选。 4.2.4.4 总结 etcd集群发生leader选举的情况,会造成MDS出现双主或者一段时间内没有MDS提供服务的情况。© XXX0 码力 | 30 页 | 2.42 MB | 6 月前3
 CurveFS方案设计list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 lru cache,因此 list 只能依赖 etcd 的 range 获取方式。如果需要对 list 加速,需要新的缓存结构 c. 扩展性/可用性/可靠性 依赖于第三方kv存储,目前是etcd CurveFS 单机内存元数据设计 类似 fastcfs 和 moosefs 的元数据设计方式,采用通用的0 码力 | 14 页 | 619.32 KB | 6 月前3 CurveFS方案设计list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 lru cache,因此 list 只能依赖 etcd 的 range 获取方式。如果需要对 list 加速,需要新的缓存结构 c. 扩展性/可用性/可靠性 依赖于第三方kv存储,目前是etcd CurveFS 单机内存元数据设计 类似 fastcfs 和 moosefs 的元数据设计方式,采用通用的0 码力 | 14 页 | 619.32 KB | 6 月前3
 副本如何用CLup管理PolarDBVIP的使用创建PolarDB需要的阿里云环境 把VIP绑定到多台数据库主机创建PolarDB需要的阿里云环境 创建虚拟机的时候选中的盘都不是共享盘,必须在创建完 虚拟机后,在单独添加共享盘创建PolarDB需要的阿里云环境 安装依赖包: * libaio.x86_64 libaio-devel.x86_64 * libicu.x86_64 libicu-devel.x86_64 安装方法: yum install libaio0 码力 | 34 页 | 3.59 MB | 6 月前3 副本如何用CLup管理PolarDBVIP的使用创建PolarDB需要的阿里云环境 把VIP绑定到多台数据库主机创建PolarDB需要的阿里云环境 创建虚拟机的时候选中的盘都不是共享盘,必须在创建完 虚拟机后,在单独添加共享盘创建PolarDB需要的阿里云环境 安装依赖包: * libaio.x86_64 libaio-devel.x86_64 * libicu.x86_64 libicu-devel.x86_64 安装方法: yum install libaio0 码力 | 34 页 | 3.59 MB | 6 月前3
 PFS SPDK: Storage Performance Development Kit配,使用dpdk内 存,才可以完成DMA写NVME10/17/22 16 PFS DMA 总体架构10/17/22 17 TCP也可以部分零copy ●读写盘的部分是零copy的 ●网络部分依赖内核tcp,不是零copy10/17/22 18 进展 ●还在测试CurveBS ●布置、监控等工具需要更新10/17/22 19 性能测试 ●使用pfs daemon测试 ●估计非da0 码力 | 23 页 | 4.21 MB | 6 月前3 PFS SPDK: Storage Performance Development Kit配,使用dpdk内 存,才可以完成DMA写NVME10/17/22 16 PFS DMA 总体架构10/17/22 17 TCP也可以部分零copy ●读写盘的部分是零copy的 ●网络部分依赖内核tcp,不是零copy10/17/22 18 进展 ●还在测试CurveBS ●布置、监控等工具需要更新10/17/22 19 性能测试 ●使用pfs daemon测试 ●估计非da0 码力 | 23 页 | 4.21 MB | 6 月前3
 Raft在Curve存储中的工程实践数据交互 • mds发起配置变更,copyset复制组执行 • 在curve自动容错和负载均衡时,需要进行raft配 置变更。 • 自动容错保证常见异常(如坏盘、机器宕机)导 致的数据丢失不依赖人工处理,可以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内 存等资源的利用率最大化。 Curve块存储和文件存储的配置变更实现基本一致CURVE的RAFT配置变更 异常场景下配置变更0 码力 | 29 页 | 2.20 MB | 6 月前3 Raft在Curve存储中的工程实践数据交互 • mds发起配置变更,copyset复制组执行 • 在curve自动容错和负载均衡时,需要进行raft配 置变更。 • 自动容错保证常见异常(如坏盘、机器宕机)导 致的数据丢失不依赖人工处理,可以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内 存等资源的利用率最大化。 Curve块存储和文件存储的配置变更实现基本一致CURVE的RAFT配置变更 异常场景下配置变更0 码力 | 29 页 | 2.20 MB | 6 月前3
 Curve核心组件之mds – 网易数帆Schedule(系统调度)是为了实现系统的自动容错和负载均衡,这两个功能是分布式 存储系统的核心问题,也是 curve 是否能上生产环境的决定因素之一。 • 自动容错保证常见异常(如坏盘、机器宕机)导致的数据丢失不依赖人工处理,可 以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内存等资源的利用率最大化。SCHEDULE Schdedule的具体实现 Coordinator: 调度模块的对外接口。心跳会将0 码力 | 23 页 | 1.74 MB | 6 月前3 Curve核心组件之mds – 网易数帆Schedule(系统调度)是为了实现系统的自动容错和负载均衡,这两个功能是分布式 存储系统的核心问题,也是 curve 是否能上生产环境的决定因素之一。 • 自动容错保证常见异常(如坏盘、机器宕机)导致的数据丢失不依赖人工处理,可 以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内存等资源的利用率最大化。SCHEDULE Schdedule的具体实现 Coordinator: 调度模块的对外接口。心跳会将0 码力 | 23 页 | 1.74 MB | 6 月前3
共 10 条
- 1













