CurveFS Copyset与FS对应关系
© XXX Page 1 of 19 curvefs copyset与fs对应关系© XXX Page 2 of 19 版本 时间 修改者 修改内容 1.0 2021/7/23 陈威 初稿 1.1 2021/8/4 陈威 根据评审意见修改 1.2 2021/8/9 陈威 增加详细设计 1、背景 2、chubaofs的元数据管理 2.1、meta partition的创建 2.2、meta 2、meta partition的管理 2.3、meta partition和inode以及dentry的对应关系? 3、curvefs的copyset和fs的对应关系 3.1 如何获取inodeid 3.2 copyset fs共用吗? 3.3 copyset个数是否可以动态调整? 4、curvefs的topo信息 5、curvefs mds和metaserver的心跳 6、详细设计 6.1 创建fs metaserver端 metaserver 子模块拆分 8、inode和dentry的内存估算 8.1 一台机器上能存放多少个inode和dentry 8.2 一台机器上建议的copyset数量 8.3 每个copyset建议管理存储容量的大小 1、背景 curvefs使用raft作为元数据一致性的保证。为了提高元数据的可扩展性和并发处理能力,采用元数据分片的方式管理inode和dentry的元数据。inode的分片依据是fsid0 码力 | 19 页 | 383.29 KB | 5 月前3CurveFS rename 接口实现方案
rename 流程举例说明? 例 1:rename A→B (A 存在,而 B 不存在) 例 2:rename A→C (A 存在,而 C 存在) 4. 当 2 个操作的 dentry 属于同一个 copyset 有什么不一样? 背景 当前 curvefs 并没有实现 rename 接口,本文档是对 rename 接口实现的调研及方案设计。 rename 操作,主要操作的是 dentry,如 rename 整体思路如下: 在 MDS 所有 copyset 中增加一个 txid 字段,保存当前 copyset 已成功的事务 id(该事务 id 顺序递增,事务每成功一次则加一) 每次 rename 开始时, (其实就是创建副本,不管是删除/创建/更改都是创建相应 将 srcDentry, dstDentry 所在 copyset 对应的 txid 分别加 1 (copyset_txid+1) 去删除/创建/修改 去删除/创建/修改 dentry copyset_txid+1 为 key 的副本,原始 dentry 不动),并设置 PendingTx 为本次事务 如果上一步骤成功了,就提交事务,将 srcDentry, dstDentry 所在 copyset 的 txid 都加 1(这一步是通过 etcd 的事务保证的),如果上一步或这一步失败,因为 txid 不变,原始数据版本也在,还是保证原子性(其实就是一个 txid0 码力 | 15 页 | 555.93 KB | 5 月前3Curve核心组件之mds – 网易数帆
• Topology: 管理集群的 topo 元数据信息。 • Nameserver: 管理文件的元数据信息。 • Copyset: 副本放置策略。 • Heartbeat: 心跳模块。跟chunkserver进行交互,收集chunkserver上的负载信息、 copyset信息等。 • Scheduler: 调度模块。用于自动容错和负载均衡。TOPOLOGY topology用于管理和组 配置文件: 集群有一个物理pool,由3个zone组成,每个zone有1台server。 在物理pool上,还创建了一个逻辑pool,逻辑pool使用3个zone,采用 3副本,有100个copyset。 cluster pool1 zone1 zone2 zone3 server1 server2 server3 192.168.0.1:8200 192.168.0.2:8200 192 当前元数据信息编码之后存储在 etcd 中。COPYSET Curve系统中数据分片的最小单位称之为Chunk。在大规模的存储容量下,会产生大量的Chunk,如此众多的 Chunk,会对元数据的存储、管理产生一定压力。因此引入CopySet的概念,CopySet类似于ceph的pg。CopySet 可以理解为一组复制组,这组复制组的成员关系完全一样。CopySet的概念在文献「Copysets: Reducing0 码力 | 23 页 | 1.74 MB | 5 月前3Curve核心组件之chunkserver
Service层是对外提供的一些RPC服 务的接口。包含的RPC服务有: • ChunkService。IO相关操作 • CliService。成员变更相关操作 • CopySetService。创建copyset等操 作 • RaftService。Braft内置的service, 完成raft成员之间的选举,日志复制, 安装快照等操作。 ChunkServer架构CopysetNode封装了braft的Node,并 步完成克隆chunk的数据补全。关于克 隆相关的内容将会在快照克隆相关介 绍文档中详细介绍。 ChunkServer架构Metric统计模块使用brpc中的bvar计数 器,统计一些IO层面和copyset层面的 一些指标,方便监控和跟踪。 ChunkServer架构并发控制层,负责对chunkserver的IO 请求进行并发控制,对上层的读写请 求安照chunk粒度进行Hash,使得不同 坏盘(CS1对应的盘)后的迁移流程 初始状态,copyset1,copyset2,copyset3的三个副本分别在 CS1,CS3,CS4上,完成迁移后,CS1上的副本迁移到CS2上 ① CS1超时未向MDS上报心跳(默认半小时) ② MDS标记CS1状态为offline ③ MDS的recover scheduler发现copyset1, 2, 3的副本CS1 offline, 生成change0 码力 | 29 页 | 1.61 MB | 5 月前3Raft在Curve存储中的工程实践
数据分布 • 每个raft实例用一个copyset管理,copyset是个逻辑 概念。写入chunk的数据,由copyset对应的raft完成 3副本的写入。 • multi-raft:copyset和chunkserver是多对多的关系 • 每个copyset由3个chunkserver组成 • 每个chunkserver可以服务多个copyset raft复制组 • disk -> -> segment -> chunk • chunk -> copyset -> chunk in 3 chunkserverCurve块存储RAFT应用 请求处理流程 以写请求为例: 1. Client 发送写请求给 Leader ChunkServer。 2. ChunkServer 收到请求,将请求封装成一个 log entry,提交给 raft。 3. raft模块在本地持久化 apply请求,数据保存在rocksdb,向 rocksdb插入记录。 • raft snapshot,利用rocksdb的快照功能, 对rocksdb打快照。 • Curve文件系统也是使用copyset管理。 • 写日志的方式与Curve块存储基本一致,实现细节略有差异。 • raft apply和raft snapshot的实现和Curve块存储不同。 • metaserver有两套存0 码力 | 29 页 | 2.20 MB | 5 月前3CurveFS方案设计
Page 6 of 14 1. 1. 2. 3. 1. 1. 2. 3. metaserver: 元数据服务进程。一个进程管理多个复制组 copyset: 复制组,使用 raft 保证数据一致性。复制组中保存文件系统的部分元数据信息 文件系统元数据和复制组是多对多的关系 一个复制组可以包含多个文件的元数据信息 复制组 wal 记录元数据操作 filename-dentryInfo 信息 copyset 启动的时候根据 inode 和 dentry 分别建立对应的内存结构,再回放 wal 日志完成构建 卷的元数据管理 卷的元数据中需要包含建立在该卷之上的文件系统元数据分片的位置,以便进行元数据的索引 常见的元数据操作 Create 与 mds 交互获取 inode 和 dentry 的 copyset 位置 创建 inode© XXX Page 和 dentry 的 copyset 位置 创建 inode 创建 dentry Lookup (/A/B) 与 mds 交互获取 /(inodeid=1) 所在的 copyset 根据 parent-inode=1 和 name=A 获取对应的 dentry,从而获取到 /A 的 inode 根据 /A 的 inodeId 查询 /A/B 所在的 copyset 根据 parent-inode=*0 码力 | 14 页 | 619.32 KB | 5 月前3CurveBS IO Processing Flow
Each node in the figure represents a data node (ChunkServer). A CopySet is the basic unit of data replication in CurveBS. A CopySet contains multiple chunks. Copysets in CurveBS are created in advance advance. When users write data, they only need to select an appropriate CopySet and create a new chunk. Why use a CopySet to manage data? 1. Reduce metadata. If the replication group membership is the communication traffic between replication groups is heavy. Once a CopySet is introduced, it can be explored with CopySet granularity. 3. Improve data reliability. If the replication group is0 码力 | 13 页 | 2.03 MB | 5 月前3CurveFS Client 概要设计
*userdata, struct fuse_conn_info *conn); 根据挂载信息,从mds获取文件系统信息(或superblock),块分配器(bitmap)和root inode所在的copyset、 metaserver ip等信息 去metaserver获取文件系统信息(super block),缓存到client端。 destroy void (*destroy) (void *userdata); inode id和name从denty缓存中找到对应的denty结构; 如果dentry缓存中不存在对应的inode,则从mds根据parent inode id获取parent inode 所在copyset,metaserver ip等信息 ,然后从metaserver获取denty(这里有两种方式,一种是只获取当前需要的 denty,一种是list整个目录的denty,这个需要考虑用哪个接口) struct fuse_file_info *fi); 首先根据inode id 从缓存中查找到对应inode结构; 如果inode缓存中不存在对应的inode,则从mds获取inode所在copyset,metaserver ip等信息,然后从metaserver获取inode结构,缓存之; 判断inode结构中,对应请求[off, size]位置的空间是否有分配:如果未分配或只有部分分配空间0 码力 | 11 页 | 487.92 KB | 5 月前3Curve质量监控与运维 - 网易数帆
rver;以避免升级 时一个copyset中多个ChunkServer离线,导致业务IO挂起。 重启NEBD Server 29/33自动均衡 Curve可以在copyset层面自动均衡集群负载, 无需人工干预: Copyset均衡 各ChunkServer上copyset数量均衡 Leader均衡 各ChunkServer上copyset leader数量均衡 Scatter-width(打散度)均衡 Scatter-width(打散度)均衡 各ChunkServer上全部copyset,其副本分布的 ChunkServer总数量均衡。 30/33网络丢包10% 自动故障恢复 Curve可在多种软硬件故障场景(如单mds故障、单ChunkServer故障、硬盘故障、网络丢包等) 实现自动恢复,保障存储服务高可用性。 多对多,恢复时间短 精确的流量控制,对io影响很小 Ki Kill一个节点所有ChunkServer进程 31/33快照克隆工具snaptool Curve_ops_tool 查询Curve状态 管理Curve文件 管理copyset 运维工具 Ansible 一键部署: ansible-playbook -i server.ini deploy_curve.yml 一键升级:ansible-playbook -i server0 码力 | 33 页 | 2.64 MB | 5 月前3OID CND Asia Slide: CurveFS
Server failure 4s Server fake death 4s Slow response 1s frequentlyData availability analysis Copyset allocation algorithm cluster with 1200 disks (each have MTBF 1.2 million hours) 3 replicas Restore can take awayKey designs used by CURVE High availability and reliability ● Cluster topology ● CopySet pre-allocation algorithm ● Raft Consistency protocol High performance ● pre-created file pool scattered across storage nodes in the cluster Chunkservers are grouped by failure domains Nodes in a COPYSET belong to different failure domainsCURVE IO data flowOther performance optimizations RAFT protocol0 码力 | 24 页 | 3.47 MB | 5 月前3
共 20 条
- 1
- 2