Raft在Curve存储中的工程实践• 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. leader把请求指令记录下来,写入日志,然后并⾏发 给其他的服务器,让他们复制这条⽇志。 3. 当这条⽇志条⽬被安全的复制,leader会应⽤这条⽇ 志条⽬到它的状态机中。 4. 然后把执⾏的结果返回给客户端。 • 分钟一次,每次快照会产生大量的数据拷贝,占用chunkserver的 处理能力,对磁盘造成很大压力,影响正常IO。 解决思路: chunk支持覆盖写,覆盖写天然是幂等的,写一次和写多次结果一致。 打快照只记录chunk文件的列表,不拷贝chunk的内容。从快照+日志加载数据时,下载的chunk文 件不是打快照的状态,而是最新的状态,回放日志时,把数据重写一遍。Curve对RAFT的优化 优化点二: chunkfile pool0 码力 | 29 页 | 2.20 MB | 6 月前3
MySQL 兼容性可以做到什么程度Binlog 特性详情 提供与 MySQL 生态下游透明对接能力 产品体验 • 与 MySQL Binlog 完全一致体验 • 文件格式兼容:Binlog v4 row-based • SQL 指令兼容:show binary logs… • MySQL DUMP 协议 • 保证分布式事务完整性与顺序 • 同一连接串 已验证工具或系统 • MySQL Slave(change master) 下游Demo for ReplicationPolarDB-X Replication 特性详情 提供与 MySQL 主备复制的能力 产品体验 • 支持 MySQL Change Master 指令 • 原生作为 MySQL 备库的能力 • 支持 PolarDB-X 之间数据同步 • 支持 DDL 同步 • 支持事务复制、行级复制 已验证工具或系统 • MySQL/MariaDB0 码力 | 18 页 | 3.02 MB | 6 月前3
Curve核心组件之Client - 网易数帆 IO处理:转换、拆分、合并 元数据获取及缓存 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 复制组所在的chunkserver列表 复制组的leader信息 Failover支持 MDS:只有主MDS才会监听端口 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 复制组所在的chunkserver列表 复制组的leader信息CLIENT IO流程 逻辑chunk与物理chunk映射关系 物理chunk所属的复制组(copyset) 由MDS分配并持久化,client拆分用户请 求时会获取并进行缓存 为了减少元数据量,MDS一次会连续分配 1G范围内的映射关系,称为SegmentCLIENT IO流程 复制组所在的chunkserver列表 chunkserver心跳定期上报给MDS 这两种信息client也会进行缓存 上报心跳CLIENT IO流程 子请求处理步骤: 1. 从MDS获取逻辑chunk与物理chunk的 对应关系(包含逻辑池以及复制组信息) 2. 从MDS获取复制组所在的机器列表 3. 从Chunkserver获取复制组leader信息 4. 将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io0 码力 | 27 页 | 1.57 MB | 6 月前3
CurveFS S3数据整理(合并碎片、清理冗余),需要注意不超出len),compaction+1,chunkid为上一步获取的chunkid,为需要新增的obj - 老的obj为全部需要删除的部分 应用变更 - 先读写新增的s3 objects列表, 由于新增了version字段, 不会涉及到覆盖老的对象 - 加锁, 增量的更新inode的s3chunkinfolist, 保证原子更新, 更新失败回退新增数据 - 等待N秒, 保证mds已经告知client缓存失效 已经在整理的任务不会被新的删除标记的请求打断. 如果标记删除到实际删除之间的时间间隔非常短, 并且在标记删除前已经开始了整理任务, 可能会出现边删除边整理的状态(出现概率较小) 可以在实际删除前检查当前整理的inode列表, 如果在列表里就暂时跳过(同步删除)/重新丢进删除队列(异步删除) 或者就不管, 处理一下报错, 让后续的应该会开发的数据清理工具来删除, 因为出现这个冲突的概率比较小 truncate: 只进行元数据里len的改变0 码力 | 3 页 | 101.58 KB | 6 月前3
Curve文件系统元数据持久化方案设计)© XXX Page 11 of 12 1. 2. 3. 如果自己实现,只是一个简单的 sava/load 逻辑,比较清晰 redis 中有许多数据结构可供使用,如 (哈希、列表、set、sort_set),但对于目前的需求来说,我们内存数据结构使用的是 C++ STL 中的哈希表(unsorted_map),之后有可能根据需求换成 B+ 树或跳表,但是 redis 中的这些数据结构我们是不需要的0 码力 | 12 页 | 384.47 KB | 6 月前3
Curve支持S3 数据缓存方案在Flush函数中,加写锁,通过swap获取FileCacheManager的chunkCacheMap_到临时变量tmp,并清空chunkCacheMap_,解写锁。遍历tmp中的DataCache列表,执行Flush函数,并更新对应的元数据。 3.Flush返回成功。 4.如果DataCache的Flush失败,则整个Flush失败。但是缓存需要重新回退到chunkCacheMap_中,这里要注0 码力 | 9 页 | 179.72 KB | 6 月前3
CurveFS Client 概要设计off_t off, struct fuse_file_info *fi); 根据inode id 找到当前dir的inode struct结构,从缓存或metaserver获取当前dir的dentry列表。 读取当前[off,size]对应位置的dentry,调用fuse_add_direntry,生成dir buffer,返回 getattr & setattr void (*getattr)0 码力 | 11 页 | 487.92 KB | 6 月前3
CurveFs 用户权限系统调研fuse_lowlevel.h is const struct fuse_ctx *fuse_req_ctx(fuse_req_t req) 对ACL(Access Control Lists)的管理 访问控制列表(ACL 或 POSIX ACL)是多用户系统的 。 与基本的 POSIX RWX 位相比,POSIX ACL 有助于对文件系统权限进行 的控制。可以针对用户(User)、群组(Group) 附加安全控制功能0 码力 | 33 页 | 732.13 KB | 6 月前3
共 8 条
- 1













