Curve元数据节点高可用
Observe的流程 4. 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受到影响退出,不一定可以正常处理。 2 GetTimeout < ElectionTime 4.2.4.3 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有两个外部依赖模块,一是mysql, 用于存储集群拓扑的相关信息;二是etcd,用于存储文件的元数据信息。而etcd可以用于实现mds高可用,没必要引入其他组件。 使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删掉。这在很多分布式锁的实现上都会用到,可以保证锁的实时性和有效性。CAS(Atomic0 码力 | 30 页 | 2.42 MB | 5 月前3Raft在Curve存储中的工程实践
Algorithm(Extended Version)》 • raft 是一种Leader-Based的Multi-Paxos变种,提供了更完整更清晰的协议描述,更容易理解和实现。 • raft可以解决分布式理论中的CP,即一致性和分区容忍性 • 大多数副本成功即可返回成功 • 速度取决于写的较快的大多数RAFT协议简介 • Leader:负责从客户端接受日志,把日志复制到其 他服务器,当保证安全性的时候告诉其他服务器应用 选举成功,领导⼈会管理整个集群直到任期结束。 • 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. leader把请求指令记录下来,写入日志,然后并⾏发 给其他的服务器,让他们复制这条⽇志。 3. 当这条⽇志条⽬被安全的复制,leader会应⽤这条⽇ 志条⽬到它的状态机中。 4. 然后把执⾏的结果返回给客户端。 writer, Closure* done); int on_snapshot_load(SnapshotReader* reader); void on_leader_start(int64_t term); void on_leader_stop(const butil::Status& status); void on_error(const Error& e); braft 接口 什么是braftCurve介绍0 码力 | 29 页 | 2.20 MB | 5 月前3Curve核心组件之mds – 网易数帆
cs11, cs3) copyset-4: (cs6, cs9, cs12)COPYSET client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求(fd, offset, length) ; 2. Client 向 mds 查询请求的元数据, offset in chunk, length in chunk); 3. Client 向 chunkserver 查询 chunk 所在的 copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求client (IP, port, CopysetId, chunkId, offset in chunk, length in chunk) LeaderScheduler 是leader均衡调度器,根据集 群中leader的分布情况生成leader变更任务; • ReplicaScheduler 是副本数量调度器,根据当 前copyset的副本数生成副本增删任务; • RecoverScheduler 是恢复调度器,根据当前 copyset副本的存活状态生成迁移任务。 触发任务: • RapidLeaderScheduler 是快速leader均衡器,0 码力 | 23 页 | 1.74 MB | 5 月前3Curve核心组件之Client - 网易数帆
IOSplitor:IO转换拆分 ChunkClient、CliClient:与Chunkserver进行通信 前者负责IO请求 后者负责获取复制组(copyset)的leader MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 CLIENT整体架构QEMU: 实现了QEMU block与Client的对接层 向cinder/glance提供了Python IO处理:转换、拆分、合并 元数据获取及缓存 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 复制组所在的chunkserver列表 复制组的leader信息 Failover支持 MDS:只有主MDS才会监听端口 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 off: 子请求由哪个chunkserver处理,依赖以 下信息: 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 复制组所在的chunkserver列表 复制组的leader信息CLIENT IO流程 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 由MDS分配并持久化,client拆分用户请 求时会获取并进行缓存0 码力 | 27 页 | 1.57 MB | 5 月前3Curve设计要点
软件单元:chunkserver • 物理机:server • 故障域:zone • 物理池:poolIO流程 client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 并缓存到本地,请求转换为对 chunk 的请求 3. Client 向 chunkserver 查询 chunk 所在的 copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求, Chunkserver 完成后通知client; 5. Client通知用户请求完成。背景 01 02 03 04 总体设计 系统特性 近期规划单卷4K随机读写IOPS chunkserver 使用raft,2N + 1 个副本允许 N 副本异常自治 • 自动故障恢复 • 多对多,恢复时间短 • 精确的流量控制,对io几乎无影响自治 • 集群负载和资源均衡 • leader copyset scatter-width • 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client: 对接上层业务 •0 码力 | 35 页 | 2.03 MB | 5 月前3CurveFS Copyset与FS对应关系
CopySetScheduler: copyset均衡调度器。根据集群中copyset的分布情况生成copyset迁移任务; LeaderScheduler: leader均衡调度器。根据集群中leader的分布情况生成leader变更任务; ReplicaScheduler: 副本数量调度器。根据当前copyset的副本数生成副本增删任务; RecoverScheduler: 恢复调度器。根 1、mount的时候,获取这个fs的所有partition和copyset信息。分片信息的缓存。 2、paritition的选择。 3、和metaserver进行交互的时候,向对应的partition下发请求。包括get leader,重试。 4、和metaserver交互时,request请求需要带上copyset信息。 7.2 mds端 1、需要实现topo模块 2、实现mds和metaserver的心跳 3、0 码力 | 19 页 | 383.29 KB | 5 月前3CurveBS IO Processing Flow
The Client queries the ChunkServer for the leader ChunkServer node of the copyset where chunk resides. 4. The Client sends read/write requests to the leader (IP=127.0.0.1, port=8200, CopysetId=1, chunkId=5678 as an example 1. The Client sends the request to the ChunkServer where the replication group Leader resides 2. When the user request arrives at the ChunkServer, the CopysetNode will encapsulate0 码力 | 13 页 | 2.03 MB | 5 月前3Curve核心组件之chunkserver
ChunkserverID,token,chunkserver持久化这些信息,并在后续心跳上报时携带这些信息。ChunkServer核心模块-CopysetNode 写请求: 1. Client发送写请求给Leader ChunkServer 2. 请求封装,提交给Raft node 3. 本地持久化entry的同时发送给其他peer 4. 本地持久化log entry成功,并且有一个peer也落 盘成功,则commit peer from CS1 to CS2的operator给这三个copyset ④ MDS通过RPC在CS2上创建copyset1,2,3这三个copyset ⑤ 假定三个copyset的leader都是CS3,在CS3的下一次心跳的 response中,下发第三步生成的三个operator ⑥ CS3收到change peer from CS1 to CS2的operator,给CS2同步 to CS1的operator给 部分copyset,比如copyset1,2,3 ⑤ MDS通过RPC在CS1上创建copyset1,2,3这些copyset ⑥ 假定三个copyset的leader都是CS3,在CS3的下一次心跳的 response中,下发第四步生成的三个operator ⑦ CS3收到change peer from CS2 to CS1的operator,给CS1同步0 码力 | 29 页 | 1.61 MB | 5 月前3新一代云原生分布式存储
由中心节点MDS以Scatter-width 均衡为目标进行创建 • 由中心节点MDS在各Copyset中 根据权重进行选择架构简介 — 一致性协议 复制策略 • 主动拷贝,由 leader 向 follower 并发拷贝 异常处理 • 自动leader选举 • 2N+1 副本数可以容忍 N 副本数异常 Quorum一致性协议 • 大多数副本写完成返回客户端 • 延迟取决于所有副本中最快的大多数主要亮点0 码力 | 29 页 | 2.46 MB | 5 月前3Curve质量监控与运维 - 网易数帆
29/33自动均衡 Curve可以在copyset层面自动均衡集群负载, 无需人工干预: Copyset均衡 各ChunkServer上copyset数量均衡 Leader均衡 各ChunkServer上copyset leader数量均衡 Scatter-width(打散度)均衡 各ChunkServer上全部copyset,其副本分布的 ChunkServer总数量均衡。 30/33网络丢包10%0 码力 | 33 页 | 2.64 MB | 5 月前3
共 11 条
- 1
- 2