Curve质量监控与运维 - 网易数帆代码提交流程 异常自动化 测试 混沌测试 (每周一次) CI测试(编译、静态检 查、单元测试、集成测 试、覆盖率80%卡点) 邮件通知 Curve所有代码均在github托管。新 代码需要通过CI测试和code review才 能合入master分支,确保新合入代码 的功能、正确性、规范性等都有基本 保障;而每日运行的dailybuild测试在 CI测试基础上增加了异常自动化测试 和混沌测试,确保master分支代码的 沌测试,等等 单元测试 1300+用例 行覆盖80%+,分支覆盖70%+ 集成测试 Given When Then 设计方法 500+用例 异常测试 40+自动化用例 混沌测试 20轮自动化随机故障注入 12/33单元测试 单元测试是软件开发的过程中最基本的测试,它用来对一个模块、一个函数或者一个类来进行 正确性检验的测试工作。 curve通过lcov统计代 混沌测试,大压力多级故障(随机组合软硬件异常)。 在系统测试过程中,我们尽可能将所有用例自动化,其优点是: 大幅降低了测试回归成本,加快了测试进度; 可以对代码进行足够频繁的测试,有利于提高代码质量; 容易发现隐藏的问题,手工测试无法做到频繁触发 测试用例可以持续积累,成为代码质量的。 目前Curve的 异常测试以及混沌测试 均实现了自动化。 15/33测试用例的编写方法 很多情况下,待测试场景0 码力 | 33 页 | 2.64 MB | 6 月前3
Curve设计要点系统特性 近期规划基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 数据一致性基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client MDS、Snapshotcloneserver 通过 etcd 选主,实现高可用高可用 chunkserver 使用raft,2N + 1 个副本允许 N 副本异常自治 • 自动故障恢复 • 多对多,恢复时间短 • 精确的流量控制,对io几乎无影响自治 • 集群负载和资源均衡 • leader copyset scatter-width • 无需人工干预 • 对io影响几乎无影响易运维 • 集群状态查询工具 • curve_ops_tool • 自动化部署工具 • 一键部署,一键升级高质量 • 良好的模块化和抽象设计 • 完善的测试体系 • 单元测试 行覆盖80%+,分支覆盖70%+ • 集成测试 Given When Then 方法 完备的测试用例集 • 自动化异常测试 41个异常用例 • 自动化大压力随机故障注入 20轮随机故障注入背景 01 02 030 码力 | 35 页 | 2.03 MB | 6 月前3
Curve核心组件之mds – 网易数帆https://github.com/opencurve/curve 概述整体架构 01 02 03 MDS各组件详细介绍 Q&A基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查 • 快照克隆服务器MDS各个组件 MDS是中心节点,负责元数 Copyset: 副本放置策略。 • Heartbeat: 心跳模块。跟chunkserver进行交互,收集chunkserver上的负载信息、 copyset信息等。 • Scheduler: 调度模块。用于自动容错和负载均衡。TOPOLOGY topology用于管理和组织机器,利用底层机器的放置、网络的规划以面向业务提供如下功能和非功能需求。 1. 故障域的隔离:比如副本的放置分布在不同机器,不同机架,或是不同的交换机下面。 减少复制组数量:如果一个数据节点存在 256K个复制组,复制组的内存资源占用将会非常恐怖;复制组之 间的通信将会非常复杂,例如复制组内Primary给Secondary定期发送心跳进行探活,在256K个复制组的情况 下,心跳的流量将会非常大;而引入CopySet的概念之后,可以以CopySet的粒度进行探活、配置变更,降低 开销。 3. 提高数据可靠性:在数据复制组过度打散的情况下,在发生多个节点同时故障的情况下,数据的可靠性会受0 码力 | 23 页 | 1.74 MB | 6 月前3
副本如何用CLup管理PolarDB实现PostgreSQL/PolarDB数据库的私有云 RDS产品 PostgreSQL/PolarDB集群统一管理、统一运 维。 PostgreSQL/PolarDB集群可以用功能(即故 障自动切换) 实现对PostgreSQL/PolarDB的监控管理 对PostgreSQL/PolarDB的TopSQL的管理 架构说明 有一台机器上部署的CLup管理节点,这个管 clup-server 数据中心1 CLup管理节点1 clup-server 数据中心2 CLup管理节点2 clup-server 数据中心1 CLup管理节点2 高可用机制自动切换 数据一致性保证 数据可用性 提供读写VIP 读写高可用 读写分离 多个读库之间负载均衡 负载均衡 读线性扩展 支持分库分表 高扩展性 写 VIP 读 Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb: 切换测试使用CLup创建Polardb 详细参加:http://www.csudata.com/clup/manual/4.2/10010THANKS0 码力 | 34 页 | 3.59 MB | 6 月前3
Raft在Curve存储中的工程实践配置:加入一致性算法的服务器集合。 • 集群的配置不可避免会发生变更,比如替换宕机的机器。 直接配置变更可能出现双主问题 • 共同一致(joint consensus) • 集群先切换到一个过渡的配置(old + new),一旦共同一 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 • 日志会不断增长,占用空间 • 采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 通过心跳维持mds和chunkserver/metaserve的 数据交互 • mds发起配置变更,copyset复制组执行 • 在curve自动容错和负载均衡时,需要进行raft配 置变更。 • 自动容错保证常见异常(如坏盘、机器宕机)导 致的数据丢失不依赖人工处理,可以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内 存等资源的利用率最大化。 Curve块存储和文件存储的配置变更实现基本一致CURVE的RAFT配置变更0 码力 | 29 页 | 2.20 MB | 6 月前3
Curve元数据节点高可用用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删掉。这在很多分布式锁的实现上都会用到,可以保证锁的实时性和有效性。CAS(Atomic Compare-and-Swap)指的是在对key进行赋值的时候,客户端需要提供一些条件,当这些条件满足后才能赋值成功。 ::mds::topology::TopologyServiceImpl] is serving on port=6666. 场景 MDS是否需要切换 影响 发生概率 主MDS1正常退出(kill进程) 是 MDS2当选leader 可以迅速切换 正常 主MDS1异常退出(机器断电) 是 MDS2当选leader 需要等到MDS1的lease过期 小 备MDS2退出 否 MDS1任为leader 是 MDS1最终退出MDS2/MDS3进行竞选 过程中出现双主的时间在[0,2s] 小 三个节点的lease均未过期 否 MDS1仍为leader 大 Etcd整个集群不可用 是 MDS1自动退出 MDS2/MDS3不能当选leader 小 Etcd集群与MDS1发生网络分区,与MDS2,MDS3网络正常 是 MDS1最终退出 过程中出现双主的时间在[0, 5.3s] 小0 码力 | 30 页 | 2.42 MB | 6 月前3
BRPC与UCX集成指南用UCX实现BRPC对RDMA的支持 徐逸锋2 BRPC简介 ●BRPC是Curve的基础通讯框架 ●支持远程过程调用 –C++ –TCP传输 –bthread协程(m:n调度,减少基于内核的下文切换 ,减少cache miss) ●多协议支持 –baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 ●构建于uct之上,实现更加高级的功能,容易使用,但有一定开销。 ●UCT和UCP两者都有context概念,但是UCT只对一块网卡,而UCP把若干个UCT组合起 来,自动选择最快路径传输。 ●高级特性 –大消息报文的自动分片传输 –Active message, atomic operation, tag match, stream27 典型的RDMA栈28 UCX 编程的一些基本概念 ker)完成功能。如果你用过libuv或者libevent的evbuffer,它们有点 像 proactor,使用libuv时不停调用uv_run(UV_RUN_NOWAIT),就可完成buffer自动读写。31 WORKER ●Busy poll –Busy poll可以有效降低时延,但是在空闲时浪费CPU ●Wait –会增加时延,但是节省CPU使用 ●通过ucp_worker_get_efd(*ucp_worker0 码力 | 66 页 | 16.29 MB | 6 月前3
PolarDB开源生态介绍 - 杭州Meetup 2022.10.15github、官网、钉钉、微信、B站、知乎、csdn、... • 峰会 • 大咖说.对话开源 • meetup • 荣誉墙 技能栏目: 3万/场 曝光流量 影响力栏目: up 500万/场 曝光流量 竞技栏目: 100万/场 曝光流量 • SIG • Issue 开源代码协作 • 理事会 • 人才发展委员会 • 技术委员会 开源社区治理 • 联合解决方案|产品 • OxM发型版0 码力 | 7 页 | 1.45 MB | 6 月前3
PFS SPDK: Storage Performance Development KitRDMA可以减轻CPU负担 ●可以减少CPU操作网络通讯的开销 ●读写内存都由网卡进行offload ●应用程序不再通过系统调用在内核和用户态来回切换10/17/22 4 磁盘的读写 ●基于EXT4的存储引擎,依然需要通过系统调用来回切换 ●读写都需要CPU拷贝数据 ●不能发挥某些NVME的功能,例如write zero10/17/22 5 为什么用PFS ●对代码比较熟悉 ●0 码力 | 23 页 | 4.21 MB | 6 月前3
CurveFS ChunkID持久化(etcd中记录的已使用chunkID增加一个chunkID Bundle 的大小); 申请失败 storeKey_不存在,从现在已使用的 ChunkID 继续申请新的 Bundle 首次连接 etcd etcd 环境切换 storeKey_ 被删除 其他 storeKey_ 在etcd上的Value不可解码 返回一个新的chunkid 方案 class ChunkIDGenerator { client_;0 码力 | 3 页 | 79.38 KB | 6 月前3
共 16 条
- 1
- 2













