Curve元数据节点高可用
MDS使用election模块的功能进行选主 4.1 Curve中MDS的选举过程 4.2 图示说明选举流程 4.2.1 正常流程 4.2.2 异常情况1:MDS1退出,可以正常处理 4.2.3 异常情况2:Etcd集群的leader发生重新选举,MDS1未受影响,可以正常处理 4.2.4 异常情况3:Etcd的leader发生重新选举,MDS1受到影响退出,不一定可以正常处理。 4.2.4.1 LeaseTIme MDS1、MDS2、MDS3的租约全部过期 4.2.4.4 总结 4.2.5 异常情况四: Etcd集群与MDS1(当前leader)出现网络分区 4.2.5.1 事件一先发生 4.2.5.2 事件二先发生 4.2.6 异常情况4:Etcd集群的follower节点异常 4.2.7 各情况汇总 1. 需求 mds是元数据节点,负责空间分配,集群状态监控,集群节点间的资源均衡等,mds故障可能会导致client端无法写入。 需要解决的问题就是:如何确定主备节点。 2. 技术选型 提供配置共享和服务发现的系统比较多,其中最为大家熟知的就是zookeeper和etcd, 考虑当前系统中mds有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time0 码力 | 30 页 | 2.42 MB | 5 月前3Curve核心组件之mds – 网易数帆
• 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查 • 快照克隆服务器MDS各个组件 MDS是中心节点,负责元数据管理、集群状态收集与调度。MDS包含以下几个部分: • Topology: 管理集群的 topo 元数据信息。 • Nameserver: 通过结合curve的用户系统,LogicalPool可以通过配置限定特定user使用的方式,实现多个租户数据物理 隔离(待开发)。TOPOLOGY Topology的实际例子,右侧是topo配置文件: 集群有一个物理pool,由3个zone组成,每个zone有1台server。 在物理pool上,还创建了一个逻辑pool,逻辑pool使用3个zone,采用 3副本,有100个copyset。 cluster 信息更新拓扑 中的信息。 • ConfGenerator: 将当前上报的 copyset 信息提交给调度模块, 获取该 copyset 上可能需要执行的任务。 • HealthyChecker: 检查集群中的 chunkserver 在当前时间点距 离上一次心跳的时间,根据这个时间差更新chunkserver状态。 Chunkserver端:chunkserver 端的心跳由两个部分组成: •0 码力 | 23 页 | 1.74 MB | 5 月前3Raft在Curve存储中的工程实践
成为领导者。 • Follower: 响应来自其他服务器的请求,如果接受不 到消息,就变成候选人并发起一次选举。 • 时间被划分成一个个的任期,每个任期开始都是一次 选举。 • 选举成功,领导⼈会管理整个集群直到任期结束。 • 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. le 点初始状态一致的时候,保证节点之间状态一致。 raft日志复制RAFT协议简介 raft配置变更 • 配置:加入一致性算法的服务器集合。 • 集群的配置不可避免会发生变更,比如替换宕机的机器。 直接配置变更可能出现双主问题 • 共同一致(joint consensus) • 集群先切换到一个过渡的配置(old + new),一旦共同一 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 client:接受用户请求,采用fuse的方式挂载挂载使用。 • 元数据集群:mds 和 metaserver。 • mds:保存元数据,包括topo信息、文件系统信 息、元数据分布信息等,持久化到etcd中。 • metaserver:采用raft协议3副本的方式保存文 件文件的元数据,包括inode,dentry,文件的 空间分配信息。 • 数据集群:采用外部存储,S3或者Curve块存储,保 存写入文件的数据。Curve文件存储RAFT应用0 码力 | 29 页 | 2.20 MB | 5 月前3Curve质量监控与运维 - 网易数帆
并发送邮件 获取集群拓扑信息 Curve利用brpc内置的bvar组件生成监控指标,并 使用部署在docker的三个组件进行监控指标的处 理与展示: Prometheus——面向云原生应用程序的开源 的监控&报警工具,curve利用它进行监控指标 的采集与存储。 Daily reporter——python脚本,定时从 Grafana获取指定集群的图表,生成集群监控 日报,并通过邮件发送。 指标,大致 流程为: 1. 部署监控时,Curve根据集群信息生成配置文件, 指定了 Prometheus的监控目标(包括Client、MDS、 ChunkServer、Etcd、物理节点等)。 2. Prometheus依据上述配置文件,发现相应服务。 3. Prometheus server以pull的方式,定期从Curve集群中 MDS、ChunkServer、Client等组件的brpc MDS与ChunkServer支持滚动升级 自治 • 自动均衡 • 自动故障恢复 27/33易部署 准备安装 包 配置用户 配置SSH 免密 安装 ansible 配置Ansible 执行 ansible 确认集群 状态 28/33易升级 Client易升级 为避免Curve client升级影响QEMU,Curve Client采用了Client- Server架构,以支持热升级。 升级Curve0 码力 | 33 页 | 2.64 MB | 5 月前3Curve设计要点
• 异常场景抖动较大(比如慢盘场景) • 去中心节点设计在集群不均衡的情况下需要人工运维 • 基于通用分布式存储构建上层存储服务背景 01 02 03 04 总体设计 系统特性 近期规划基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver Chunkserver 数据存储 数据一致性基本架构 • 元数据节点 MDS 管理元数据信息 收集集群状态信息,自动调度 • 数据节点 Chunkserver 数据存储 副本一致性 • 客户端 Client 对元数据增删改查 对数据增删改查基本架构 • 快照克隆服务器 独立于核心服务 储到支持S3接口的 对象存储,不限制数量 异步快照、增量快照 从快照/镜像克隆 ( lazy/非lazy ) 从快照回滚数据组织形式 选主,实现高可用高可用 chunkserver 使用raft,2N + 1 个副本允许 N 副本异常自治 • 自动故障恢复 • 多对多,恢复时间短 • 精确的流量控制,对io几乎无影响自治 • 集群负载和资源均衡 • leader copyset scatter-width • 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client:0 码力 | 35 页 | 2.03 MB | 5 月前3CurveFS Copyset与FS对应关系
应关系 curvefs的元数据的分片,需要考虑到在创建inode的时候,其实是不知道inodeid的,在创建完成之后,才有inodeid。inodeid的分配最好下放到各个分片去进行处理。否则整个集群的inode都去一个地方获取id会 造成巨大的锁开销,这个是不能接受的。 curve块设备的元数据管理,在分配数据的时候,offset一开始就是知道的,这是和curvefs分配很大的一个不同点。 copyset 带来的copyset数量过多影响性能的问题。 3.3 copyset个数是否可以动态调整? 根据copyset个数是否可以动态调整,有两种实现。 一种是curve块存储方案,在集群初始化的时候,把所有的copyset创建好。采用这种方式, 可以采用hash的方式去确定inode的分片。比如说, , copysetid = (fsid + inodeid << shift ) 管理的元数据会越来越少。类chubaofs方案的均衡问题如何解决? CopySetScheduler: copyset均衡调度器。根据集群中copyset的分布情况生成copyset迁移任务; LeaderScheduler: leader均衡调度器。根据集群中leader的分布情况生成leader变更任务; ReplicaScheduler: 副本数量调度器。根据当前copyset的副本数生成副本增删任务;0 码力 | 19 页 | 383.29 KB | 5 月前3新一代云原生分布式存储
映射信息无需记录,直接通过计算获得 • 伪随机算法在服务器数量特别大的时候接近均衡 • 节点故障(DiskNums)变更会涉及其他数据的迁移 有中心节点:持久化对应关系 • 需要将数据分布(元数据)持久化 • 中心节点感知集群的信息,进行资源实时调度 • 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB io抖动(一致性协议): 异常场景(比如阵列卡一致性巡检,坏盘,慢盘,网络异常),服务升级 • 性能差(一致性协议):在通用硬件下,无法支撑数据库、kafka等中间件对存储性能和稳定性要求 • 容量不均衡(数据放置):集群各节点容量不均衡需要人为干预 • 上述问题和架构涉及、核心功能的选型有关,在已有开源版本上改进代价很大分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 运维场景 Curve Ceph 加盘 对IO无影响 秒级io影响 服务端升级 对IO无影响 重启管控面IO无影响,重启osd io秒级影响 客户端升级 热升级,秒级抖动 不支持热升级,需要业务停服 集群监控 丰富的metric metric类型较少主要亮点 — 更稳定 异常场景 Curve Ceph 坏盘 基本无抖动 无明显抖动 慢盘 io持续抖动,但util未100% io持续抖动,util持续100%0 码力 | 29 页 | 2.46 MB | 5 月前3副本如何用CLup管理PolarDB
clup-agent 数据库主机n CLup是什么? 实现PostgreSQL/PolarDB数据库的私有云 RDS产品 PostgreSQL/PolarDB集群统一管理、统一运 维。 PostgreSQL/PolarDB集群可以用功能(即故 障自动切换) 实现对PostgreSQL/PolarDB的监控管理 对PostgreSQL/PolarDB的TopSQL的管理 0 码力 | 34 页 | 3.59 MB | 5 月前3Curve核心组件之chunkserver
03 04 ChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 功完成, CS1成为了复制组的一员, CS2不再属于这个复制组。 ⑧ CS3在下一次心跳中向MDS报告本次raft成员变更已完成 ⑨ 等CS1上的copyset数量恢复到和其它节点相差不大时,集群回 到均衡状态,迁移结束ChunkServer核心模块-DataStore ChunkServer的目录结构: • 每个copyset一个目录,后面三个目录由braft管理,data目录由DataStore管理0 码力 | 29 页 | 1.61 MB | 5 月前3Curve 分布式存储设计
server表示物理服务器 4. chunkserver物理服务器上 的服务实例 拓扑结构Curve块存储 1. Curve块存储将虚拟块设备 映射到文件 2. 每个文件包含的chunk分散 在集群的存储节点 3. chunkserver按照故障域分组 4. copyset中的节点属于不同的 故障域 数据组织Curve块存储 IO流程Curve块存储 1. chunkserver负责数据的存储0 码力 | 20 页 | 4.13 MB | 5 月前3
共 15 条
- 1
- 2