2019独角兽企业重金招聘Python工程师标准>>>

1    PG 是什么?

PG就是目录

下面我会慢慢对PG做一下说明。

我准备了3个节点admin,node1,node2 共6个OSD,min_size=2,解释一下min_size=2,就是说最少不能少于2个,否则就不对外提供服务了。

[root@admin ceph]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_OKmonmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e53: 6 osds: 6 up, 6 inflags sortbitwise,require_jewel_osdspgmap v373: 128 pgs, 2 pools, 330 bytes data, 5 objects30932 MB used, 25839 MB / 56772 MB avail128 active+clean
[root@admin ceph]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.05424 root default
-2 0.01808     host admin                                   0 0.00879         osd.0       up  1.00000          1.00000 3 0.00929         osd.3       up  1.00000          1.00000
-3 0.01808     host node1                                   1 0.00879         osd.1       up  1.00000          1.00000 4 0.00929         osd.4       up  1.00000          1.00000
-4 0.01808     host node2                                   2 0.00879         osd.2       up  1.00000          1.00000 5 0.00929         osd.5       up  1.00000          1.00000
[root@admin ~]# ceph osd pool get rbd min_size
min_size: 2
[root@admin ~]# ceph df
GLOBAL:SIZE       AVAIL      RAW USED     %RAW USED 56772M     25839M       30932M         54.48
POOLS:NAME          ID     USED     %USED     MAX AVAIL     OBJECTS rbd           0       216         0         7382M           1 test-pool     1       114         0         7382M           4 

上面的ceph df 中我们可以看到rbd池的ID是0,所以rbd池中的pg都是以0开头的。下面我们看看rbd池中的pg都分布在哪些osd中,且名字到底是什么。

首先我们先用rados上传一个文件到rbd池中:

#下面这个text.txt将是我上传的文件
[root@admin tmp]# cat test.txt
abc
123
ABC
# 下面命令表示上传到rbd池,上传上去的名称叫wzl
[root@admin tmp]# rados -p rbd put wzl ./test.txt
#搜索看wzl这个文件分布在哪些osd中
[root@admin tmp]# ceph osd map rbd wzl
osdmap e53 pool 'rbd' (0) object 'wzl' -> pg 0.ff62cf8d (0.d) -> up ([5,4,3], p5) acting ([5,4,3], p5)

看看,以wzl为名称上传到rbd池中的pg分布在5,4,3osd中,且pg的名字叫0.d

下面我们就去找找这些pg

# admin节点上osd.3下的
[root@admin tmp]# ll /var/lib/ceph/osd/ceph-3/current/ |grep 0.d
drwxr-xr-x 2 ceph ceph   59 Feb  9 20:06 0.d_head
drwxr-xr-x 2 ceph ceph    6 Feb  9 02:33 0.d_TEMP
# node1节点上的osd.4的
[root@node1 ~]# ll /var/lib/ceph/osd/ceph-4/current/|grep 0.d
drwxr-xr-x 2 ceph ceph   59 Feb  9 20:06 0.d_head
drwxr-xr-x 2 ceph ceph    6 Feb  9 02:34 0.d_TEMP
# node2节点上的osd.5的
[root@node2 ~]# ll /var/lib/ceph/osd/ceph-5/current/|grep 0.d
drwxr-xr-x 2 ceph ceph   59 Feb  9 20:06 0.d_head
drwxr-xr-x 2 ceph ceph    6 Feb  9 02:34 0.d_TEMP

我们可以看出来,分布在5,4,3三个osd上的pg名称都是0.d_head,这也就是pg三个副本的道理,每个副本的名称都是一样的。

2  PG损坏或者丢失怎么办

我们先来说一下pg的状态

Degraded(降级)

简单点的理解就是pg发生了一些故障,但是还是可以对外提供服务的。下面我来测试一下:

上面提到了wzl文件的pg分布在osd.3 osd.4 osd.5 中,如果osd.3挂掉之后会是什么样:

[root@admin tmp]# systemctl stop ceph-osd@3.service
[root@admin tmp]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.05424 root default
-2 0.01808     host admin                                   0 0.00879         osd.0       up  1.00000          1.00000 3 0.00929         osd.3     down  1.00000          1.00000
-3 0.01808     host node1                                   1 0.00879         osd.1       up  1.00000          1.00000 4 0.00929         osd.4       up  1.00000          1.00000
-4 0.01808     host node2                                   2 0.00879         osd.2       up  1.00000          1.00000 5 0.00929         osd.5       up  1.00000          1.00000
[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_WARNclock skew detected on mon.node166 pgs degraded66 pgs stuck unclean66 pgs undersizedrecovery 2/18 objects degraded (11.111%)1/6 in osds are downMonitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e55: 6 osds: 5 up, 6 in; 66 remapped pgsflags sortbitwise,require_jewel_osdspgmap v423: 128 pgs, 2 pools, 138 bytes data, 6 objects30932 MB used, 25839 MB / 56772 MB avail2/18 objects degraded (11.111%)66 active+undersized+degraded62 active+clean

瞧上面显示我停掉了osd.3,结果就有66个pg状态处于active+undersized+degraded状态,也就是降级状态,我看看现在还能不能下载我刚才上传的那个文件

[root@admin tmp]# rados -p rbd get wzl wzl.txt
[root@admin tmp]# cat wzl.txt
abc
123
ABC

显示虽然现在ceph是不健康有66个pg是降级的,但是还是可以对外服务的。

Peered(大病/重伤)

上面我们关闭了osd.3 ,集群里面还两个0.d的PG,分别在osd.4 osd.5中。我现在再来看看这3个0.d PG的状态是什么样的

[root@admin tmp]# ceph pg dump|grep ^0.d
dumped all in format plain
0.d 1   0   1   0   0   12  1   1   active+undersized+degraded    2018-02-09 20:35:27.585529  53'1   71:71   [5,4]   5   [5,4]   5   0'0    2018-02-09 01:37:29.127711  0'0    2018-02-09 01:37:29.127711

现在0.d 已经只分布在osd.5 osd.4中,状态是active+undersized+degraded

现在我们再停掉osd.4,看看pg的状态

[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_WARNclock skew detected on mon.node199 pgs degraded19 pgs stuck unclean99 pgs undersizedrecovery 7/18 objects degraded (38.889%)2/6 in osds are downMonitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e97: 6 osds: 4 up, 6 in; 99 remapped pgsflags sortbitwise,require_jewel_osdspgmap v585: 128 pgs, 2 pools, 138 bytes data, 6 objects30942 MB used, 25829 MB / 56772 MB avail7/18 objects degraded (38.889%)62 active+undersized+degraded37 undersized+degraded+peered29 active+clean[root@admin tmp]# ceph pg dump|grep ^0.d
dumped all in format plain
0.d 1   0   2   0   0   12  1   1   undersized+degraded+peered    2018-02-09 20:42:08.558726  53'1   81:105  [5] 5   [50'0  2018-02-09 01:37:29.127711  0'0    2018-02-09 01:37:29.127711

ceph 已经ERR了,因为它停掉了2个osd,超过了min_size的限制,且限制PG 0.d状态已经是

undersized+degraded+peered了 从上面还可以看出现在只活了一个0.d 在osd.5中

现在我们重新设置min_size为1

[root@admin tmp]# ceph osd pool set rbd min_size 1
set pool 0 min_size to 1
[root@admin tmp]# ceph pg dump|grep ^0.d
dumped all in format plain
0.d 1   0   2   0   0   12  1   1   active+undersized+degraded    2018-02-09 20:59:03.684989  53'1   99:163  [5] 5   [50'0  2018-02-09 01:37:29.127711  0'0    2018-02-09 01:37:29.127711
[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_WARNclock skew detected on mon.node199 pgs degraded19 pgs stuck unclean99 pgs undersizedrecovery 7/18 objects degraded (38.889%)2/6 in osds are downMonitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e99: 6 osds: 4 up, 6 in; 99 remapped pgsflags sortbitwise,require_jewel_osdspgmap v594: 128 pgs, 2 pools, 138 bytes data, 6 objects30942 MB used, 25829 MB / 56772 MB avail7/18 objects degraded (38.889%)79 active+undersized+degraded29 active+clean20 undersized+degraded+peered

看看现在重新设置了min_size=1,则pg状态已经不是Peered了,改成degraded,健康状态也恢复为warn,可以对外服务。

Remapped(自愈)

ceph 有一个很强大的功能,自愈。如果一个osd停掉300秒以上,则集群就认为他已经没有复活的可能了,就开始从仅有的一份数据开始复制拷贝的其他存在的osd上镜像数据恢复。这就是它的自愈功能

[root@admin tmp]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.05424 root default
-2 0.01808     host admin                                   0 0.00879         osd.0       up  1.00000          1.00000 3 0.00929         osd.3     down        0          1.00000
-3 0.01808     host node1                                   1 0.00879         osd.1       up  1.00000          1.00000 4 0.00929         osd.4     down        0          1.00000
-4 0.01808     host node2                                   2 0.00879         osd.2       up  1.00000          1.00000 5 0.00929         osd.5       up  1.00000          1.00000 

上面可以看出ceph osd tree 中osd.3 osd.4 停掉的开始300秒内状态是down 权重还是1.00000,表示还属于集群的一个osd成员。但是在300之后osd还没有起来,集群就把它驱逐出去了,状态改为out,也就是权重改为0 ,这个时候集群还是通过仅存的一份数据镜像恢复:

[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_ERRclock skew detected on mon.node122 pgs are stuck inactive for more than 300 seconds19 pgs degraded66 pgs peering7 pgs stuck degraded22 pgs stuck inactive88 pgs stuck unclean7 pgs stuck undersized19 pgs undersizedrecovery 1/18 objects degraded (5.556%)Monitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e106: 6 osds: 4 up, 4 inflags sortbitwise,require_jewel_osdspgmap v609: 128 pgs, 2 pools, 138 bytes data, 6 objects20636 MB used, 16699 MB / 37336 MB avail1/18 objects degraded (5.556%)44 remapped+peering40 active+clean22 peering18 active+undersized+degraded3 activating1 activating+undersized+degraded

看已经有44个pg处于remapped+peering(重伤但开始恢复)状态中。等它恢复完成我再检查

[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_WARNclock skew detected on mon.node1Monitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e107: 6 osds: 4 up, 4 inflags sortbitwise,require_jewel_osdspgmap v634: 128 pgs, 2 pools, 138 bytes data, 6 objects20637 MB used, 16698 MB / 37336 MB avail128 active+clean
[root@admin tmp]# ceph osd map rbd wzl
osdmap e107 pool 'rbd' (0) object 'wzl' -> pg 0.ff62cf8d (0.d) -> up ([5,1,0], p5) acting ([5,1,0], p5)

看,pg已经完全恢复,健康已经恢复,且文件wzl的pg文件0.d已经重新分配在osd.5 osd.1 osd.0中

注意:如果我们把之前停掉的osd都恢复起来,则重新恢复的pg就会重新恢复到原来的分布的osd上,在remapped 时的pg就会被删掉,下面我们来看看:

[root@admin tmp]# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.05424 root default
-2 0.01808     host admin                                   0 0.00879         osd.0       up  1.00000          1.00000 3 0.00929         osd.3       up  1.00000          1.00000
-3 0.01808     host node1                                   1 0.00879         osd.1       up  1.00000          1.00000 4 0.00929         osd.4       up  1.00000          1.00000
-4 0.01808     host node2                                   2 0.00879         osd.2       up  1.00000          1.00000 5 0.00929         osd.5       up  1.00000          1.00000
[root@admin tmp]# ceph osd map rbd wzl
osdmap e113 pool 'rbd' (0) object 'wzl' -> pg 0.ff62cf8d (0.d) -> up ([5,4,3], p5) acting ([5,4,3], p5)

我们可以看到osd恢复后,pg又回到原来分布的几个osd中。现在pg 0.d又回到osd.5 osd.4 osd.3上了。

Recover(覆盖)

如果说pg三个副本所处的osd正常,但是三个副本中有一部分丢失或者损坏,ceph集群会发现这个pg所有副本文件不一致,则会从其他正常的pg中拷贝一份过来覆盖就OK了。下面我们做一个实验:

直接把osd.3上的0.d PG 删了

[root@admin tmp]# ll /var/lib/ceph/osd/ceph-3/current/|grep 0.d
drwxr-xr-x 2 ceph ceph    59 Feb  9 20:06 0.d_head
drwxr-xr-x 2 ceph ceph     6 Feb  9 02:33 0.d_TEMP
[root@admin tmp]# rm -rf /var/lib/ceph/osd/ceph-3/current/0.d_head/
[root@admin tmp]# ll /var/lib/ceph/osd/ceph-3/current/|grep 0.d
drwxr-xr-x 2 ceph ceph     6 Feb  9 02:33 0.d_TEMP

现在已经删了osd.3下面的pg 0.d,然后通知集群来扫描

# 扫描这个pg
[root@admin tmp]# ceph pg scrub 0.d
instructing pg 0.d on osd.5 to scrub
# 重新插pg状态
[root@admin tmp]# ceph pg dump|grep ^0.d
dumped all in format plain
0.d 1   0   0   0   0   12  1   1   active+clean+inconsistent 2018-02-09 21:31:09.239568  53'1   113:212 [5,4,3] 5   [5,4,3] 5   53'1   2018-02-09 21:31:09.239177  0'0    2018-02-09 01:37:29.127711

可以看到现在状态多了一个inconsistent,这就是集群发现这个pg3个副本中不一致。

可以执行ceph pg repair 0.d进行修复,它会从发其他pg副本中拷贝一个过来就好了

# pg不一致,ceph不健康
[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_ERRclock skew detected on mon.node11 pgs inconsistent1 scrub errorsMonitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e113: 6 osds: 6 up, 6 inflags sortbitwise,require_jewel_osdspgmap v667: 128 pgs, 2 pools, 138 bytes data, 6 objects30943 MB used, 25828 MB / 56772 MB avail127 active+clean1 active+clean+inconsistent
# ceph拷贝pg过来修复
[root@admin tmp]# ceph pg repair 0.d
instructing pg 0.d on osd.5 to repair
# ceph健康状态修复
[root@admin tmp]# ceph -scluster 55430962-45e4-40c3-bc14-afac24c69acbhealth HEALTH_WARNclock skew detected on mon.node1Monitor clock skew detected monmap e1: 3 mons at {admin=172.18.1.240:6789/0,node1=172.18.1.241:6789/0,node2=172.18.1.242:6789/0}election epoch 26, quorum 0,1,2 admin,node1,node2osdmap e113: 6 osds: 6 up, 6 inflags sortbitwise,require_jewel_osdspgmap v669: 128 pgs, 2 pools, 138 bytes data, 6 objects30943 MB used, 25828 MB / 56772 MB avail128 active+clean
recovery io 0 B/s, 0 objects/s
# pg状态恢复
[root@admin tmp]# ceph pg dump|grep ^0.d
dumped all in format plain
0.d 1   0   0   0   0   12  1   1   active+clean   2018-02-09 21:34:33.338065  53'1   113:220 [5,4,3] 5   [5,4,3] 5   53'1   2018-02-09 21:34:33.321122  53'1   2018-02-09 21:34:33.321122

转载于:https://my.oschina.net/wangzilong/blog/1620964

ceph 的pg诊断相关推荐

  1. 【ceph】Ceph之PG状态详解--研读笔记

    原文:分布式存储Ceph之PG状态详解 - 简书 Ceph中一些PG相关的状态说明和基本概念说明.故障模拟_pansaky的博客-CSDN博客 1. PG介绍 继上次分享的<Ceph介绍及原理架 ...

  2. ceph存储 pg归置组处于stuck以及degraded状态解决方案

    https://blog.csdn.net/skdkjzz/article/details/42486793 由于对ceph的兴趣,我们经常自己搭建ceph集群,可能是单节点,也可能是多节点,但是经常 ...

  3. ceph存储 PG的状态机 源码分析

    文章目录 PG 的状态机和peering过程 1. PG 状态机变化的时机 2. pg的状态演化过程 3. pg状态变化实例讲解 3.1 pg状态的管理结构 3.2 数据的pg状态变化过程 3.2.1 ...

  4. vpc2007_了解VPC端点

    vpc2007 If you are going to do one thing with your network traffic, it should be using https. But yo ...

  5. 分布式存储Ceph中的逻辑结构Pool和PG

    Ceph中的逻辑对象有Object.Pool.PG,本文简单介绍相关的概念以及之间的关系,PG状态变化过程等. 1.Ceph集群中的逻辑结构 1.1 Object Object是Ceph的最小存储单元 ...

  6. ceph中的PG和PGP

    在最初使用ceph的时候就有一个疑问,ceph存储时将对象映射到PG(Placement Groups)中,然后以PG为单位,遵循CRUSH的规则分布到OSD中,那么PGP又是什么?因此决定自己探索一 ...

  7. 分布式存储(ceph)技能图谱(持续更新)

    一下为个人结合其他人对分布式存储 所需的技能进行总结,绘制成如下图谱,方便针对性学习. 这里对分布式存储系统接触较多的是ceph,所以在分布式存储系统分支上偏向ceph的学习. 如有分类有问题或者分支 ...

  8. Ceph BlueStore 和双写问题

    论开源分布式存储,Ceph大名鼎鼎.用同一个存储池融合提供块存储.对象存储.集群文件系统.在国内有近年使用量迅速攀升,Ceph Day峰会也搬到北京来开了. 大型公司内部研发云虚拟化平台,常使用开源方 ...

  9. ceph课程(一)ceph组件与原理

    分布式存储ceph 一.ceph介绍 1.1.ceph是什么 ceph一个统一的.分布式的存储系统,设计初衷是提供较好的性能.可靠性和可扩展性. "统一的":意味着我们可以仅凭ce ...

最新文章

  1. 计算机专业学生却被强迫工厂实习?结果发生意外手指被截肢,学校回应:会治到满意为止...
  2. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)
  3. 高级C语言教程-关键字和运算符
  4. 原生JS封装时间运动函数
  5. java中如何将数字转换成字符串(int转换为string)
  6. processon.com - 在线团队协作软件(草巾冒小子)推荐 - 资源篇
  7. 牛客 2021年度训练联盟热身训练赛第二场 G题Plate Spinning
  8. 应对DDOS***需要“多管齐下”
  9. win10下添加ssh服务
  10. mysql 存储引擎文件夹_4种常用MySQL存储引擎
  11. java 学习视频 从基础到精通以及框架
  12. SQL Server数据库基础知识——数据库存储过程怎么写
  13. 中国大学mooc 慕课 管理信息系统(同济大学) 第八章 电子商务 第九章 信息系统规划 习题 测试答案
  14. PageHelper.startPage();的使用
  15. win7啊,我的纠结,ip啊
  16. 一枚笑脸 emoji,估值 20 亿美元!这个开源项目有点强...
  17. VS2015 还是VS2017 好用_强烈推荐:2020年12款Visual Studio 好用的工具
  18. 服务器端编程心得(二)—— Reactor模式
  19. 联想M490原装Win8系统改Win7系统的血泪史
  20. flash 嵌入html代码,flash嵌入html在html网页代码中嵌入Flash文件的解决方案(下).doc...

热门文章

  1. 主机安全漏洞解决方案
  2. ad19pcb设置恢复默认_「收藏」如何设置打印机IP地址?总共分三步
  3. 用React实现数字华容道游戏
  4. SpringBoot:创建SpringApplication对象
  5. Java 中常见的 RPC 协议
  6. android自定义标尺,Android 自定义 View 刻度尺
  7. 从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储
  8. 【转载】【非常好】MTK 电池流程.c
  9. 厦门大学计算机技术专业学位是双证还是单证,报考厦门大学在职研究生选择单证还是双证呢...
  10. window通过本地配置实现ip访问重定向虚拟机对外公开访问