Ceph:pg peering过程分析
转自:https://www.ustack.com/blog/ceph%ef%bc%8dpg-peering/
Peering:互为副本的三个(此处为设置的副本个数,通常设置为3)pg的元数据达到一致的过程。官方解释如下:
the process of bringing all of the OSDs that store a Placement Group (PG) into agreement about the state of all of the objects (and their metadata) in that PG. Note that agreeing on the state does not mean that they all have the latest contents.
primary PG和raplica PG: 互为副本的三个pg中,有一个主,另外两个为辅;其中为主的称为primary PG,其他两个都称为replica PG。
1、peering过程的影响
故障osd重新上线后,primary PG和replica PG会进入不同的处理流程。primary PG会先进入peering状态,在这个状态的pg暂停处理IO请求,在生产环境中表现为集群部分IO不响应,甚至某些云主机因为等待IO造成应用无法正常处理。下面就peering过程的主要操作进行分析。

2、peering过程分析
pg是由boost::statechart实现的状态机,peering经历以下主要过程:

1、GetInfo:
1.1、选取一个epoch区间,对区间内的每个epoch计算其对应的acting set、acting primary、up set、up primary,将相同的结果作为一个interval;
1.2、判断每个interval,将up状态的osd加入到prior set;同时将当前的acting set和up set加入到prior set;
1.3、向prior_set中的每个up状态的osd发送Query INFO请求,并等待接收应答,将接收到的请求保存到peer_info中;
1.4、收到最后一个应答后,状态机post event到GotInfo状态;如果在此期间有一个接收请求的osd down掉,这个PG的状态将持续等待,直到对应的osd恢复;
2、GetLog:
2.1、遍历peer_info,查找best info,将其作为authoritative log;将acting set/peer_info中将处于complete状态的pg以及up set的所有pg存入acting_backfill;
2.2、如果计算出的authoritative log对应的pg是自身,直接post event到GotLog;否则,向其所在的osd发送Query Log请求;
2.3、接收请求的osd应答,并将获取的log merge到本地,状态机post event到GetMissing;如果收不到应答,状态将持续等待;
3、GetMissing:
3.1、遍历acting_backfill,向与primary pg log有交集的pg所在的osd发送Query Log请求;将剩余没有交集的pg放入peer_missing,生成missing set用于后续recovery;
3.2、将收到的每一个应答merge到本地,如果在此期间有osd down掉,这个PG的状态将持续等待;收到所有的应答后,当前pg的状态机进入Activate状态,peering过程结束;
3、总结
从以上分析来看,整个peering过程主要分为三个阶段,GetInfo -> GetLog -> GetMissing,首先向prior set、acting set、up set中的每个osd请求pg infos, 选出authoritative log对应的pg;其次向authoritative log所在的osd请求authoritative log;最后获取recovery过程需要的missing set;
peering时间的长短并不可控,主要是在于请求的osd是否能够及时响应;如果这个阶段某个osd down掉,很可能导致部分pg一直处在peering状态,即所有分布到这个pg上的IO都会阻塞。
4、现状
为了减少peering过程对client造成的影响,社区提出Faster Peering,该plan主要有以下两点:
1)向最近prior set interval中的osd请求log+missing,跳过GetLog阶段;
2)向acting set和up set中的osd请求log+missing,跳过GetMissing阶段;
关于作者:
王松波,UnitedStack有云存储高级软件工程师,有7年以上的Linux kernel研发经验,精通多种架构下的网络性能优化;对云计算、分布式存储有深刻理解;目前专注于Ceph社区。
Ceph:pg peering过程分析的更多相关文章
- Ceph源码解析:PG peering
集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态. 一.OSD的故障和处理办法: 1. OSD的故障种类 ...
- ceph PG数量调整/PG的状态说明
优化: PG Number PG和PGP数量一定要根据OSD的数量进行调整,计算公式如下,但是最后算出的结果一定要接近或者等于一个2的指数.调整PGP不会引起PG内的对象的分裂,但是会引起PG的分布的 ...
- Ceph PG介绍及故障状态和修复
1 PG介绍pg的全称是placement group,中文译为放置组,是用于放置object的一个载体,pg的创建是在创建ceph存储池的时候指定的,同时跟指定的副本数也有关系,比如是3副本的则会有 ...
- 利用火焰图分析ceph pg分布
前言 性能优化大神Brendan Gregg发明了火焰图来定位性能问题,通过图表就可以发现问题出在哪里,通过svg矢量图来查看性能卡在哪个点,哪个操作占用的资源最多 在查看了原始数据后,这个分析的原理 ...
- 记一次ceph pg unfound处理过程
今天检查ceph集群,发现有pg丢失,于是就有了本文~~~ 1.查看集群状态 [root@k8snode001 ~]# ceph health detail HEALTH_ERR 1/973013 o ...
- [转] 关于 Ceph PG
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- Ceph pg分裂流程及可行性分析
转自:https://www.ustack.com/blog/ceph-pg-fenlie/ 1 pg分裂 Ceph作为一个scalable的分布式系统,集群规模会逐渐增大,为了保证数据分布的均匀性, ...
- 理解 OpenStack + Ceph (2):Ceph 的物理和逻辑结构 [Ceph Architecture]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- 分布式存储Ceph之PG状态详解
https://www.jianshu.com/p/36c2d5682d87 1. PG介绍 继上次分享的<Ceph介绍及原理架构分享>,这次主要来分享Ceph中的PG各种状态详解,PG是 ...
随机推荐
- Python面向对象中的“私有化”
Python面向对象中的“私有化” Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机. 为了让方法或者特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可. ...
- n个数里选出m个不重复的数
void change(int *p,int a,int b) { int tmp = *(p + a); *(p + a) = *(p + b); *(p + b) = tmp; } int mai ...
- 判断元素的16中方法expected_conditions
from selenium.webdriver.support import expected_conditons as EC 1.title_is:判断当前页面的title是否完全等于预期字符串,返 ...
- java多线程总结(一)
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: 1 2 3 4 5 6 7 8 9 10 11 ...
- python16_day14【jQuery】
一.作用域 1.作用域例一 <script> var str = "global"; //AO1 AO1.str function t(age){ console.lo ...
- Excel数据常用操作,vlookup,text,trim,数据格式导致出错
数据有缺漏,需要在数据前面补零 =TEXT(F70,"000000") 前面是要操作的数据,后面是补几位 匹配数据(将一个表格中的数据进行匹配) =VLOOKUP(C2,aaa,4 ...
- Java并发(2):Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方 ...
- UML类图几种关系的总结(转载 http://blog.csdn.net/tianhai110/article/details/6339565 )
http://blog.csdn.net/tianhai110/article/details/6339565
- PAT 天梯赛 L1-044. 稳赢 【循环】
题目链接 https://www.patest.cn/contests/gplt/L1-044 题意 根据对方给出剪刀石头步 给出对应的胜利出招,每K次 要有一个平局 思路 用一个循环,然后每K次 判 ...
- mount、umount、fuser命令使用小结
mount -t cifs -o username=administrator,password=xxxxx //192.168.11.17/Data/ /mnt/databak/之后想卸载挂载目录, ...