ceph peering流程分析

article/2025/9/17 0:51:04

数据结构

pg_interval_t{

vector<int32_t> up, acting;//当前pg_interval的up和acting的osd列表

  epoch_t first, last;//该interval的起始和结束epoch

  bool maybe_went_rw;//在这个阶段是否可能有数据读写

  int32_t primary;//主osd

  int32_t up_primary;//up状态的主osd

}

PriorSet {

Const bool ec_pool;//是否是ec pool

    set<pg_shard_t> probe; //需要probe的osd

set<int> down;  //当前是down的osd

map<int, epoch_t> blocked_by;  //导致pg_down为true的osd及对应osdmap的epoch

bool pg_down;   //pg是否为down

boost::scoped_ptr<PGBackend::IsRecoverablePredicate> pcontdec;//判断pg是否可恢复的函数指针

}

pg_info_t {

spg_t pgid;//pgid和shardid信息

  eversion_t last_update;    // last object version applied to store.当前osd最新的一次更新

  eversion_t last_complete;  // last version pg was complete through.要保证所有osd都更新的版本号

  epoch_t last_epoch_started;// last epoch at which this pg started on this osd //最新的一次变成active后的epoch

  version_t last_user_version; // last user object version applied to store

  eversion_t log_tail;     // oldest log entry.

  hobject_t last_backfill;   //backfill的object指针,正常情况为hobject_t::get_max()

  interval_set<snapid_t> purged_snaps;

  pg_stat_t stats;//统计信息

  pg_history_t history;//历史版本

  pg_hit_set_history_t hit_set;//cache tier相关

};

pg_log_t{

  eversion_t head;    // 最新的pg_log_entry版本

  eversion_t tail;    // 最老的pg_log_entry

  eversion_t can_rollback_to;//可以回滚的版本

  eversion_t rollback_info_trimmed_to;//回滚场景可以trim的版本

  list<pg_log_entry_t> log;  //具体的pg_log_entry信息

};

pg_missing_t {

  map<hobject_t, item> missing;//丢失对象和版本        

  map<version_t, hobject_t> rmissing;

};

class MissingLoc {

  map<hobject_t, pg_missing_t::item> needs_recovery_map;//需要恢复的对象和版本信息

  map<hobject_t, set<pg_shard_t> > missing_loc;//表示该对象在哪些osd上存在

  set<pg_shard_t> missing_loc_sources;//存在missing对象的osd列表

  PG *pg;

  set<pg_shard_t> empty_set;

};

概要分析

Pg状态机的总体状态转换图

172151_10c9_2257799.png

Peering过程中的交互图

172202_Inma_2257799.png

整体来看peering分为4个阶段:Getinfo,Getlog,Getmissing,Active。必要的时候在getmissing之后会有个waitupThru。

Getinfo:pg的主osd收集其他从osd上pg_info_t的信息。

GetLog:选出拥有权威日志的osd,如果不是主则从该osd拉去权威日志给主osd。

GetMissing:主osd去其他osd上拉取pg_entry_t,通过和权威日志对比pg_entry_t来判断各个osd上缺失的object信息。

Active:激活主osd和从osd

基本概念

临时PG、acting set和up set

acting set为pg对应的osd列表,其中列表第一个为主osd。一般情况下acting set和up set是一样的。假设一个pg的acting为[1,2,3]。当1挂了后up为[4,2,3]。这个时候由于4是新加入该pg的osd,上面并没有数据,且需要进行backfill。这个时候会产生一个临时pg。则up为[4,2,3]。但是acting还是为[2,3]。

Up_thru

简单举例:当某个pg对应的osd列表为[1,2],min_size为1。当osd.1和osd.2依次挂掉,可能会有2种情况:

情况1:osd.1挂了,osd.2还未完成peering阶段,osd.2紧接着挂了。这个时候数据无法写入osd.2。

情况2:osd.1挂了,osd.2完成peering进入active后挂了。这个时候该pg存在一个时间窗口可以正常写入数据。

当osd.1重新启动后,如果是情况1,因为没有新数据写入,则pg可以正常完成peering。如果是情况2,有可能一部分数据只在osd.2上存在,则无法完成peering。

为了区分情况1和情况2,所以引入up_thru。up_thru记录了每个osd完成peering的epoch值,osdmap会维护up_thru[osd]的数组。

引入up_thru后,假设初始的up_thru为0。则情况1中up_thru[osd.2]为0,而情况2中up_thru[osd.2]不为0。

Osdmap维护


http://chatgpt.dhexx.cn/article/EHI7o0en.shtml

相关文章

ceph存储 PG的状态机和peering过程

&#xfeff;&#xfeff; PG 的状态机和peering过程 首先来解释下什么是pg peering过程&#xff1f; 当最初建立PG之后&#xff0c;那么需要同步这个pg上所有osd中的pg状态。在这个同步状态的过程叫做peering过程。同样当启动osd的时候&#xff0c;这个osd上所有的pg都要进行…

你所不知道的BGP知识,Peering 和IP-Transit.

了解网络的同行都知道BGP又称“边界网关协议”&#xff0c;他的英文全称是“border gateway protocol”&#xff0c;业内简称“BGP”&#xff0c;他是应用在TCP上的一种路由协议&#xff0c;它的主要功能是为了实现自治系统间的路由选择功能&#xff0c;通俗来讲就是通过控制路…

AWS攻略——Peering连接VPC

文章目录 创建IP/CIDR不覆盖的VPC创建VPC创建子网创建密钥对创建EC2 创建Peering接受Peering邀请修改各个VPC的路由表修改美东us-east-1 pulic subnet的路由修改悉尼ap-southeast-2路由 测试知识点 我们回顾下《AWS攻略——VPC初识》中的知识&#xff1a; 一个VPC只能设置在一…

蒙特卡洛法(Monte Carlo)电动汽车负荷预测matlab程序设计

电动汽车充电负荷的时间分布预测 规模化电动汽车充电负荷在未来某一天随时间特性的分布规律是研究电动汽车发展对配 电网影响以及充电站选址定容问题的前提与基础。电动汽车充电负荷的分布情况与车主的行 为特征有关&#xff0c;不同类型的电动汽车车主出行规律以及充电习惯不…

蒙特卡洛法(三)马尔科夫链蒙特卡洛法

马尔科夫链蒙特卡洛法适合于随机变量是多元的、密度函数是非标准形式的随机变量各分量不独立的情况。如何构建具体的马尔科夫链是这个方法的关键&#xff0c;离散变量的时候&#xff0c;需要定义转移矩阵&#xff0c;构建可逆马尔科夫链&#xff0c;保证遍历定理成立。常用的马…

蒙特卡洛法简述

蒙特卡洛法简述 一.简介&#xff1a; 1.蒙特卡洛方法又称随机模拟法&#xff0c;随机抽样技术&#xff0c;是一种随机模拟方法。 蒙特卡洛法使用随机数&#xff08;伪随机数&#xff09;以概率和统计理论方法为基础&#xff0c;将所要求解的问题同一定的概率模型相互联系&am…

蒙特卡洛法模拟计算圆周率π

一、蒙特卡洛法介绍 蒙特卡罗方法&#xff08;Monte Carlo method&#xff09;&#xff0c;也称统计模拟方法&#xff0c;是一种以概率统计理论为基础的数值计算方法&#xff0c;常用于特定条件下的概率计算问题。蒙特卡罗是摩纳哥的著名赌城&#xff0c;该法为表明其随机抽样的…

蒙特卡洛法之MATLAB实现

by WC 1.7.2016蒙特卡洛法&#xff08;随机取样法&#xff09;也称为计算机随机模拟方法&#xff0c;它源于世界著名的赌城——Monte Carlo。它是基于对大量事件的统计结果来实现一些确定性问题的计算。使用蒙特卡洛法必须使用计算机生成相关分布的随机数。 eg&#xff1a; y…

C语言文件打开关闭和读写

文件在进行读写操作之前要先打开&#xff0c;使用完毕要关闭。在C语言中&#xff0c;文件操作都是由库函数来完成的。在本节内将介绍主要的文件操作函数。 文件的打开(fopen函数) fopen函数用来打开一个文件&#xff0c;其调用的一般形式为&#xff1a; 文件指针名 fopen( 文…

C语言文件详解(一)文件介绍,文件打开和关闭

文章目录 一、文件介绍1.1为什么使用文件1.2什么是文件1.3文件名 二、文件的打开和关闭2.1文件指针2.2文件的打开和关闭 一、文件介绍 1.1为什么使用文件 文件属于文件的一种&#xff0c;与普通文件载体不同&#xff0c;文件是以硬盘为载体存储在计算机上的信息集合。那么为什…

C语言fopen打开文件失败了,原来是这个原因~~~~

大家好&#xff0c;我是疯狂的比特&#xff0c;一个每天在互联网上种菜和砍柴的程序员 今天给大家分享一个C语言初学者常见的一个问题。 问题 经常有人问我&#xff0c;我的C语言代码好好的&#xff0c;怎么就打开文件失败了呢&#xff1f; 我们先来看看代码吧 #include <s…

【C】C语言打开,读取文件

文章目录 C语言打开&#xff0c;读取文件一、明明白白我的心二、代码飞起来三、过程不重要&#xff0c;重点看结果 C语言打开&#xff0c;读取文件 一、明明白白我的心 1、gcc编译C语言代码 2、winds10操作系统 3、VS Code编辑器(强推&#xff0c;最近博主用这个…

C语言<文件的打开与关闭>

目录 一.为什么使用文件 二.什么是文件 1.程序文件 2.数据文件 3.文件名 三.文件的打开与关闭 1.文件指针 2.文件的打开与关闭 结语 一.为什么使用文件 我们前面学习结构体时&#xff0c;写了通讯录的程序&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通讯录…

C语言文件打开方式

使用文件的方式共有12种&#xff0c;下面给出了它们的符号和意义。 文件打开方式 意义 rt 只读打开一个文本文件&#xff0c;只允许读数据 wt 只写打开或建立一个文本文件&#xff0c;只允许写数据 at 追加打开一个文本文件&#xff0c;并在文件末尾写数据 rb 只…

C语言————文件的打开(知识点总结+举例)

fopen函数用来打开一个文件&#xff0c;其调用的一般形式为&#xff1a; 文件指针名fopen(文件名,使用文件方式); 其中&#xff1a; “文件指针名”必须是被说明为FILE 类型的指针变量&#xff1b; “文件名”是被打开文件的文件名&#xff1b; “使用文件方式”是指文件的类型…

【C语言】文件的打开和关闭,文件的顺序读写

文章目录 1、为什么使用文件 2、什么是文件 3、文件的打开和关闭 文件的打开 文件的关闭 4、文件的顺序读写 4.1文件读写的特点 4.2fputc、fgetc函数 4.3fgets、fputs函数 4.4fscanf、fprintf函数 5、标准输入输出流stdin、stdout 1、为什么使用文件 在编写例如通讯…

C语言-文件操作

当程序的生命周期结束&#xff0c;在内存中存放的数据就会随着内存的释放而清除&#xff0c;这并不满足我们日常生活中的记录需求&#xff0c;所以C语言开发了文件操作模式&#xff0c;通过将数据存放在硬盘&#xff0c;数据库等方式&#xff0c;实现数据的持久化。 文件存在于…

C语言打开文件详解

C语言中操作文件之前必须先打开文件&#xff1b;所谓“打开文件”&#xff0c;就是让程序和文件建立连接的过程。 打开文件之后&#xff0c;程序可以得到文件的相关信息&#xff0c;例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中&#xff0c;程序还可以记…

一 形参与实参

1 实际参数&#xff08;实参&#xff09; 真实传给函数的参数&#xff0c;叫实参。即在函数调用时写入的实际参数。 实参可以是&#xff1a;常量、变量、表达式、函数等。无论实参是何种类型的量&#xff0c;在进行函数调用时&#xff0c;它们必须有确定的值&#xff0c;以便把…

【C语言函数参数详解】——实际参数(实参)形式参数(形参)

文章目录 一.什么是实际参数&#xff08;实参&#xff09;二.什么是形式参数&#xff08;形参&#xff09;三.形参与实参的关系 这篇文章我们一起学习一下函数的参数&#xff0c;函数的参数分为实参和形参。 一.什么是实际参数&#xff08;实参&#xff09; 首先我们来学习实…