找回密码
 注册
查看: 636|回复: 5

ceph 分布式存储获取指定的pg分布

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-7-26 10:01:52 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 5 金钱 才能浏览

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-26 10:04:59 | 显示全部楼层
不难看出,PG分布的比较不均匀,但总体上来说还好,osd.28上的PG数最多 257个PG,而osd.0-14上PG数最少,只有0,平均下来,如果不同OSD之间使用量差距很大就需要引起注意

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-26 10:08:27 | 显示全部楼层
[root@compute03 ~]# ceph pg stat& e  f/ v& e7 A8 e
[root@compute03 ~]# ceph pg dump_stuck , ^$ |1 w1 G5 }4 H( |9 p* j6 {; x
ok
! }  j2 V- W% y+ x[root@compute03 ~]# ceph pg dump: h, R7 j! x( r8 K$ D; e

7 o) Q1 J  F$ Z1 x) c[root@compute03 ~]# ceph pg dump_json8 s) G1 W  j% c" o; k
...........................3 y3 M7 }' `% |7 O( y* k

0 b, W- s$ R1 N9 B4 Q! Osum 1635749 0 0 0 0 6869267547107 66904 3988 9997885 9997885
; L; e+ _1 J$ S/ XOSD_STAT USED    AVAIL   USED_RAW TOTAL   HB_PEERS                                                                       PG_SUM PRIMARY_PG_SUM
8 ?2 j, M! Q% E- ?0 Y9 ~7 _, Q31       696 GiB 6.6 TiB  698 GiB 7.3 TiB  [0,1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30]    294            133
1 j# h3 P1 g7 B, @, h30       638 GiB 6.7 TiB  640 GiB 7.3 TiB [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31]    273            129 $ @" w2 j' u3 H* o
29       674 GiB 6.6 TiB  675 GiB 7.3 TiB    [1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30]    277            147 $ p: e5 U7 A. b9 m6 s
28       751 GiB 6.5 TiB  753 GiB 7.3 TiB    [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,29,30,31]    312            158
' n7 e7 q8 K9 K) E27       746 GiB 6.5 TiB  748 GiB 7.3 TiB [1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31]    308            169
1 I- N9 a/ ^- T# ]26       611 GiB 6.7 TiB  613 GiB 7.3 TiB    [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,29,30,31]    271            127 3 {3 p8 A: E, J" Z$ k
25       667 GiB 6.6 TiB  668 GiB 7.3 TiB    [1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,26,27,28,29,30,31]    287            152 2 V. V# L* }* q1 x! ~/ n1 \! \: J
24       681 GiB 6.6 TiB  683 GiB 7.3 TiB [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30,31]    290            137 ! k7 C% d( T, H# H7 j9 c" E9 ]# N
23       681 GiB 6.6 TiB  683 GiB 7.3 TiB    [1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,26,27,28,29,30,31]    286            138
5 W6 r. ?& i9 V1 \' a% U8 G2 O22       614 GiB 6.7 TiB  616 GiB 7.3 TiB    [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,26,27,28,29,30,31]    261            121
2 Q8 b+ {% N7 w7 b. F9        140 GiB 418 GiB  141 GiB 559 GiB                                    [1,3,5,6,7,8,10,11,12,13,14,17,21,23,26,29]    337            155
. g" c/ h! W( I% Y/ p8         21 MiB 446 GiB  1.0 GiB 447 GiB                                    [0,2,4,6,7,9,10,11,12,13,16,19,20,25,28,31]      0              0
+ u. `6 H/ I# ]& x6 d7         21 MiB 446 GiB  1.0 GiB 447 GiB                                    [1,3,5,6,8,9,10,11,12,13,15,18,22,24,27,30]      0              0
% e* X/ z, [  P* c1 f% c6         21 MiB 446 GiB  1.0 GiB 447 GiB                                  [0,2,4,5,7,8,9,10,11,12,13,14,17,21,23,26,29]      0              0 ; x4 j4 c1 {. ~) W- m% Q4 m
5        6.4 GiB 887 GiB  7.4 GiB 894 GiB                              [0,1,2,3,4,6,7,8,9,10,11,12,13,16,19,20,25,28,31]     46             28 ; T7 p( P) V  b& L
4        5.9 GiB 887 GiB  6.9 GiB 894 GiB                              [0,1,2,3,5,6,7,8,9,10,11,12,13,15,18,22,24,27,30]     44             20 ; S1 w. ]$ d3 w: e
0        5.9 GiB 887 GiB  6.9 GiB 894 GiB                           [1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,21,23,26,29,31]     42             21 $ p9 ~5 B) ?! ?
1        4.6 GiB 889 GiB  5.6 GiB 894 GiB                              [0,2,3,4,5,6,7,8,9,10,11,12,13,15,18,22,24,27,30]     33             15
( g0 ]+ d  s  D2        4.4 GiB 889 GiB  5.4 GiB 894 GiB                              [0,1,3,4,5,6,7,8,9,10,11,12,13,16,19,20,25,28,31]     33             16 ; V+ ~* a8 s6 W/ }7 b: x7 x- ^6 {
3        7.7 GiB 886 GiB  8.7 GiB 894 GiB                              [0,1,2,4,5,6,7,8,9,10,11,12,13,14,17,21,23,26,29]     58             28
& |! E4 S" o$ E& w10       147 GiB 411 GiB  148 GiB 559 GiB                                     [0,2,4,6,7,8,9,11,12,13,15,18,22,24,27,30]    352            177
  {9 S& A) n, H! o' _2 E11       140 GiB 418 GiB  141 GiB 559 GiB                                     [1,3,5,6,7,8,9,10,12,13,16,19,20,25,28,31]    335            180
. r- v0 ~. k5 Y+ S( _0 v( M12       110 GiB 2.1 TiB  112 GiB 2.2 TiB                                     [0,2,4,6,7,8,9,10,11,13,14,17,21,23,26,29]    512            259 ) p; q5 s  l) N3 W) P9 q* v
13       110 GiB 2.1 TiB  112 GiB 2.2 TiB                                  [1,3,5,6,7,8,9,10,11,12,14,16,18,22,24,27,30]    512            253
5 W$ F6 t+ m$ u3 P) @14       709 GiB 6.6 TiB  711 GiB 7.3 TiB    [0,2,4,6,7,8,9,10,11,12,13,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]    291            142 / r& ^3 m7 g' Y
15       662 GiB 6.6 TiB  664 GiB 7.3 TiB [1,3,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]    288            142
3 _3 l7 B4 r) l' J8 L9 q; O16       631 GiB 6.7 TiB  633 GiB 7.3 TiB    [0,2,4,6,7,8,9,10,11,12,13,15,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]    280            145 # p, v2 o  y: e% ~2 s! v* ?
17       629 GiB 6.7 TiB  630 GiB 7.3 TiB    [1,3,5,6,7,8,9,10,11,12,13,14,15,16,18,20,21,22,23,24,25,26,27,28,29,30,31]    279            141 / p, v* _% S. B1 c2 ^1 v) f
18       617 GiB 6.7 TiB  619 GiB 7.3 TiB [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31]    266            126
% x. z8 I9 z1 `! \6 N: O- [19       633 GiB 6.7 TiB  635 GiB 7.3 TiB    [1,3,5,6,7,8,9,10,11,12,13,14,15,16,18,20,21,22,23,24,25,26,27,28,29,30,31]    271            146 ' S0 Q; H! }# l$ E7 K' J
20       730 GiB 6.6 TiB  732 GiB 7.3 TiB    [0,2,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,24,25,26,27,28,29,30,31]    305            160 - G% e9 p5 r6 y, |9 ?) P
21       667 GiB 6.6 TiB  668 GiB 7.3 TiB [1,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31]    281            147
9 v  F: c, ]/ M/ S- ^9 V4 l. x+ ~+ ysum       12 TiB 131 TiB   12 TiB 144 TiB                                                                                                      
; P4 B) u" ~6 \- [# o! T' P
7 Z- U3 x, j, V- v$ H% }. T/ o* NOTE: Omap statistics are gathered during deep scrub and may be inaccurate soon afterwards depending on utilisation. See http://docs.ceph.com/docs/master ... up/#omap-statistics for further details.

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-26 10:09:25 | 显示全部楼层
常见的PG状态:% t/ z6 K6 R8 N0 m+ x& n0 d

  u) M6 I0 Y" m# ^: m! @( `常见的pg状态:
0 i8 a. A1 Z( O) ~) _3 S/ P: R creating :创建中
, E+ r: X- Y5 J( r" {8 }6 o down :PG处于失效状态,PG处于离线状态1 I! _( y' G$ J( X  k. J
3 G1 L; n/ p( X  l  `: X
repair (修复):PG正在被检查,被发现的任何不一致都将尽可能的被修复。
/ ]* u6 j" }0 x2 p) @/ |" \
  p/ F& k4 B( s7 w' e; L( H peering(等待互联):
' O; ^. D! S8 `, b4 g1. 当ceph peering pg, ceph 将会把 pg 副本协定导入 osd, 当 ceph 完成 peering, 意味着 osd 同意当前 PG 状态, 并允许写入
/ l6 S& K/ r! ~0 X$ N& a2. PG处于 peering 过程中, peering 由主 osd 发起的使存放 PG 副本的所有 OSD 就 PG 的所有对象和元素数据的状态达成一致的过程,  peering 过程完成后, 主 OSD 就可以接受客户端写请求.
% H1 U/ ~; O0 x
' V/ m5 E* J6 K) ^ active:
! y! b( A; n% s, M( p$ o9 N7 T1. 当 ceph 完成 peering 过程, pg 将会变成 active, active 状态意味着 pg 中的数据变得可用, 主 pg 将可执行读写操作4 O2 x( `1 P8 p
2. PG 是活动的, 意味着 PG 中的数据可以被读写, 对该 PG 的操作请求都讲会被处理. % F9 H& U- j7 M9 T2 ^

' u+ O) S" s# V clean: 干净态。PG当前不存在待修复的对象, Acting Set和Up Set内容一致,并且大小等于存储池的副本数; I7 \- Z' f9 W7 n0 ?
+ g1 g' l. z& x4 G5 o
" ~( ?* Q+ J+ q% t, L
replay(重做):某OSD崩溃后,PG正在等待客户端重新发起操作。4 r; c7 v4 a: j! J  u7 ^

( m9 Z4 Q7 \6 E( kdegraded(降级):, [  F2 H6 o7 H2 Z9 b: d
1. 当客户端写对象到主 osd, 主 OSD 会把数据写复制到对应复制 OSD, 在主 OSD 把对象写入存储后, PG 会显示为 degraded 状态, 直到主 osd 从复制 OSD 中接收到创建副本对象完成信息
' Q  I- z( X) m8 a; m. j2. PG 处于 active+degraded 原因是因为 OSD 是处于活跃, 但并没有完成所有的对象副本写入, 假如 OSD DOWN, CEPH 标记每个 PG 分配到这个相关 OSD 的- ]! \3 C9 b7 E- T6 ^
状态为 degraded, 当 OSD 重新上线, OSD 将会重新恢复,
3 s  L7 p1 n" ?: |8 B3. 假如 OSD DOWN 并且 degraded 状态持续, CEPH 会标记 DOWN OSD, 并会对集群迁移相关 OSD 的数据, 对应时间由 mon osd down out interval 参数决定
7 Z  Q* V- W' f4. PG 可以被北极为 degraded, 因为 ceph 在对应 PG 中无法找到一个或者多个相关的对象, 你不可以读写 unfound 对象, 你仍然可以访问标记为 degraded PG 的其他数据
# a3 E9 b; q. U  O: _5. PG 中部分对象的副本数量未达到规定的数量/ P$ w0 Y9 |/ e8 }: V( l
: c# Y0 Z1 o3 V5 q9 I- U4 Q
inconsistent(不一致):PG副本出现不一致, 对象大小不正确或者恢复借宿后某个副本出现对象丢失现象
9 F4 m5 e% D4 R: a( X5 p: c
3 B% Q5 X5 t3 p0 o  Brecoverying(恢复中):
1 O( \8 @, l5 c$ v4 Z: g6 gceph 设备故障容忍在一定范围的软件与硬件问题, 当 OSD 变 DOWN, 那么包含该 OSD 的 PG 副本都会有问题, 当 OSD 恢复, OSD 对应的 PG 将会更新
2 ~1 ]- D. D" H( s# V8 N$ h+ _! d并反映出当前状态, 在一段时间周期后, OSD 将会恢复 recoverying 状态9 a1 o/ W4 R% i% l
recovery 并非永远都有效, 因为硬件故障可能会导致多个 OSD 故障, 例如, 网络交换机故障, 可以导致集群中的多个主机及主机包含的 OSD 故障- `: x% |/ Y' b' ?
当网络恢复之后, 每个 OSD 都必须执行恢复$ g8 z6 L' p/ {; T" C9 T: k4 i1 Y
" ~" p5 G& ~6 j+ l; `* k& Y4 c* x$ l

. _7 H8 L7 e) N* ^: F' mback filling(回填):- L, v% P2 a- e: z. A
当新 OSD 加入集群, CRUSH 将会为集群新添加的 OSD 重新分配 PG, 强制新的 OSD 接受重新分配的 PG 并把一定数量的负载转移到新 OSD 中,back filling OSD 会在后台处理, 当 backfilling 完成, 新的 OSD 完成后, 将开始对请求进行服务
2 y+ H7 F3 I& E
1 |0 q7 B8 s. h, _: \) W在 backfill 操作期间, 你可以看到多种状态,
! v8 T4 i2 K. ^) M$ k/ Jbackfill_wait 表示 backfill 操作挂起, 但 backfill 操作还没有开始 ( PG 正在等待开始回填操作 ): A: a, k9 T2 _2 @! l6 O# M. I
backfill 表示 backfill 操作正在执行
" n8 ^, L# ]- y& S  T* jbackfill_too_full 表示在请求 backfill 操作, 由于存储能力问题, 但不可以完成, 0 s5 Z( I; a5 ^9 y
ceph 提供设定管理装载重新分配 PG 关联到新的 OSD$ V' t. ^& z" Z9 a" }+ B
osd_max_backfills 设定最大数量并发 backfills 到一个 OSD, 默认 10- ^8 b9 I6 E- V2 D2 k: z0 O
osd backfill full ratio  当 osd 达到负载, 允许 OSD 拒绝 backfill 请求, 默认 85%, 8 ~7 E  C/ K( R8 K9 q
假如 OSD 拒绝 backfill 请求,  osd backfill retry interval 将会生效, 默认 10 秒后重试
4 X$ R6 \5 d: t; b: E! k5 [osd backfill scan min ,  osd backfill scan max 管理检测时间间隔
7 o' g# O5 C# R. P6 w一个新 OSD 加入集群后, CRUSH 会把集群先有的一部分 PG 分配给他, 该过程称为回填, 回填进程完成后, 新 OSD 准备好了就可以对外提供服务。& k2 X0 n& C! G# H' M

4 f$ Q% D6 N" I/ j- o
6 E: J  T# f) p" }0 m9 i) V1 [. h3 {9 x; u  f4 h, B! ^" S, x9 \
remapped(重映射):7 ^* p- s( b+ g; e) `2 o
当 pg 改变, 数据从旧的 osd 迁移到新的 osd, 新的主 osd 应该请求将会花费一段时间, 在这段时间内, 将会继续向旧主 osd 请求服务, 直到
# J# v0 F4 m3 M2 X& h/ zPG 迁移完成, 当数据迁移完成,  mapping 将会使用新的 OSD 响应主 OSD 服务
: v  d5 p: H+ [. ^! H0 _- `6 m( [1 z* O
当 PG 的 action set 变化后, 数据将会从旧 acting set 迁移到新 action set, 新主 OSD 需要过一段时间后才能提供服务, 因此它会让老的主 OSD 继续提供服务, 知道 PG 迁移完成, 数据迁移完成后, PG map 将会使用新 acting set 中的主 OSD
8 v3 W$ S) _) E0 G- x' H% d0 O: K5 K  p9 b# l) z( m
例如:
% P) `% {2 E  D: {( D2 \1 i! c[root@ ~]# ceph osd map volumes rbd_id.volume-1421625f-a9a2-41d0-8023-4cec54b33a57, T$ o) j" ~/ _9 ?
osdmap e5276 pool 'volumes' (1) object 'rbd_id.volume-1421625f-a9a2-41d0-8023-4cec54b33a57' -> pg 1.2cdd8028 (1.28) -> up ([32,26,41], p32) acting ([32,26,41], p32)
4 A) G* i- q6 p% v8 g/ \, o( u7 L6 T- e1 J6 a4 W
stale(旧):5 f3 H% ?, s7 f5 U) {1 @% W6 W
当 ceph 使用 heartbeat 确认主机与进程是否运行,  ceph osd daemon 可能由于网络临时故障, 获得一个卡住状态 (stuck state) 没有得到心跳回应
% i, I; U& H: m- @默认, osd daemon 会每 0.5 秒报告 PG, up 状态, 启动与故障分析,
- ?* ^2 Q& i7 V% F假如 PG 中主 OSD 因为故障没有回应 monitor 或者其他 OSD 报告 主 osd down, 那么 monitor 将会标记 PG stale,
8 m4 `; {7 i" L当你重启集群, 通常会看到 stale 状态, 直到 peering 处理完成,
  O/ J, c$ l8 \2 l; C8 ?在集群运行一段时候, 看到 stale 状态, 表示主 osd PG DOWN 或者没有主 osd 没有报告 PG 信息到 monitor 中4 \* s3 G1 ^4 l3 S
PG 处于未知状态, monitors 在 PG map 改变后还没有收到过 PG 的更新, 启用一个集群后, 常常会看到主 peering 过程结束前 PG 处于该状态。6 ?9 ^0 f! k9 O2 Y9 {9 g

1 a9 P* d7 z9 y& U' Y& `7 z1 \# ~0 f9 c8 Y3 _, W
scrubbing(清理中):8 e/ i7 \+ [+ h' m" t1 u9 {% f; e
PG 在做不一至性校验" Q& B: U5 U! s4 s" {* f9 B
有问题的PG:
. U6 l7 R& ^6 f' @" einactive :PG 很长时间没有显示为 acitve 状态,  (不可执行读写请求), PG 不可以执行读写, 因为等待 OSD 更新数据到最新的备份状态
. m' f0 G+ _! ~0 a2 \" N5 X7 w; m* W/ @$ c% @
unclean:PG 很长时间都不是 clean 状态 (不可以完成之前恢复的操作),  PG 包含对象没有完成相应的复制副本数量, 通常都要执行恢复操作。
5 Z# R3 ]) `8 }, ^* M
2 Q9 h. l: J9 z4 ustale:PG 状态很长时间没有被 ceph-osd 更新过, 标识存储在该 GP 中的节点显示为 DOWN,  PG 处于 unknown 状态, 因为 OSD 没有报告 monitor 由 mon osd report timeout 定义超时时间
2 M! v7 v" J" V5 M6 K" P, a3 ~. Zceph pg 常见问题处理:* ]' y- s' U6 M: @) C) Q

: U( ^7 A6 w) B, m案例1:
( u2 l* Q0 B: M
+ s& `. b+ n: ]" E* ~( R8 J1. 检查集群状态发现有pg  inconsistent# L1 g5 J$ Y5 H! `, S  R" E; V
通过ceph health detail查看具体的PG id。# X0 ]; _* P% \8 e0 h1 i& r! v

5 h! q( h7 D5 C! u1 s; k9 s8 W$ ceph health detail, l; x; m3 x: E
HEALTH_ERR 1 scrub errors; Possible data damage: 1 pg inconsistent
2 W" h) s/ g6 f" P0 fOSD_SCRUB_ERRORS 1 scrub errors
) @) P$ ~' ^+ {# ?# |# RPG_DAMAGED Possible data damage: 1 pg inconsistent
! Z6 ]# _& g1 \/ O% P    pg 3.0 is active+clean+inconsistent, acting [34,23,1]
; f/ n6 A$ V% s: w2 Q  K5 Y
  }$ I; R! l/ y0 Y& u通过上面输出可以看到当前PG3.0处于inconsistent,并且它的三副本分别在osd.34,osd.23,osd.1。
- o9 U2 Z8 k2 R$ ]
  {- M6 C, ]; U9 X8 H) v6 B% ?2. 修复PG 3.04 K* E0 B6 Y2 J8 P1 y
$ ceph pg repair 3.0
8 e7 F- S9 x) x$ Tinstructing pg 3.0 on osd.34 to repair
7 x" @% x' K% }; N$ F( e7 _
' ~% Q, U( c- a7 y#查看集群监控状态
, r. N: b1 \$ t2 e6 ~1 \$ ceph health detail0 f' O, v" j9 p8 c: e( y2 B' [
HEALTH_ERR 1 scrub errors; Possible data damage: 1 pg inconsistent, 1 pg repair
4 \, T4 e" q5 j4 F# S! @OSD_SCRUB_ERRORS 1 scrub errors5 d! a1 O" N) q  W! n4 T3 t
PG_DAMAGED Possible data damage: 1 pg inconsistent, 1 pg repair
; D; H+ t# C1 v, P% o    pg 3.0 is active+clean+scrubbing+deep+inconsistent+repair, acting [34,23,1]
% a; p* [  v4 R( ~/ r: P
& l0 k: [/ I- l#集群监控状态已恢复正常% n) I# b# M# K5 x
$ ceph health detail
/ M5 {- [& o  ]9 J; s9 N! A) FHEALTH_OK
  j" G; K' ]/ @6 K5 q' }0 H* I+ f/ G" w# U
3. 根据以往经验,pg出现inconsistent很有可能是对应的osd磁盘上有逻辑坏道,可以去查看osd [34,23,1]的磁盘,查看对应节点上的dmesg日志。
# g4 l3 z$ g  `" a7 h+ E# R; _7 l0 Ndimes -T |grep -I err+ p1 f" M) U4 }% j, V/ m
案例2: osd挂了- V& H$ z8 k, j9 W) C: j% z

$ D* z& C) G6 m当osd短暂挂掉的时候,因为集群内还存在着两个副本,是可以正常写入的,但是 osd.34 内的数据并没有得到更新,过了一会osd.34上线了,这个时候osd.34的数据是陈旧的,就通过其他的OSD 向 osd.34 进行数据的恢复,使其数据为最新的,而这个恢复的过程中,PG的状态会从inconsistent ->recover -> clean,最终恢复正常。
1 I! E0 j' t- [% F2 Y( j这是集群故障自愈一种场景。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-26 10:14:15 | 显示全部楼层
1、查看ceph集群配置信息
; t7 [4 K% G( l% W8 t( W; i$ u' n  L# l2 s
" b- F, K5 {1 H3 C" b/ e

" s+ ~0 R" ]' U0 T' yceph daemon /var/run/ceph/ceph-mon.$(hostname -s).asok config show% u7 o! k& v, E  k5 o
2、在部署节点修改了ceph.conf文件,将新配置推送至全部的ceph节点
: e, V( i1 i. ]. F% r9 c& j/ Y; n% F( W
ceph-deploy  --overwrite-conf config push dlp node1 node2 node33 g* m) v# `0 ^% B. |
3、检查仲裁状态,查看mon添加是否成功& Y; x2 W  Y+ F, Q# Q  [+ S
5 H4 P5 T% u  X/ t
ceph quorum_status --format json-pretty
0 l# n& ?) i9 o; ^; H. ?4、列式pool列表0 a7 ?' E* V; `- V/ X

, M% G/ L% f0 ]  p9 jceph osd lspools
; V; g6 b) ^; u; N1 h$ o& Y5、列示pool详细信息4 x1 I" y# a2 z' }
* k  T, I9 `4 [, x! p
ceph osd dump | grep pool
# ~/ s: V' ]& `* s+ {6、检查pool的副本数  ^( I6 Z1 i6 h% `& q$ N

9 U2 \! p, V" Tceph osd dump|grep -i size
) h6 R0 C6 l* F- W/ m% d& N5 ~) ^7、创建pool$ A: _' \6 R( v

/ J5 R4 ^+ z- I& Q8 |& q4 F" V! @ceph osd pool create pooltest 128
1 Y" c6 d* s8 Y: N, V8、删除pool
3 W& E/ j6 Z' x$ Q- h: y9 e, b. q) q* m, [3 X! {& E
ceph osd pool delete data  #会提示确认信息(增加命令,如下), P" j2 F. D* H; [1 S" n) z
ceph osd pool delete data data  --yes-i-really-really-mean-it
. x/ L, s% B: @' r0 J9、设置pool副本数# R1 X$ ^- M' L) q/ ]. o) q

8 _7 V# p/ Z: G& i! y8 Lceph osd pool get data size9 r) V0 O1 o0 R( j' s
ceph osd pool set data size 3
5 x% ]/ |% }$ w  ~, R$ m' S' v10、设置pool配额4 [2 W0 V) i5 j  E( n) P
1 v" i( }; o# n
ceph osd pool set-quota data max_objects 100                              #最大100个对象5 J, S+ w6 ?8 \! b, `7 l5 w" }
ceph osd pool set-quota data max_bytes $((10 * 1024 * 1024 * 1024))       #容量大小最大为10G
5 V& x% J( r: Z# t$ R' A% C  t11、重命名pool3 O* {/ p8 q2 `6 C5 d

# @! I2 t! C" _# r, O+ s1 {ceph osd pool rename data date6 F8 n) {/ r. E7 B2 `
12、PG, Placement Groups。CRUSH先将数据分解成一组对象,然后根据对象名称、复制级别和系统中的PG数等信息执行散列操作,再将结果生成PG ID。可以将PG看做一个逻辑容器,这个容器包含多个对 象,同时这个逻辑对象映射之多个OSD上。如果没有PG,在成千上万个OSD上管理和跟踪数百万计的对象的复制和传播是相当困难的。没有PG这一层,管理海量的对象所消耗的计算资源也是不可想象的。建议每个OSD上配置50~100个PG。8 l/ Q: W7 \1 b
1 Z) o$ p" M) N, c( ]
  PGP是为了实现定位而设置的PG,它的值应该和PG的总数(即pg_num)保持一致。对于Ceph的一个pool而言,如果增加pg_num,还应该调整pgp_num为同样的值,这样集群才可以开始再平衡。; q- d. f9 W' ~+ S" F( R. g- F

& E( z2 ?# n0 C      参数pg_num定义了PG的数量,PG映射至OSD。当任意pool的PG数增加时,PG依然保持和源OSD的映射。直至目前,Ceph还未开始再平衡。此时,增加pgp_num的值,PG才开始从源OSD迁移至其他的OSD,正式开始再平衡。PGP,Placement Groups of Placement。$ T- y9 x- T& t# J$ J, R4 E9 [
4 K, K$ J  B3 z$ M& O# z. Q
  计算PG数:5 B( b2 g' p7 w/ e+ t  g# O0 V+ M

& o* z- ?4 u2 N" f" V7 d4 c' h( p# g8 u
  ceph集群中的PG总数:
2 J+ Z( _0 {; A5 G* W* v
' W5 p0 d; ~5 Q5 Q! ^* iPG总数 = (OSD总数 * 100) / 最大副本数        ** 结果必须舍入到最接近的2的N次方幂的值
6 w- }; `& X. q$ k7 e$ O7 w. |+ k  ceph集群中每个pool中的PG总数:; V6 [( q: U* G! c; c
3 h4 m2 l& M+ m# C2 x- M/ m9 U
存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数
( F0 B# g7 _& ?  获取现有的PG数和PGP数值:
! t# y8 |1 R- l6 z( z
, D2 @/ A8 C, }4 V4 a: o  y! fceph osd pool get data pg_num
" U+ u# g; i! r% uceph osd pool get data pgp_num4 \0 H$ L& v& {6 Z+ R0 r! F
13、修改存储池的PG和PGP* ^& S! g5 v0 e; N" N! f; @) G

# f: D  O( z9 A8 f$ I. J3 ^+ r* eceph osd pool set data pg_num = 1  f6 m1 L6 ~/ K$ j% x$ e7 S
ceph osd pool set data pgp_num = 1

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-26 10:17:54 | 显示全部楼层
修复方式 wanted: command to clear 'incomplete' PGs
4 a& F0 v$ j8 U# k% `比如:pg 1.1是incomplete,先对比pg 1.1的主副本之间 pg里面的对象数 哪个对象数多 就把哪个pg export出来
6 L/ N3 `3 d+ b9 l) r! p& i然后import到对象数少的pg里面 然后再mark complete,一定要先export pg备份。3 A; \$ Z9 c& U$ Z- |  f. o
简单方式,数据可能又丢的情况8 _1 @. t% f4 Z6 P) H5 u: |* B
! T3 n, z8 u7 J2 }
a. stop the osd that is primary for the incomplete PG;   
; o0 y. v( n3 t$ Z b. run: ceph-objectstore-tool --data-path ... --journal-path ... --pgid $PGID --op mark-complete    ; j9 g  D" k8 I% C$ j
c. start the osd. / a) [% u% ~" b5 m. y2 V
4 ?# l3 a5 m# ^+ [: V
保证数据完整性
" S+ N5 H$ O! e
" P; X% E  S, _# q1 B #1. 查看pg 1.1主副本里面的对象数,假设主本对象数多,则到主本所在osd节点执行 . t' b# }( H; Y
$ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --journal-path /var/lib/ceph/osd/ceph-0/journal --pgid 1.1 --op export --file /home/pg1.1 9 h' g4 z, X& G$ _7 g
7 E. T/ Q. W6 j+ B; N$ l
#2. 然后将/home/pg1.1 scp到副本所在节点(有多个副本,每个副本都要这么操作),然后到副本所在节点执行 5 x( m9 u6 a& E( z# |- `# p3 ~
$ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --journal-path /var/lib/ceph/osd/ceph-1/journal --pgid 1.1 --op import --file /home/pg1.1
& |& d+ j: b! T+ t) V. B4 `! w: }
  |! b( ~2 g0 r& E#3. 然后再makr complete $ ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --journal-path /var/lib/ceph/osd/ceph-1/journal --pgid 1.1 --op mark-complete  # z/ g- m& P! C& `) c
9 K8 _, N8 j6 t# d* S2 m5 u: G* R
#4. 最后启动osd $ start osd
' Y8 w( K- a) M% y
: L9 g9 _; }! Z验证方案1 q  f$ A0 J& G6 W* e& S8 ~

1 j/ w- G( l; ] #1. 把状态incomplete的pg,标记为complete。建议操作前,先在测试环境验证,并熟悉ceph-objectstore-tool工具的使用。 9 y) T" ]8 }) E7 x" E$ s! ~  v1 t' a
PS:使用ceph-objectstore-tool之前需要停止当前操作的osd,否则会报错。  
6 P- j8 B; J! q( [: p- v% K, B+ K0 h7 N( C8 V
#2. 查询pg 7.123的详细信息,在线使用查询
# h' P+ ?6 z8 Q$ ^ceph pg 7.123 query > /export/pg-7.123-query.txt  / @0 B+ [0 n$ o, n, j

8 ]. @$ R3 k: x; L#3. 每个osd副本节点进行查询+ w8 y2 P9 g" b
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op info > /export/pg-7.123-info-osd641.txt / W( a8 X, y- n( l! ~

' N! |$ b* ^9 `# u pg 7.123 OSD 1 存在1,2,3,4,5 object
2 ?  m1 m; R4 a5 Z( ~, x pg 7.123 OSD 2 存在1,2,3,6 object
. j8 Y9 a7 ~) d, s, e: O pg 7.123 OSD 2 存在1,2,3,7 object
2 ?) `8 {; r: `) ~; p
" _7 T7 f4 i8 j7 O8 [% C+ F0 [  T#4. 查询对比数据
  K; Z3 [6 N- ~5 g' C#4.1 导出pg的object清单 : u4 G- f) f' `7 ^
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op list > /export/pg-7.123-object-list-osd-641.txt  . Y) D! a  k- w' O* p  V8 l
! w$ k) e$ T) q2 u  [+ M
#4.2 查询pg的object数量 5 |9 z* B% L, P# \$ a8 i( I5 y+ Z
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op list|wc -l  
/ l7 ]1 @, }$ F! N+ \* f
1 \3 l7 w% S6 l: `0 N) F- n1 i) p#4.3 对比所有副本的object是否一致。
, W0 S- v8 M) ?/ idiff -u /export/pg-7.123-object-list-osd-1.txt /export/pg-7.123-object-list-osd-2.txt 0 u1 ^" _1 q! }0 j/ L
比如:pg 7.123是incomplete,对比7.123的所有副本之间pg里面的object数量。  
3 {; B  }- k. A4 X! w' w- 如上述情况,diff对比后,每个副本(主从所有副本)的object list是否一致。避免有数据不一致。使用数量最多,并且diff对比后,数量最多的包含所有object的备份。  ; y  \! H) m( M7 Q
- 如上述情况,diff对比后,数量是不一致,最多的不包含所有的object,则需要考虑不覆盖导入,再导出。最终使用完整的所有的object进行导入。注:import是需要提前remove pg后进行导入,等于覆盖导入。  
- p# U& w9 m5 x0 }" ~" K. v. K: e- P" x- 如上述情况,diff对比后,数据是一致,则使用object数量最多的备份,然后import到object数量少的pg里面 然后在所有副本mark complete,一定要先在所有副本的osd节点export pg备份,避免异常后可恢复pg。  0 C1 g2 C; i/ k3 d, S
; s& j" e6 G5 }( N/ }3 c) J- V
#5. 导出备份 4 c* t9 i2 t& @( i; ~) r
查看pg 7.123所有副本里面的object数量,参考上述情况,假设osd-641的object数量多,数据diff对比一致后,则到object数量最多,object list一致的副本osd节点执行(最好是每个副本都进行导出备份,为0也需要导出备份)7 i; \5 y/ L  m6 y: ?9 l7 {5 w
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-641/ --type bluestore --pgid 7.123 --op export --file /export/pg1.414-osd-1.obj 8 o8 y8 A5 S4 _5 o

) T  S' i. E% D- I) {#6. 导入备份 ! ], w" v# C# g3 _3 w5 \
然后将/export/pg1.414-osd-1.obj scp到副本所在节点,在对象少的副本osd节点执行导入。(最好是每个副本都进行导出备份,为0也需要导出备份)
- O6 b8 g8 J  Q将指定的pg元数据导入到当前pg,导入前需要先删除当前pg(remove之前请先export备份一下pg数据)。需要remove当前pg,否则无法导入,提示已存在。
9 r  N0 W- z4 g* S6 O5 p% ?: W9 Zceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-57/ --type bluestore --pgid 7.123 --op remove 需要加–force才可以删除。
3 Z9 _2 E7 l; J: r ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-57/ --type bluestore --pgid 7.123 --op import --file /export/pg1.414-osd-1.obj  
5 s9 I1 g9 `# O: H4 a  c# s) w. X/ ]. n* g
#7. 标记pg状态,makr complete(主从所有副本执行)
* x. u7 X; g- G) U9 P8 T! [  Yceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-57/ --type bluestore --pgid 7.123
) K, ]+ S) Q8 F$ ]! ~# L6 o; ?7 ^/ A* [% h' i& J2 q0 k( f3 ^, h
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-11 23:51 , Processed in 0.018305 second(s), 26 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表