首页 > 其他分享 >Ceph读写流程

Ceph读写流程

时间:2023-04-25 13:12:21浏览次数:30  
标签:调用 请求 读写 OSD Ceph client 线程 流程

Ceph 读写流程

概述

Ceph的读写流程是由OSD和PG共同完成的,对于OSD而言,OSD的主要任务是进行消息的接收分发,最终将消息存到队列op_wq中。接下来交由ShardedThreadPool线程池中的线程来处理读写,线程会将请求从op_wq中取出,做如下操作。

在ReplicatedPG类中进行一系列的合法性检查。

对于读请求,在ReplicatedPG类中完成读请求流程,向client发送ACK消息完成读操作。

对于写请求,需要调用ReplicatedPGBackend类,向从副本发送写指令,在从收到所有从副本完成写操作之后,主才会向client发送ACK消息完成写操作。

写操作相对于读操作复杂很多,这是由于Ceph采用副本的高可用机制。一份完整的数据需要存放在多个OSD上面,只有当所有从都确认数据存储到本地,这时候主才可以向client发送写操作成功消息。在 [RADOS: A Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters]中对于写消息提出了primary-copy, chain, splay三个副本策略。 Ceph目前(v10.2.10)采用primary-copy策略。如下图所示

osd1是主osd,在第一个RTT收到client写请求时,向从发送写请求,主在RTT3收到osd2和osd3的ack

的时候向client发送ack。

具体读写流程:

  1. OSD接收消息到消息进入op_wq

如下图所示

ms_fast_dispatch函数是OSD中线程处理client请求的入口函数,接下来进行一系列的调用,进入到op_wq中等待其它线程调用。

  1. ####op_wq出队列线程调用

ShardedThreadPool线程池会选取线程调用shardedthreadpool_worker函数对入队列的 operations进行处理。最终调用ReplicatedPG::do_reequest对于客户端的请求进行分类处理。

  1. 调用ReplicatedPG::execute_ctx(OpContext *ctx)处理读写
    1. 对于读请求来说,在execute_ctx()函数中会调用ReplicatedPGBackend类中的函数

objects_read_sync读入数据,然后在后续的流程中调用complete_read_ctx()向client回复。

    1. 对于写请求来说

如果log过多,需要整理 log 调用calc_trim_to()

调用ReplicatedPGBackend类中issue_op() 向所有从osd发送写请求 主处理从的写完成消息,如果所有的从都完成了写请求,调用回调函数 ReplicatedPG::eval_repop()向client发送消息完成写操作

下图是写操作的示意图:

图中第二步,主向从发写消息的消息类型是MSG_OSD_REPOP, 第三步从回复的消息类型是 MSG_OSD_REPOPREPLY,所带的CEPH_OSD_FLAG_ONDISK标识位为1,表示数据已经写到disk上。

标签:调用,请求,读写,OSD,Ceph,client,线程,流程
From: https://www.cnblogs.com/xuning-xuning/p/17352292.html

相关文章

  • P.-7如何查看具体的过滤器、P.-8认证流程图讲解
    P.-7如何查看具体的过滤器​我们可以通过Debug查看当前系统中SpringSecurity过滤器链中有哪些过滤器及它们的顺序。P.-8认证流程图讲解(了解即可)概念速查:Authentication接口:它的实现类,表示当前访问系统的用户,封装了用户相关信息。Authenticat......
  • Ceph性能测试总结
    Ceph性能测试总结测试目的:通过对ceph集群块接口常见性能指标进行简单测试,达到以下几个目的:了解当前集群配置方案对硬件性能的利用情况;验证集群性能计算公式的正确性;识别集群性能瓶颈点;为后续性能优化提供部分参考;测试指标:块接口IOPS,带宽,时延硬盘性能一般使用以下几个......
  • ceph满盘导致业务停止后的终极补救措施
    ceph满盘导致业务停止后的终极补救措施现象:磁盘满,osd异常此时ceph集群停止业务,且不能执行rbdrmglance/*****命令删除任何文件。解决办法:方法一:调高ceph的满盘比例,比如原值0.95为满盘,现在修改为0.98修改所有ceph节点/etc/ceph/ceph.conf添加monosdfullratio=0.98monosd......
  • P.4-前后端分类登录校验、P.6-SpringSecurity完整流程
    P.4-前后端分类登录校验P.6-SpringSecurity完整流程SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤器。(了解即可)UsernamePasswordAuthenticationFilter:负责处理我们在登陆页面填写了用户名密码后的登陆请求。入门案例的认证工作主要......
  • Hudi——写流程(UPSERT)
    COW(Copy-on-Write)COW(Copy-on-Write)更新流程如下首先,对要更新的数据进行去重,确保每个记录只有一个条目。这是为了避免多个记录更新同一个键,导致数据不一致。对这批数据创建索引,将HoodieKey(包含键和分区信息)映射到HoodieRecordLocation(包含文件ID和记录偏移量)。创建索引(Ho......
  • Ceph_osd_应急权重调整方案
    目录1.问题背景2.操作影响3.适用版本4.操作范围5.操作周期6.操作步骤6.1查看当前osd数据状态6.2计算需要调整的osd权重6.3调整权重7.回退步骤1.问题背景集群pg数量规划不合理,导致在集群存入大量的数据之后,osd上的数据分布不均衡,部分osd的存储百分比接近或超......
  • Xlua热更流程
    转载自:深入理解xLua基于IL代码注入的热更新原理-iwiniwin-博客园(cnblogs.com)例子:第一步:GenerateCode:为打了Hotfix标签的方法生成对应的匹配函数[Hotfix]publicclassTestXLua{publicintAdd(inta,intb){returna-b;//这里的Add方法故意......
  • javaIO之随机读写
    javaIO包提供了很多可以读写文件的类,但是如果想在文件的指定位置读写,就需要使用RandomAccessFilepublicclassApp{publicstaticvoidmain(String[]args)throwsIOException{{Strings1="ggg\n";Strings2="ggg,hhh\n";......
  • JAVA流程控制
    Java流程控制一、Scanner对象next():一定要读取到有效字符后才可以结束输入对输入有效字符之前遇到的空白,next()方法会自动将其去掉只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符next()不能得到带有空格的字符串nextLine():以Enter为结束符也就是说ne......
  • 分析需要修改的地方与SpringSecurity完整流程
    分析需要修改的地方 原理初探​想要知道如何实现自己的登陆流程就必须要先知道入门案例中SpringSecurity的流程。SpringSecurity完整流程SpringSecurity完整流程SpringSecurity的原理其实就是一个过滤器链,内部包含了提供各种功能的过滤......