文档章节

Ceph读写流程

 惊浪
发布于 2015/01/20 10:28
字数 651
阅读 4911
收藏 6

一、Osd中的模块

消息封装

OSD上发送和接收信息。有两类:

1.cluster_messenger -与其它OSDsmonitors沟通
2.client_messenger
-与客户端沟通

消息调度

Dispatcher类,主要负责消息分类

工作队列

1.       OpWQ: 处理ops(从客户端)和sub ops(从其他的OSD)。运行在op_tp线程池。

2.       PeeringWQ: 处理peering任务,运行在op_tp线程池。

3.       CommandWQ:处理cmd命令,运行在command_tp

4.       RecoveryWQ: 数据修复,运行在recovery_tp

5.       SnapTrimWQ: 快照相关,运行在disk_tp

6.       ScrubWQ: scrub,运行在disk_tp

7.       ScrubFinalizeWQ: scrub,运行在disk_tp

8.       RepScrubWQ: scrub,运行在disk_tp

9.       RemoveWQ: 删除旧的pg目录。运行在disk_tp

 

线程池

4 OSD线程池:

1.       op_tp: 处理opssub ops

2.       recovery_tp:处理修复任务

3.       disk_tp: 处理磁盘密集型任务

4.       command_tp: 处理命令

 

二、Ceph读流程


注:索引的格式,查找更新索引、如何持久化的,还没搞清楚。

没有所谓索引,一切皆规则:

每个object的文件名格式为:

objectname_key_head(snap_num)_hash_namespace_poolid

Ø  objectname:对象名

Ø  keynamespace:都是客户端指定,做名称空间细分用。当块儿设备使用时,一般都置为空

Ø  head(snap_num)snapshot版本

Ø  hash:由objectname计算得到,u_int32_t类型,这里转换为16进制字符打印,如3AF0B980

Ø  poolidpoolid

 

目录结构:

数据目录/PG名称/子目录/object文件名

举例说明:

/data09/ceph/osd2/current/0.0_head/DIR_0/DIR_8/DIR_9/10000007af4.00000000__head_3AF0B980__0

其中,子目录是根据object文件名中hash字段的字符反向排列生成。当一个目录中的文件个数大于配置值(merge_threshold * 16 * split_multiplier)时,会建子目录,对文件进行归档。

 

ReplicatedPG.h

ReplicatedPG.cc

 int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)函数中的

 Case CEPH_OSD_OP_READ分支                                       

 r = osd->store->fiemap(coll, soid, op.extent.offset, op.extent.length, bl);

 r = pgbackend->objects_read_sync(                  

           soid, miter->first, miter->second, &tmpbl);

 

 pgbackend->objects_read_syncint ReplicatedBackend::objects_read_sync调用 store->read(coll, hoid, off, len, *bl) ,来自ObjectStore::read

三、Ceph写流程

阶段1:主节点发请求

 

阶段2:从节点处理请求


osd->store->queue_transactions(&osr, rm->tls, onapply, oncommit);

这里注册的两个回调:

 Context *oncommit = new C_OSD_RepModifyCommit(rm);  当日志写入磁盘后被调用

 Context *onapply = new C_OSD_RepModifyApply(rm);    当该操作被处理后被调用

 

分别向主节点做ACKON_DISK两种回应。

 

注:transaction封装,journal log写入细节,对象写入细节还没来得及看

 

阶段3:主节点接收从节点回应,并回应客户端


© 著作权归作者所有

粉丝 15
博文 32
码字总数 19096
作品 0
福州
程序员
私信 提问
不讲CRUSH的Ceph教程是不完整的

前面我们提到了Ceph是一个支持统一存储架构的分布式存储服务。简单介绍了Ceph的基本概念和基础架构包含的组件,其中最重要的就是底层的RADOS和它的两类守护进程OSD and Monitor。上篇文章我们...

叁金
2018/08/27
0
0
Ceph 中的 PG 状态详解

Creating Peering Activating Active Backfilling Backfill-toofull Backfill-wait Incomplete Inconsistent Peered Recovering Recovering-wait Remapped Scrubbing Unactive Unclean Stale......

风华神使
09/03
415
0
ceph文件系统与原生磁盘读写性能的比较

一.测试目的 获取ceph文件系统的读写性能,并与原生磁盘进行比较 二.硬件及网络环境 1.硬盘信息 磁盘(型号,类型,容量) CPU 客户端 ST1000DM003-1CH162;SATA;1T Intel(R) Core(TM) i3-4...

北_木
2014/05/29
6.3K
35
分部署云存储系统Ceph架构剖析

云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备。目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块级存储卷,EBS适合于一些需要访问...

English0523
2015/12/25
0
0
Ceph存储系统Scrub机制分析

版权声明:更多内容,请关注【架构师技术联盟】公众号 https://blog.csdn.net/BtB5e6Nsu1g511Eg5XEg/article/details/84452614 2018年11月12日,Linux基金会在德国柏林的“Ceph Day”上正式宣...

架构师技术联盟
2018/11/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

高级技术题整理

1. 为什么等待和通知是在 Object 类而不是 Thread 中声明的? 一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答这种棘手...

泉天下
21分钟前
2
0
Elasticsearch

1 、下载 下载地址:https://www.elastic.co/downloads/past-releases 2 、安装 elasticsearch无需安装,解压即用。 3.运行 进入elasticsearch/bin目录,可以看到下面的执行文件: 双击运行 ...

少年已不再年少
21分钟前
5
0
Spring Boot 2.X(七):Spring Cache 使用

Spring Cache 简介 在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 两个接口来统一不同......

朝雾轻寒
24分钟前
3
0
java路径问题

在Java中有几种常见获取文件路径的方法,此处演示下用法和效果。 测试项目目录结构如右图: 1、使用File类 File file = new File("");// Java项目中-->D:\WorkSoftware\Workspace\EclipseP...

随心の随缘
26分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部