Curve核心组件之Client - 网易数帆ChunkClient、CliClient:与Chunkserver进行通信 前者负责IO请求 后者负责获取复制组(copyset)的leader MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 CLIENT整体架构QEMU: 实现了QEMU block与Client的对接层 向cinder/glance提供了Python API https://github.c 复制组的leader信息 复制组之间通过raft维护 通过CliClient向Chunkserver获取 这两种信息client也会进行缓存 上报心跳CLIENT IO流程 子请求处理步骤: 1. 从MDS获取逻辑chunk与物理chunk的 对应关系(包含逻辑池以及复制组信息) 2. 从MDS获取复制组所在的机器列表 3. 从Chunkserver获取复制组leader信息0 码力 | 27 页 | 1.57 MB | 6 月前3
CurveFS S3数据整理(合并碎片、清理冗余)increase it offset len } s3 object命名: chunkid_version_index (index为obj在chunk内的index) 执行步骤 数据整理作为一个后台服务(线程池), 运行于metaserver, 遍历metaserver的inode进行数据整理的尝试, 入队inodekey, 如果是已有inode任务, enqueue直接返回 增量的更新inode的s3chunkinfolist, 保证原子更新, 更新失败回退新增数据 - 等待N秒, 保证mds已经告知client缓存失效, 需要更新为新的s3chunkinfolist // 需不需要这个步骤@xuchaojie @chenwei确认 - 删除老的object 问题与风险 在执行变更时, 在bcd步挂掉时, 会造成s3数据的残留 当同时有多个变更inode元数据(s3chunkinfolist)的动作时 如果数据整理和client写同时进行了同一个inode的变更, 总有一个变更会丢失,© XXX Page 3 of 3 2. 1. 2. 1. 2. 需要进行一个merge的步骤 在做变更时如果有其他op可能会产生的冲突: 读: 在执行变更删除原来的s3 object时, 执行读的客户端的缓存可能还是原有的chunkinfolist, 可能会去读已经删除的object,0 码力 | 3 页 | 101.58 KB | 6 月前3
Curve文件系统元数据持久化方案设计AOF 缓冲区的内容以 append 方式写入文件 (详见: aof.c/flushAppendOnlyFile) (3) 文件同步: 根据 appendfsync 配置选项决定文件同步频率, 该步骤与步骤 2 紧密关联 (详见: aof.c/flushAppendOnlyFile)© XXX Page 10 of 12 1. 所以,AOF 不能保证数据 100% 不丢失(RDB 持久化更不能),结论就是单靠 中的性能损耗均摊在每一次 SET/DEL 操作中(如 rehash 总耗时 1 秒,均摊给 100 个请求,那么每个请求只增加延时 10 毫秒),rehash 过程如下: 哈希表渐进式 rehash 的详细步骤: (1) 为 ht[1] 分配空间, 让字典同时持有 ht[0] 和 ht[1] 两个哈希表 (2) 在字典中维持一个索引计数器变量 rehashidx, 并将它的值设置为 0, 表示 rehash0 码力 | 12 页 | 384.47 KB | 6 月前3
Curve支持S3 数据缓存方案lush。 4.更新元数据,清理DataCache缓存,DataCacheNum_减1。 5.遍历完一轮DataCache后,获取DataCacheNum值,如果不为0,则继续遍历,如果为0则回到1步骤。 poc测试验证 根据上述设计,完成初步daemon,测试结果如下图 目前看写性能有明显的提升,但时延仍然很高, 。 需要进一步分析0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve元数据节点高可用Page 16 of 30 1. 2. 3. 4.1 Curve中MDS的选举过程 如果对代码部分不感兴趣,请跳到 4.2 图示说明选举流程 MDS使用election模块选有以下三个步骤: 调用Campagin进行选举 如果选举成功,获取一下当前的leaderKey,看是否存在。如果不存在,则继续竞选;如果存在进行下一步 调用Observe观察leader的变化,如果leader有变化,mds退出;重新进行选举0 码力 | 30 页 | 2.42 MB | 6 月前3
共 5 条
- 1













