找回密码
 注册
查看: 693|回复: 3

8 pool(s) backfillfull health: HEALTH_ERR

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-7-21 15:52:34 | 显示全部楼层 |阅读模式
使用检查; D. B/ D( ?, e$ T/ D& C
ceph osd status
! y( i/ }7 j( z" i$ g4 \. D& T( F2 N5 Tid  host  userd   avail       wr ops  wr data   rb ops  rb data    state
, p. T; X- Y8 @' P8 @/ @3   mon2  1111  1111     0            0          0           0           backfillfull,exists,up7 E/ q4 c" q; ~" \, u# L

/ o: F6 p* |$ Y: S* {+ I7 G4 ]
. B2 V; c( l( a. u8 n  J3 @0 R% }. E0 ?3 z
9 a& u; W5 j' Y
% Q9 c5 J& |2 f% Q& x" @, j% [/ J
今天检查 CEPH 发现 有一个 OSD 接近要满了的状态.
+ R4 z$ w! }, Z; }[root@storage02-ib ~]# ceph osd status
. J" a: ~0 U3 X) K/ y) l- x+----+----------------------------+-------+-------+--------+---------+--------+---------+------------------------+, q  e3 n  G, ]8 I5 Q# d2 {# ]2 f
| id |            host            |  used | avail | wr ops | wr data | rd ops | rd data |         state          |
1 a1 [0 L  |' p6 G: N+----+----------------------------+-------+-------+--------+---------+--------+---------+------------------------+
1 |. d" c+ b8 V6 m  b9 C% F. F; B
| 8  | compute02| 1374G | 4214G |    0   |     0   |    0   |     0   |       exists,up        |
& |0 J; I! a8 s8 V| 9  | compute02| 2098G | 3490G |    0   |     0   |    0   |     0   |       exists,up        |
( r2 e, d) P8 V- X" ~+ T| 10 | compute02| 1715G | 3873G |    0   |     0   |    0   |     0   |       exists,up        |
4 f6 {% W7 f# p( ^7 s& B+ [* V| 13 |compute02|  172G | 13.7G |    0   |     0   |    0   |     0   | backfillfull,exists,up |
8 R. F) \, K6 _& L: m" S
% Y$ C0 F0 u- y. ~+----+----------------------------+-------+-------+--------+---------+--------+---------+------------------------+! O2 Y( v  }( \6 ^" \9 H, |
情况如上, ceph osd status 命令可以发现 OSD 13 已经接近要满了的状态.  E3 Z# i/ U1 V' d) b+ j; m
————————————————" H. f& y* j6 S$ R
1 Z( x4 J5 N5 d$ P9 l- X
% ], D7 p/ l$ S3 m* Q
' q4 G/ A! {3 s9 ~! B7 m

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-21 15:55:11 | 显示全部楼层
ceph -s 命令也可以看见提示 1 backfillfull osd(s), 由于 OSD pool 没有指定与 OSD 的 map 关系, 所以默认所有OSD都承载这些 pool 的, 所以也提示了 5 pool(s) backfillfull.
, d. W" n; ]) {. F: {* h+ |) f+ v9 q: r" ~- w
之所以还会提示 objects misplaced 是因为之前维护替换了一块硬盘, 正在数据恢复中.: r. ?& f7 K- _; \3 f

) ]! f' }1 v0 Q0 L! q由于这个满了的 OSD 正好是之前还没来得及下掉的 NVMe 存储, NVMe 想用做其他用途, 所以这次准备干脆把 NVMe 下掉了.
  E1 L, M% \: ~( f, k5 j7 {6 T7 X" M
下掉 13 - 20 这几个 NVMe 的 OSD, CEPH 会自动将数据平衡到其他 OSD 中. 所以我们只需要先 mark OSD out, 然后删除 OSD, 最后移除硬件即可.
8 k; S( g# q/ X: A) Y2 b3 I8 q" w3 V
在移除过程一定先提前计算好容量是否足够, 如果下掉过多 OSD 导致整体容量不足, 将会导致 OSD 趋近于满的情况, 会造成集群读写性能下降甚至完全不能读写.
5 f& r# x+ J) |+ h/ ^5 U  K, d: _* \! r$ r9 ^- e
在移除的过程中, 也会占用系统的磁盘 IO 和网络带宽, 因此如果是线上业务, 一定规划好移除时间, 避免影响业务.5 Q2 [  @( |$ I  j+ z
7 Q( b) H1 T7 ]1 |, \' p8 C
首先, 我们移除 OSD 13, 14 作为演示.0 [1 N8 @2 R2 J2 T
5 ~% o! c& m6 L3 C0 E
[root@storage02-ib ~]# ceph osd out 13 14;
! c, v5 a4 d0 dmarked out osd.13 osd.14
% m9 I7 k; s  @, g% f6 O% Q& {  cluster:0 M/ L6 E& \* N" @' j
    id:     0f7be0a4-2a05-4658-8829-f3d2f62579d26 n0 `- q9 ~: ~' g
    health: HEALTH_WARN" S0 f2 ~0 M# ]; [$ }  D- o
            258661/4527742 objects misplaced (5.713%)
1 j0 K* G4 l! F& B4 G/ g            Degraded data redundancy: 22131/4527742 objects degraded (0.489%), 3 pgs degraded
! ?+ L, a# B  b' B. e. R, { + o) `# A; F- g+ R# G2 S2 z8 `
  services:8 |3 S) Q& D/ \1 Z/ l  p1 X6 }
    mon: 3 daemons, quorum storage01-ib,storage02-ib,storage03-ib$ }  D! a/ a& I" t; p) N4 p' w
    mgr: storage01-ib(active), standbys: storage03-ib, storage02-ib
$ w: N; {. ]3 P0 m3 x# G    osd: 19 osds: 19 up, 11 in; 36 remapped pgs3 L+ ?+ ]6 D3 w' Z( g
    rgw: 2 daemons active
) M3 |( D2 X, k- N) j 5 @- B" B1 I. o0 r1 j" E; M$ q
  data:
# K7 l6 g6 T0 H    pools:   5 pools, 288 pgs* |2 {* Z9 [% r: D% P
    objects: 2.26 M objects, 8.6 TiB
3 ]: l/ K$ J( Q. z2 S2 f    usage:   18 TiB used, 43 TiB / 61 TiB avail. @4 ^% P& I2 @# _: r: |& b
    pgs:     22131/4527742 objects degraded (0.489%)* T$ K! h3 s2 Q% F
             258661/4527742 objects misplaced (5.713%)! ~( ~2 x( C% x, s  e* b1 D
             252 active+clean' C( c& y2 i* x  G
             28  active+remapped+backfill_wait( W3 Q: K: U/ \0 [; M8 j
             5   active+remapped+backfilling3 G) c8 V" B/ h4 \- \
             2   active+undersized+degraded+remapped+backfill_wait
$ V2 _# Y% Q% [$ P0 B             1   active+undersized+degraded+remapped+backfilling
+ J" B/ b. P! ^ 9 y6 u- a* F1 L" m" `' z! Y4 A
  io:
: C: G, X( G9 A( l8 f8 X! z    recovery: 90 MiB/s, 22 objects/s
6 T2 [* K- t. z4 i$ t  i* r: I7 J% i; G4 ~4 v
可以看到提示 258661/4527742 objects misplaced, 22131/4527742 objects degraded, 这些都是正在自动调整的数据.) J1 e( P% S& h3 U8 X6 a4 F

' D, f$ D% r/ P! {等待调整完毕后, 我们依次下掉其他的OSD即可.
5 u3 t" `; @1 S7 n* S9 c
9 m" s! f& U- g5 U3 U& d' V然后到对应的 OSD 的机器上, 停止相应的 OSD daemon.4 O! I: d) K( ^' Y, C

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-22 08:34:59 | 显示全部楼层
要以交互模式运行 ceph 工具,请不带任何自变量在命令行中键入 ceph。如果要在一行中输入多条 ceph 命令,则使用交互模式较为方便。例如:' |: |$ y6 j5 a+ z! h8 O
0 I) z* m3 I- N4 B( v! E
cephadm > ceph
5 V0 i* F  s/ Q3 g  J, J+ \- u( _. q9 R: }1 d; X9 p
ceph> health- J2 O6 a9 G; e* ~+ N5 e
% l9 Z, j7 \# ~8 o, ?& J' G6 R# v
ceph> status4 U" ~# U5 Q3 I+ T

# F( g5 B; F- ^* X3 J8 B) pceph> quorum_status* F+ E' s2 w6 W; Z2 F  \+ r1 P

5 |& u! ?3 g& c0 tceph> mon_status$ `7 L4 f: d' g& [% k9 j  J& j3 o# |
0 c: W% {" I5 L5 _
4.1 检查集群运行状况
8 d8 M) W" v/ P  l
; k5 S. B$ z2 m2 Q& F0 O! X在启动集群后到开始读取和/或写入数据期间,检查集群的运行状况:
8 D4 M) g1 j3 h. W/ p- M5 j0 l. V3 X$ h3 e5 j# n: P. n
root # ceph health5 [% `- N1 T& F

& i2 n% y' e7 l- bHEALTH_WARN 10 pgs degraded; 100 pgs stuck unclean; 1 mons down, quorum 0,2 \8 x% |* h$ A; ^7 a

, `3 h7 B1 j3 g& p! E( J( n% \node-1,node-2,node-3" c( {* r% Y. a' O
; \2 Y3 a3 j7 E+ p2 y6 }
Ceph 集群会返回下列运行状况代码之一:* |3 o. O" Y6 J3 ?
" S; V) z. {5 F) V" N9 c
OSD_DOWN
" e2 m/ r$ U- H+ S
1 v* s* [8 [) L3 _5 E一个或多个 OSD 标记为已停机。OSD 守护进程可能已停止,或对等 OSD 可能无法通过网络连接 OSD。常见原因包括守护进程已停止或已崩溃、主机已停机或网络中断。
3 |( [" Q  _1 P% o3 n' h/ b$ j$ k! L2 t# c  E: R
校验主机是否运行良好,守护进程是否已启动,并且网络是否正常工作。如果守护进程已崩溃,守护进程日志文件 (/var/log/ceph/ceph-osd.*) 可能会包含调试信息。6 I. \9 ^9 i1 w

2 }$ I/ @: ?" `2 [+ j5 v8 AOSD_crush type_DOWN,例如 OSD_HOST_DOWN
2 t) F3 R! b0 c- R2 m
! o6 E. n* O6 L9 f0 Q: r特定 CRUSH 子树中的所有 OSD 均标记为已停机,例如主机上的所有 OSD。
( M( P$ [- r6 A: c
& l, v' \% k1 u6 XOSD_ORPHAN" V2 S& l) x$ B5 H4 `  O
" o/ x1 k, N+ g- D: Z5 m4 o
在 CRUSH 地图层次结构中引用了 OSD,但它不存在。可使用以下命令从 CRUSH 层次结构中删除 OSD:
: [1 D* d: r8 }, c' d7 V8 }2 U7 b. K
root # ceph osd crush rm osd.ID+ j: w6 g$ I/ G% @# E
7 Z9 P  c( T, n. h- k
OSD_OUT_OF_ORDER_FULL; Q. d. _/ r- r! Q9 G3 O: W& s

% [7 i+ s0 E$ l+ a! U9 |backfillfull、nearfull、full 和/或 failsafe_full 的用量阈值没有采用升序。特别是,我们需要 backfillfull < nearfull,nearfull < full 且 full < failsafe_full。可使用以下命令调整阈值:$ H$ z0 O* J  P" `3 G, |  ?

2 S! ?/ X3 Z9 ~) }root # ceph osd set-backfillfull-ratio ratio
4 ^; _. W( F$ H! D+ g5 i# A; o- L8 `6 y; J- ]
root # ceph osd set-nearfull-ratio ratio
6 H' I( @0 Z2 M$ s1 d: K! Z# Y- _0 o9 V6 z6 ^9 h' c
root # ceph osd set-full-ratio ratio( d( d& Q- C. r4 T4 {9 H$ X
- b( V8 k8 n. `# X% E1 \
OSD_FULL3 S8 B7 z# e" S; a5 V1 I

+ y6 `) q; c0 H# e& p$ _4 D0 b一个或多个 OSD 超出了 full 阈值,阻止集群处理写入操作。可使用以下命令检查各存储池的用量:
6 |( M# T7 j& ^& Y% e" U0 b1 ]: O$ l4 W$ F6 G# e9 @7 S/ h
root # ceph df
5 u( K& U) X+ o8 J  Y, W! |- ], t1 S! z- L5 C6 e- ]6 }: O1 t
可使用以下命令查看当前定义的 full 比例:5 w6 h$ \% T. W% X! S% e* _% Z8 l
- e7 F, U: b! f4 |! M0 B
root # ceph osd dump | grep full_ratio, J. {1 o: g7 B9 j+ O5 W8 ?0 ]
5 ?' Y( ?6 o( A  \7 a
恢复写入可用性的临时解决方法是稍稍提高 full 阈值:
' K7 H+ e0 s3 `- J  w7 K
& r  q% P- p- S# Z+ v  t$ Iroot # ceph osd set-full-ratio ratio3 g) t" W* I' Z5 g4 C$ K! }0 [4 n
. Q5 z8 f* `/ y* P; l& o
请通过部署更多 OSD 将新的存储添加到集群,或者删除现有数据来腾出空间。0 v7 N* ~9 t9 I8 J+ k- Z& `

) b; u+ i% H4 I& z# K& kOSD_BACKFILLFULL1 c. m! M5 x" ^

9 e$ c' @  |( f4 N' }一个或多个 OSD 超出了 backfillfull 阈值,因而不允许将数据重新平衡到此设备。这是一条预警,意味着重新平衡可能无法完成,并且集群将满。可使用以下命令检查各存储池的用量:
& g/ d* R9 N) K/ [
& |- m- \" y' E  f/ K  o8 xroot # ceph df* @- V4 d" P- D" b4 o9 g

  i+ d" _0 U3 NOSD_NEARFULL
0 s% B) E+ ^# l9 b) `
) }7 q! s2 ]2 s6 M一个或多个 OSD 超出了 nearfull 阈值。这是一条预警,意味着集群将满。可使用以下命令检查各存储池的用量:
. W2 e* D# @4 |  l
' u: W& O7 j8 s$ p9 j% Xroot # ceph df
5 m! ?4 U1 {; h- n; E4 u" F1 y+ d! Q: P( v  u* L9 E6 I
OSDMAP_FLAGS
- s6 G' J1 K7 {. I
0 F. t  \" X+ }! Z已设置一个或多个所需的集群标志。可使用以下命令设置或清除这些标志(full 除外):! P# X4 ~  G& L0 C' l1 \, L

6 z4 d5 X- I; }" y- ~) droot # ceph osd set flag: ?" i7 ~% g* f! C* d0 X  E+ J
; `2 H* i* s2 Q4 C  x8 T6 I
root # ceph osd unset flag
4 p" l$ a' F/ d0 u5 W5 Z8 }3 s. o' N! \* x" p9 y# `( ]# d9 K5 ^
这些标志包括:, \- y/ G9 ~4 z, \$ \

) Q( X& }! a5 i! e$ Y0 ^, L' Jfull% g( t" _* o* j2 Z$ ]
+ I: R! Z2 Y: |) I7 g* v  Y: }
集群标记为已满,无法处理写入操作。  R8 @3 M5 I' D3 K
( C$ l* N8 c$ H
pauserd、pausewr; _  K: Q1 U: N/ C5 e

) D. U( m; z( @, i+ a已暂停读取或写入。0 {; _$ t6 }! e2 p( Q

) n/ `3 T/ a' r: m  f; a( Enoup; ?9 Q6 F. f9 ]- e6 L, A

) }; P0 i7 \2 s' R" b' v不允许 OSD 启动。
$ U2 M5 o- t; l" m5 p4 A; P3 `
- P6 R- o3 `) J( U! p2 n( `4 `" Q! snodown
# h1 U+ l$ v* Y7 Y0 |3 g+ d
3 H+ g* k5 n7 C2 {& r, ^7 J将会忽略 OSD 故障报告,如此监视器便不会将 OSD 标记为 down。
' X6 E! |% _  D; C) r+ D* U# E! C( L+ _) y9 W4 D+ _/ T# X
noin! @. E/ Z; E- |: ]  Z; _
0 X( S& |2 [( b+ N7 w. s( `* w% _
先前标记为 out 的 OSD 在启动时将不会重新标记为 in。
) D, m: ]! n; l2 j6 l5 C9 X9 E+ \2 x1 [2 U* I' Z# C4 ~1 Y
noout
" s& V8 t* w: e4 F) @
" X) a* l- P1 `1 _) W停机的 OSD 在配置间隔过后将不会自动标记为 out。
3 m; B7 F$ l# Q( D6 ]. I+ {2 c. S$ y/ W; M
nobackfill、norecover、norebalance$ Q+ y3 T/ Z, {9 A  ~  ?) C) g

! ^- x9 y% J' f. i: Q' n+ J0 T恢复或数据重新平衡进程已暂停。
# @, P5 a% _2 O8 m( q
" F: b$ g! X* b! Znoscrub、nodeep_scrub
, M9 |  ~1 T. q. i. J. o  M
: |, \1 W$ w% X8 t6 G: ?2 l4 S整理 (scrub) 进程已禁用(请参见第 6.5 节 “整理 (Scrub)”)。
3 N; t& E' ^* O. h0 U8 X+ _5 R9 ~' ~9 Q( w. u: k! |# F
notieragent( {7 e6 D+ R1 r2 a' d; _+ w
/ n9 k% g& {  N+ }  h0 @9 w
快速缓存分层活动已暂停。- `6 n2 r+ d# u$ C# a9 z$ _
( B& ^2 j0 I% v; [+ z+ t3 O
OSD_FLAGS  E4 P- b( i  y8 \! k- S- S+ ~+ ?8 ?
' @, a* U" w: V/ g
一个或多个 OSD 设置了所需的每 OSD 标志。这些标志包括:
  L3 `& Z& z, s) O- p
$ a. [; M7 F/ ?- Cnoup  I" m9 j) I5 [/ S
1 u% \, N# C3 n5 r$ |, f
不允许 OSD 启动。
0 l2 g1 j* X, @& }
% x, Y+ G. Z# F8 }8 c4 ^8 mnodown
, A8 S# k8 B! V0 g' g+ x+ P/ r! Z6 V2 @/ W- P2 p
将会忽略此 OSD 的故障报告。9 L! Y' t' E9 y/ j* h, R: h1 u
, i6 g0 O; h) g( ?& r
noin* x# [) C# a- i& t! G3 g; ?9 ~" Z

7 R6 E4 A2 o/ v/ ^如果此 OSD 先前在发生故障后自动标记为 out,当它启动时将不会标记为 in。0 i4 S; j# R" u0 O
9 ]- ~' l% |- Q* [0 B
noout
, D& g: W4 n+ a
8 h& n& Z0 D9 H如果此 OSD 已停机,则在配置的间隔过后,它将不会自动标记为 out。( g& Z0 e7 F" U& J  B, `$ e

& u5 }. q  c: J可使用以下命令来设置和清除每 OSD 标志:
  q" z5 Y4 x2 b  u6 s
/ y+ l8 e" D3 Kroot # ceph osd add-flag osd-ID
6 X+ e" F7 d! T/ g5 s0 z( K/ u1 ~1 Q4 Y  n+ R6 D7 i
root # ceph osd rm-flag osd-ID5 w" [2 c2 g9 p& m

( d3 i2 T0 O8 P. x) _1 u) wOLD_CRUSH_TUNABLES
! F+ M1 g  s0 l
1 T" n( \# S" v& pCRUSH 地图目前使用的设置很旧,应予以更新。mon_crush_min_required_version 配置选项可确定使用时不会触发此运行状况警告的最旧可调变量(即能够连接到集群的最旧客户端版本)。  a9 i: y4 G9 Z' G% W- z, L* C
4 j6 o& U; x  s5 o4 a
OLD_CRUSH_STRAW_CALC_VERSION8 n  P. H) I, ~7 r% k5 v# ]
9 O! V( W9 x6 I4 S* p( ?
CRUSH 地图目前使用较旧的非最佳方法来计算 straw 桶的中间权重值。应该更新 CRUSH 地图以使用较新的方法 (straw_calc_version=1)。
6 i( [9 V7 y, y; G* |3 T
* X) [) y, R9 y) x0 P" O  LCACHE_POOL_NO_HIT_SET5 M+ K2 t) k# L, F- y  R

1 g3 B1 p) I" W) t. f& f. l一个或多个快速缓存池未配置命中集来跟踪用量,这使分层代理无法识别要从快速缓存中清理和逐出的冷对象。可使用以下命令对快速缓存池配置命中集:
1 P  I' w: _6 f' C6 U$ E
. f* Z5 M& K+ R6 ~root # ceph osd pool set poolname hit_set_type type
6 q0 e8 g* S5 k/ @9 n  r  W0 N& u5 j6 |8 @5 D( m* v# W0 S; v9 |
root # ceph osd pool set poolname hit_set_period period-in-seconds
1 b/ T: M/ C, o4 |; K; o
' P; u" v2 z1 z) D- z; Rroot # ceph osd pool set poolname hit_set_count number-of-hitsets0 G. M' x' F( v
1 C. r  N0 m% J9 B! \
root # ceph osd pool set poolname hit_set_fpp target-false-positive-rate
7 c& R  Q' y/ A; ]" v* K( r
' T% r* c; i) W! kOSD_NO_SORTBITWISE7 O3 D  \9 L7 ~+ q
& H; m4 m5 W8 H; |  W5 x
未在运行早于 Luminous 12 版本的 OSD,但是尚未设置 sortbitwise 标志。您需要先设置 sortbitwise 标志,Luminous 12 或更新版本的 OSD 才能启动:
, s( Z7 L, v$ p. B) O4 A
! Z: ^- G7 d- ]root # ceph osd set sortbitwise* z9 D; k& H8 ]& a  m- b: q* t

, c/ `) M  \8 A3 xPOOL_FULL
4 ]$ b( [2 K& L: ^/ m' p$ S  W
5 P. k- v2 W1 W- y! k一个或多个存储池已达到其配额,不再允许写入。可使用以下命令设置存储池配额和用量:7 X  \/ i- F5 _9 i' ~

- K4 m8 F" s, uroot # ceph df detail  c/ ~& f) m2 O
4 S* b# X# @/ p
您可以使用以下命令提高存储池配额# n8 u2 W' o9 M/ m0 p. h
% ~* T# h0 m9 ^. f1 z" z- P
root # ceph osd pool set-quota poolname max_objects num-objects
& N# i" t/ F5 y0 S2 a# m  K4 G1 f  v/ V/ ]
root # ceph osd pool set-quota poolname max_bytes num-bytes4 ]% f1 f- K# k

1 t! X8 Z: e0 @: j2 y4 v- i2 Q或者删除一些现有数据以减少用量。: J' f% [8 W; ]1 H7 j
  O& I8 G. P  S8 }
PG_AVAILABILITY
2 b  `  p% ?  o* Q8 N+ J8 I$ Q5 N! l
数据可用性下降,这意味着集群无法处理针对集群中某些数据的潜在读取或写入请求。具体而言,一个或多个 PG 处于不允许处理 IO 请求的状态。有问题的 PG 状态包括连接建立中、不新鲜、不完整和不活跃(如果这些状况不迅速解决)。运行以下命令可获得有关哪些 PG 受影响的详细信息:9 p' L7 Q" R' q% ], X' u; @
4 b6 Y$ e3 f7 p. u8 G
root # ceph health detail9 L8 b! h5 i3 }) G' s" j

5 t6 v% ~, {* q1 B6 u1 n大多数情况下,出现此情形的根本原因在于一个或多个 OSD 当前已停机。可使用以下命令查询特定的有问题 PG 的状态:
/ b5 P# R, A# ^2 R  b- J: Y2 D9 K: p9 v# a! {
root # ceph tell pgid query, D: J) z" x8 v5 [; a; I% B
0 R" F9 u, N6 A' V. d
PG_DEGRADED
8 a, j7 g6 u) g% |9 W) b4 y6 l$ [
) b  A% J: X( @某些数据的数据冗余降低,这意味着集群没有所需数量的副本用于所有数据(对于副本池)或纠删码分段(对于纠删码池)。具体而言,一个或多个 PG 设置了 degraded 或 undersized 标志(集群中没有该归置组的足够实例),或者有一段时间未设置 clean 标志。运行以下命令可获得有关哪些 PG 受影响的详细信息:3 c# e0 {4 W* ~$ _2 g( I) d
# c% ^( Z# Y' y' T& M' v
root # ceph health detail* u* x) f7 C/ P% T. T  }
. z# i, g' R' L' |2 J& O% j
大多数情况下,出现此情形的根本原因在于一个或多个 OSD 当前已停机。可使用以下命令查询特定的有问题 PG 的状态:
5 s1 U/ J8 B* y/ F  v2 M6 O, Q. Y+ ?% o2 j2 z; {2 g! b! K) ^
root # ceph tell pgid query& R& W& P- i, V( v' X! ^4 p

, j# ]7 O2 o( \  N, _PG_DEGRADED_FULL5 \. R$ M' k/ _# D' e
' J+ g  ~6 p* l6 {# ~
由于集群中的可用空间不足,某些数据的数据冗余可能已降低或面临风险。具体而言,一个或多个 PG 设置了 backfill_toofull 或 recovery_tooful 标志,这意味着集群无法迁移或恢复数据,原因是一个或多个 OSD 高于 backfillfull 阈值。
+ d- v& |& \  _' O: `. ?1 v  B. X' f' i% j+ F. `3 m
PG_DAMAGED3 p8 F$ i8 P- |! L# ?( y# }% ^

) ^& A. z; |/ c& N% X7 H数据整理 (scrub)(请参见第 6.5 节 “整理 (Scrub)”)进程发现集群中存在某些数据一致性问题。具体而言,一个或多个 PG 设置了 inconsistent 或 snaptrim_error 标志(表示某个较早的整理操作发现问题),或者设置了 repair 标志(表示当前正在修复此类不一致问题)。
! S+ U# L% n; F' Q- y: P$ `* q# B* ^% h' ^! K
OSD_SCRUB_ERRORS
' l1 @% y1 g" t6 Y0 @" n/ x8 M! c( K; D7 z' x
最近的 OSD 整理 (scrub) 操作发现了不一致问题。
+ D  n, M2 `  k: y1 H+ d: e, c, u' m2 T8 V
CACHE_POOL_NEAR_FULL
! w0 ^% N' b1 y1 x+ g" ^1 F+ v( F7 p9 t6 b; {* F
快速缓存层池将满。在此环境中,“满”由快速缓存池的 target_max_bytes 和 target_max_objects 属性确定。池达到目标阈值时,如果正在从快速缓存清理并逐出数据,写入池的请求可能会被阻止,出现常会导致延迟很高且性能变差的状态。可使用以下命令调整快速缓存池目标大小:& I5 _' x" J! z" H5 ~

( J! n: ^. }% Lroot # ceph osd pool set cache-pool-name target_max_bytes bytes
% P! L3 B3 G* D6 F# b3 R. b: c2 V0 D4 h: p/ g
root # ceph osd pool set cache-pool-name target_max_objects objects
& g# d, ]$ k9 C, q
/ {+ O! a4 M9 n正常的快速缓存清理和逐出活动还可能因基础层可用性或性能下降或者集群的整体负载较高而受到限制。
. {* E) W1 z/ k7 ~3 a! [- _) {+ s) J. _% ]+ J9 i
TOO_FEW_PGS& v, l6 X1 ?4 u9 m

9 w2 u: G, T. d$ g( S) V/ U使用中的 PG 数量低于每个 OSD 的 PG 数的可配置阈值 mon_pg_warn_min_per_osd。这可能导致集群中各 OSD 间的数据分布和平衡未达到最佳,以致降低整体性能。
' y9 i, I% m3 [# B: l1 f: r+ W$ F: X" X
TOO_MANY_PGS: y6 q. n2 P- q" R
1 E' W2 V& ]# D' X* D" J, S
使用中的 PG 数量高于每个 OSD 的 PG 数的可配置阈值 mon_pg_warn_max_per_osd。这可能导致 OSD 守护进程的内存用量较高,集群状态更改(例如 OSD 重启动、添加或删除)之后建立连接速度降低,并且 Ceph manager 和 Ceph monitor 上的负载较高。5 o3 A" ]& y& g! ~* ~% l8 ~) n) l
5 J& @8 Q1 q1 |& t
虽然不能降低现有存储池的 pg_num 值,但是可以降低 pgp_num 值。这样可有效地在同组 OSD 上并置一些 PG,从而减轻上述的一些负面影响。可使用以下命令调整 pgp_num 值:) o, c4 w" G/ P* u( k' k5 s

7 b: p' s  P! {" t- s/ p3 |" o' ]root # ceph osd pool set pool pgp_num value
# ]3 Y( @+ b. [: a: a8 A  q/ O) n0 w
SMALLER_PGP_NUM
" d2 T5 T( n' G8 \% s8 q; L  S0 S9 U1 y# {+ s* l2 r( P! \
一个或多个存储池的 pgp_num 值小于 pg_num。这通常表示 PG 计数有所提高,但未同时提升归置行为。使用以下命令设置 pgp_num,使其与触发数据迁移的 pg_num 相匹配,通常便可解决此问题:
+ y- W8 W( N- ^. z: T
  k4 X; d, V5 Z. rceph osd pool set pool pgp_num pg_num_value6 G) W2 t$ N6 v% P* d

8 _/ J! x1 F9 ~& M4 zMANY_OBJECTS_PER_PG
+ ?4 W' B8 Q% h+ ]5 o" ^6 q+ D5 H+ g7 B
5 L- p$ H7 z* B! h% L9 N6 c一个或多个存储池的每 PG 平均对象数大大高于集群的整体平均值。该特定阈值通过 mon_pg_warn_max_object_skew 配置值控制。这通常表示包含集群中大部分数据的存储池具有的 PG 太少,以及/或者不包含这么多数据的其他存储池具有的 PG 太多。可通过调整监视器上的 mon_pg_warn_max_object_skew 配置选项提高阈值,来消除该运行状况警告。
. A& I. M) q/ N2 k
$ W9 U0 J% o4 a9 L5 iPOOL_APP_NOT_ENABLED) h  K  ?) r8 k2 D8 ~; d
2 k# [( W/ `, q8 I0 \5 f
存在包含一个或多个对象但尚未标记为供特定应用使用的存储池。将存储池标记为供某个应用使用即可消除此警告。例如,如果存储池由 RBD 使用:3 m, m5 c7 Q! `# \; u) A8 w' B
( o% P4 |1 z, G! _0 q# k# S
root # rbd pool init pool_name  \0 {+ E0 B' V! |  u: K

. v  w7 }# O: k如果存储池正由自定义应用“foo”使用,您还可以使用低级别命令标记它:% S* u9 |; R. G: Y4 i) P4 B
$ I" Q( K3 [; K0 z
root # ceph osd pool application enable foo+ ^' ?& N' d, l# b: n- U1 m1 G. F

- ^+ a; @: h7 x& G6 DPOOL_FULL
' M( W$ C  Z( [' q$ |
7 }. n7 l  u3 T& G- ]一个或多个存储池已达到(或几乎要达到)其配额。触发此错误状况的阈值通过 mon_pool_quota_crit_threshold 配置选项控制。可使用以下命令上调、下调(或删除)存储池配额:
) r: G) z/ M/ x
8 ?2 t/ N$ W' g1 m# q3 iroot # ceph osd pool set-quota pool max_bytes bytes+ }* d8 n/ \+ `( r3 n/ n3 ]7 ]4 E" Y
. n, U9 R$ |9 ^* O, c
root # ceph osd pool set-quota pool max_objects objects8 t$ k, H! ]- J, u

, g  m1 b7 Y2 R将配额值设置为 0 将禁用配额。
( i: t1 |5 s- O: s+ z2 [
+ W- L* y% m, d7 a* hPOOL_NEAR_FULL, x" a& t1 W8 C% j7 F" `" T

2 Q0 ^8 ?2 ^; p- y7 g) H- f一个或多个存储池接近其配额。触发此警告状况的阈值通过 mon_pool_quota_warn_threshold 配置选项控制。可使用以下命令上调、下调(或删除)存储池配额:
  l  c- K3 ^& ~3 x* l2 l) a# n9 r. k5 H+ ~
1 e" g% O, i+ T8 S( lroot # ceph osd osd pool set-quota pool max_bytes bytes2 _. Z8 V3 @- R" F/ X; c
0 Y0 @- \. M/ P
root # ceph osd osd pool set-quota pool max_objects objects
$ g# [9 d7 D6 w: J# Z/ \
* M3 Y$ j" c" r# J# G4 w2 D将配额值设置为 0 将禁用配额。5 g6 V& o& _" a! \3 |7 p
: X6 o7 ?; }; W- u8 x
OBJECT_MISPLACED
# E  v" }% N, M1 |, F. M, P8 B) G3 k5 P4 w+ |, }, s& ^8 v) M/ L$ ~- ]
集群中的一个或多个对象未存储在集群希望用于存储这些对象的节点上。这表示集群最近的某项更改导致的数据迁移尚未完成。误放的数据本质上不属于危险状况。数据一致性方面永远不会有风险,仅当所需位置放置了对象所需份数的新副本之后,系统才会删除对象的旧副本。" j# D( ]% c" n$ |3 T1 }$ o
* c. L# y% _# Z1 X& R
OBJECT_UNFOUND
" i( l+ {6 L; g- K" h* p
; ^6 V* V6 I6 X2 u% v1 M找不到集群中的一个或多个对象。具体而言,OSD 知道对象的新副本或已更新副本应该存在,但当前在线的 OSD 上找不到该版本的对象副本。系统将阻止对“未找到”对象的读取和写入请求。理想情况下,系统可将具有未找到对象的最近副本的已停机 OSD 恢复在线状态。可通过负责处理未找到对象的 PG 的互联状态识别候选 OSD:
, C# Q: ?! F' [: f2 N) U' q8 h" l' u
root # ceph tell pgid query
# r! J; z2 H3 W% U  o$ K/ ]9 u; [4 }' A# C" {& N) q
REQUEST_SLOW
( Y6 j% E: d" ?: p9 ]! y5 E  D, j. }+ q; S6 ]" n4 a+ k
正花费很长的时间处理一个或多个 OSD 请求。这可能表示负载极重、存储设备速度缓慢或有软件错误。可以从 OSD 主机执行以下命令来查询有问题的 OSD 上的请求队列:+ a# X. b6 V3 H0 U7 i
' ]( x+ Z" o3 z0 ^- _, R4 F  p2 \
root # ceph daemon osd.id ops! v. e" S2 x6 d# V/ R% W

( M- M) w: J, o2 c( g可以查看近期最慢的请求摘要:
, ?) J% S( Q2 G/ h& Q" ~. o/ ?8 V7 l3 h- n% G% Z, t3 n. {$ }5 m6 d
root # ceph daemon osd.id dump_historic_ops8 ^& \& L# d, M/ k6 l. J7 @

, X  @& h* m  U5 z$ G0 A$ ]可使用以下命令查找 OSD 的位置:$ d' S8 `: I; X# s4 w* x
  C5 @) N  B( U5 S/ [2 O# ^$ Q
root # ceph osd find osd.id/ C/ |$ I! y' S$ n  Q" T

- Y* h$ m: O2 v$ O$ w8 ~REQUEST_STUCK
5 H. b$ b/ p9 q0 P
* x. Q4 f; w9 x  f" T& b已将一个或多个 OSD 请求阻止了很长时间。这表示集群很长一段时间运行状况不佳(例如没有足够的运行中 OSD),或 OSD 存在一些内部问题。( W3 g6 m# r7 Z

6 T& I8 G: S+ c3 K# [- ?3 h) }PG_NOT_SCRUBBED- ]/ h2 H) F( z) D$ Y# [
4 Q, |4 B! t7 ~7 I9 o
最近未整理 (scrub)(请参见第 6.5 节 “整理 (Scrub)”)一个或多个 PG。通常每 mon_scrub_interval 秒整理 (scrub) 一次 PG,当 mon_warn_not_scrubbed 这类间隔已过但未进行整理 (scrub) 时,就会触发此警告。如果 PG 未标记为清理,系统将不会整理 (scrub) 它们。如果 PG 放置错误或已降级,就会出现这种情况(请参见上文中的 PG_AVAILABILITY 和 PG_DEGRADED)。您可以使用以下命令手动对标记为清理的 PG 启动整理 (scrub):% f/ H" C! O3 v/ o7 g- F
. l: I& b4 `# l
root # ceph pg scrub pgid
5 d* I' O& j: I  [6 D) E; n
6 R' c: D3 P% E3 W' `* c- GPG_NOT_DEEP_SCRUBBED
5 m% G, s+ ^$ j# f/ M% C2 x# t* V2 ]6 g6 R: @4 G- Y/ t
最近未深层整理 (deep scrub)(请参见第 6.5 节 “整理 (Scrub)”)一个或多个 PG。通常每 osd_deep_scrub_interval 秒整理 (scrub) 一次 PG,当 mon_warn_not_deep_scrubbed 这类间隔已过但未进行整理 (scrub) 时,就会触发此警告。如果 PG 未标记为清理,系统将不会(深层)整理 (scrub) 它们。如果 PG 放置错误或已降级,就会出现这种情况(请参见上文中的 PG_AVAILABILITY 和 PG_DEGRADED)。您可以使用以下命令手动对标记为清理的 PG 启动整理 (scrub):
9 s" V# d$ |+ F! _, F  t

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2022-7-22 08:35:49 | 显示全部楼层
root # ceph pg deep-scrub pgid
5 l6 x  ]8 U5 V( Z  P5 x4 O: {) X
3 l1 T; S/ h" C' F& g- W& L1 X; }
% j' r' \: y  c0 ?1 N/ i' w0 N, G, x! K
提示! v: F: ]1 o9 ~4 o4 |: t+ n

! h: Y- e; V. k2 W; x如果之前为您的配置或密钥环指定了非默认位置,则此时可以指定它们的位置:
' B& ]6 k8 t8 q! B$ }) N9 s! c
  n; P# J4 H9 V2 K% xroot # ceph -c /path/to/conf -k /path/to/keyring health
, X  n5 B  x' h% L  b0 `: }+ O
  C$ v' e4 P+ G0 B# e4.2 监视集群
; }  b  j  p9 n, C
+ \" |* ^# p8 U8 l4 d可以使用 ceph -s 了解集群的即时状态。例如,由一个监视器和两个 OSD 组成的微型 Ceph 集群可在某工作负载正在运行时列显以下内容:
+ x% S' `4 [' V* [
7 c% H" w  s* X, ?% ^cluster:) N4 j2 I, |4 m
* c: Y7 D5 g/ o. m8 H' ?4 [
  id:     6586341d-4565-3755-a4fd-b50f51bee2484 X$ [6 x" |: K  z
( o- Y" i* Q( \" B# j
  health: HEALTH_OK
2 K. R* A* }* S5 z8 }% I/ R
( Q6 Z% ]+ |2 b( @- ]+ D4 o; z/ T ) K& [* ]/ ?% J7 R6 g( X3 F
' v& f. W) K  W1 n8 k; c
services:
3 D6 o; x5 J& H
0 f0 N; d* P" c- s" X, g  mon: 3 daemons, quorum blueshark1,blueshark2,blueshark3
$ J2 C4 a! W0 t  T! A+ h  B& f( A9 Z9 l, E3 j6 R. e3 I# `0 z
  mgr: blueshark3(active), standbys: blueshark2, blueshark1/ z/ ?+ w- U) a8 y( ]# Q3 A( p( B" ~

! i8 T5 Y8 d9 g/ V  l  osd: 15 osds: 15 up, 15 in$ N; D9 ~( ]$ J; x. G0 B

8 D2 Y" k- b8 d" } # y; M: }$ b. b( q+ A: V
, @" r" h6 F: [- P3 Y9 S& |& U
data:
9 W. p5 U! V/ E5 [; Z" u0 o7 Z7 M6 _+ y7 p  N
  pools:   8 pools, 340 pgs
: D: `: m. n) I  d% E4 l" b' y; S5 @' H, k3 j$ z8 U: W
  objects: 537 objects, 1985 MB
4 `( B5 X/ n3 H# Z; h
7 Q; Y. e. w. a% L+ m7 D7 f  usage:   23881 MB used, 5571 GB / 5595 GB avail  K; E6 E7 O3 ]% H: S! a( E7 p% H) s
* @% p0 ?0 o3 ~# m2 {
  pgs:     340 active+clean
4 L; A9 E5 B8 |6 O# p1 {! h" M. y. j& b* s/ S9 N( i7 e0 S3 L

5 ^- x' v! S* Y: s& Y  k6 y! B( s& ]( B6 \4 G/ k1 a8 q- X
io:
+ @# n4 R) m" D, I6 N
5 O; l' t' Y+ N' H. Z  client:   100 MB/s rd, 26256 op/s rd, 0 op/s wr
+ O% k4 C8 P6 ^" g2 G+ U
6 L6 T3 F4 b' u4 N输出内容提供了以下信息:" W; t$ a5 }4 H2 g* R; A& Z5 M
/ {7 i& o# S0 x9 V1 _
集群 ID
1 [0 H$ r# L: b/ |; N集群运行状况
. F* G" b5 F( L监视器地图版本号和监视器仲裁的状态
% z* i% {! I, V0 x+ MOSD 地图版本号和 OSD 的状态
6 e; W! w! C* d, Z2 ]- S* X归置组地图版本& K9 N, ?. S3 J, M) E! w7 [8 B" Z
归置组和存储池数量: e7 F$ E( U4 ~7 l9 ^
所存储数据理论上的数量和所存储对象的数量;以及
( _9 i0 z. _7 x) _+ c" f! s1 h" c2 N所存储数据的总量。; H, n, i; C0 ?3 w

. l! E6 J7 E0 h( |  b4 g, O! [
* c7 W- V/ t$ P( @1 b( G提示:Ceph 计算数据用量的方式
  k8 n0 r8 d& w( j6 x) ]7 v) a! U$ R. O0 T
used 值反映实际使用的原始存储量。xxx GB / xxx GB 值表示集群的可用容量(两者中较小的数字),以及集群的整体存储容量。理论数量反映在复制、克隆所存储数据或创建其快照前这些数据的大小。因此,实际存储的数据量通常会超出理论上的存储量,因为 Ceph 会创建数据的副本,可能还会将存储容量用于克隆和创建快照。
8 w' J& a% N/ D4 j% s) A, K$ t8 i2 j) U' G/ P. n* T6 B
显示即时状态信息的其他命令如下:
  |. n" \1 R8 c2 Y
9 g, U# D; \; x4 hceph pg stat, {* ]9 M# D9 e9 x* l# a) v% g
ceph osd pool stats5 Z: i7 E6 h8 v8 U, I; j5 k
ceph df3 Y/ U7 e( F* y) K! c' C; D' H/ Z( F9 _& U
ceph df detail( L" r8 _3 v( h  @) T; ]% F
要获得实时更新的信息,请将以上任何命令(包括 ceph -s)放置在等待循环中,例如:
* v) Y, Z+ ~# z2 O8 T- I! m. n! E+ y% L
root # while true ; do ceph -s ; sleep 10 ; done
/ Y0 }8 q. j2 w) Z. K5 ~% K  Q0 s; C0 k
( n: F4 d: f, l) e2 O如果您看累了,请按 Ctrl–C。
9 r* }# ^0 ?: V2 G' q7 G7 k! P, s
4.3 检查集群的用量统计数字
+ G! f, E5 J: }2 Q9 k0 d* n& A' k" X  R: ^! Z5 J1 m
要检查集群的数据用量和在各存储池中的数据分布,可以使用 df 选项。它类似于 Linux df。执行以下命令:7 D2 {2 o8 B  v7 V' y! X
+ X. \6 s5 X: R6 d
root # ceph df7 T. A6 b1 s) R" u
4 h; u' b# h; v7 Q0 O2 s
GLOBAL:
+ d5 E0 g  \8 ?9 [8 z+ o
% J) B, X' a5 ^! g$ p    SIZE       AVAIL      RAW USED     %RAW USED8 a3 j5 A$ U4 D

% L: X" x+ _# ?$ o& B, V2 M  a    55886G     55826G       61731M          0.11! {4 u, k9 P: D9 ~# u

# U0 j2 G) g# _& J  b  q; \% pPOOLS:
( w8 {& c6 Q4 l+ |. I( L$ Z& C1 S# o( I1 u
    NAME         ID     USED      %USED     MAX AVAIL     OBJECTS
- }  g9 f% [, G6 V" v0 {
# N2 l. D3 C% X7 p    testpool     1          0         0        17676G           0- A  W' s8 k6 X5 r

9 i  B0 z( x: c' t; X0 h$ O    ecpool       2      4077M      0.01        35352G        21025 x. W7 k' E0 H

5 L3 N7 p1 h5 s& ]* F    test1        3          0         0        17676G           0
: h7 u, K" `0 j8 U# E: d: h; W0 T2 g+ d. ^4 _+ x
    rbd          4         16         0        17676G           3; e" E( `" @+ T0 f. L' _* H: k0 U

% ^; S( m7 N# L" s1 L0 r: V    rbd1         5         16         0        17676G           3% Y8 h' h* M* O+ T6 S* J
9 K; T7 E& F; T5 Y+ P  N
    ecpool1      6      5708M      0.02        35352G        2871) e1 ^( z, J* f3 B

: Z3 U- M) [" i' T! X) |9 l输出内容的 GLOBAL 段落提供集群用于数据的存储量概览。( A$ \' Q6 q% O
2 {! b. g! @( K  t( V8 |
SIZE:集群的整体存储容量。
$ M# D( c4 |/ |' J9 q. b* ~. H: yAVAIL:集群中可以使用的可用空间容量。4 M1 z) T* C2 W7 C; u
RAW USED:已用的原始存储量。
# Q1 x& [- ?6 S0 }1 n% RAW USED:已用的原始存储量百分比。将此数字与 full ratio 和 near full ratio 搭配使用,可确保您不会用完集群的容量。有关其他详细信息,请参见存储容量。$ Z3 A# d! @! y

1 x5 c* Y( _( q' ?: w  ]- G0 J- D; ]2 d" [7 A
注意:集群填充程度
$ N- x/ g, j+ {% @* J+ y+ W; ~0 `5 N% s
原始存储填充程度达到 70% - 80%,表示需要向集群添加新的存储。较高的用量可能导致单个 OSD 填满,集群处于不良运行状况。
- @+ _8 f3 X3 \( F6 M
- L5 |; A0 s5 w* ^/ I使用命令 ceph osd df tree 可列出所有 OSD 的填充程度。
: [8 w( ]) T* t7 s' p. {" [# W" H3 b( g/ s( @8 a
输出内容的 POOLS 段落提供了存储池列表和每个存储池的理论用量。此段落的输出不反映副本、克隆数据或快照。例如,如果您存储含 1MB 数据的对象,理论用量将是 1MB,但是根据副本、克隆数据或快照数量,实际用量可能是 2MB 或更多。
0 G; c; E6 ~5 u5 X" A( r& L5 P% p, B6 e6 r
NAME:存储池的名称。
: ]# X* O. A2 M9 gID:存储池 ID。. i) g7 Q" w5 q3 N8 {: J
USED:以千字节 (KB) 为单位的理论已存储数据量,如果该数字附加了 M,则以兆字节为单位,如果附加了 G,则以千兆字节为单位。/ g, A7 {$ U- R1 ^
%USED:每个存储池的理论已用存储百分比。" m* B8 f( Z' s- _; h' W8 T
MAX AVAIL:给定存储池中的最大可用空间。  q9 m& h0 k( K0 A
OBJECTS:每个存储池的理论已存储对象数。' q7 `5 L: X8 i) Z

1 ~' R5 U9 U$ v% u# o. w/ [. i6 p+ Z6 l& H' f- f! l4 V5 `. D4 [
注意# K* ?: {$ O  ]" K8 S4 z0 y
! q& F% }7 v; P7 i
POOLS 段落中的数字是理论上的。它们不包括副本、快照或克隆数量。因此,USED 和 %USED 数量之和不会加总到输出内容 %GLOBAL 段落中的 RAW USED 和 %RAW USED 数量中。, H3 P4 T1 [" V8 S5 _
& b2 M/ \& u; ~( E6 y/ C" E- X! o
4.4 检查集群的状态 8 K' m1 g& G1 T
+ f7 k- N( ~7 a
要检查集群的状态,请执行以下命令:
' N0 k3 F) G6 M1 w. S  g" \% L0 G& i4 \2 n) [
root # ceph status5 Q0 G. _2 f; J4 C3 i" Z

7 V  _: o6 k: |3 T! h或者
; Q6 }% m" T. Z! a- h
6 k! D- m; s9 w4 N# }6 a- ~' k) vroot # ceph -s. ]& c' ~" K: C0 n; d9 {1 U
8 ?0 s" u% w) R6 A
在交互模式下,键入 status,然后按 Enter。
- j7 m/ j0 \: e$ C& L# U
1 M. Q. Y2 ^7 eceph> status# Q" ~& p/ |' L- F

; p# q+ h9 r+ RCeph 将列显集群状态。例如,由一个监视器和两个 OSD 组成的微型 Ceph 集群可能会列显以下内容:
$ Q/ ^+ Q# K5 E' `  c
. I( G. ^) o2 S2 y$ ?cluster b370a29d-9287-4ca3-ab57-3d824f65e3398 P4 s  w4 B! N5 a# G# r
$ @: x5 J7 ]$ D/ l- g. ]
health HEALTH_OK
' Z0 D( {6 q, a0 c. T2 S, j  i# R$ {  A# C* Z
monmap e1: 1 mons at {ceph1=10.0.0.8:6789/0}, election epoch 2, quorum 0 ceph18 q" G# T5 K' r& n$ |7 R- J% F$ K
" u+ u; |* O( `; a
osdmap e63: 2 osds: 2 up, 2 in
( e* P) v1 k. z
+ S* r4 ~3 D( ^& l% u, l  pgmap v41332: 952 pgs, 20 pools, 17130 MB data, 2199 objects6 o% X; ~6 J1 |( I, ?+ e" }
$ ?+ p! J: c: {0 N: a( i4 ?
        115 GB used, 167 GB / 297 GB avail
! K% I# ~5 l- R; |
) N& v9 P6 Z# u9 Q% b               1 active+clean+scrubbing+deep
' l- {/ K7 u% A# t$ `
/ A0 W" }; U7 b8 G( M! Q             951 active+clean3 }0 s! U2 H7 ]% I7 G. _
( g# s) z$ k1 K- B* e
4.5 检查 OSD 状态
) V& P6 B$ P) Y9 W3 R
& M( z0 ^; N9 {& M- o可通过执行以下命令来检查 OSD,以确保它们已启动且正在运行:
# c7 @, |1 V$ Y( T- X/ T% i
8 W: {8 C! R) `8 w, qroot # ceph osd stat
  b4 O: H& A  J- O1 K" e2 g* A) K/ s7 N4 ?9 G, a
或者* B; ^% F  v. b: m" I
$ H* g  s, Q, e' k) l8 L+ C* }
root # ceph osd dump
0 {4 P, e, L- |' A& B9 P" D2 W5 u" E( U
还可以根据 OSD 在 CRUSH 地图中的位置查看 OSD。
, \, [" p+ T9 \
! h+ P6 T* e8 q* Q# C1 {: u! mroot # ceph osd tree
) d& D4 f% }5 n' l0 R0 [5 X! ^& E
& U. ~1 p1 s* B/ @% x6 Q8 RCeph 将列显 CRUSH 树及主机、它的 OSD、OSD 是否已启动及其权重。* S8 l" C4 C3 F

1 T" P9 d2 U3 {, L! E# id    weight  type name       up/down reweight8 N1 X/ D9 W8 a" j$ N& r9 Y( @
9 x. K( p3 j! o
-1      3       pool default8 r) G' J' ~8 y& F4 A: n

/ v% c, Z- ]+ m-3      3               rack mainrack
6 M3 r. I! j- S! x
  h1 ~$ ?2 V7 m& Q1 j6 s9 A-2      3                       host osd-host' P8 N( P9 F2 T: R+ k) z( k
# E1 F3 g# t  Z0 n8 T( a7 I" G
0       1                               osd.0   up      1
, K! C8 }' d  O; ]8 p3 T) w  I/ j% R. i) p: P& f' T
1       1                               osd.1   up      1
5 @4 x% J3 T4 c5 b3 {7 w; n/ U# R; F" a3 Y; V3 c% k
2       1                               osd.2   up      1
8 v5 Y9 H3 c% p9 g; a5 Y! |+ k6 s2 u  X% u3 H) [
4.6 检查填满的 OSD
/ T  P! R' L5 \: \$ ~" G% Y8 K; }4 ?* w; M& L
Ceph 可阻止您向填满的 OSD 写入数据,以防丢失数据。在正常运行的集群中,当集群接近其填满比例时,您会收到警告。mon osd full ratio 默认设为容量的 0.95 (95%),达到该比例后,集群会阻止客户端写入数据。mon osd nearfull ratio 默认设为容量的 0.85 (85%),达到该比例时,集群会生成运行状况警告。
1 b" L" Y# c9 c8 g# p1 K, A4 r
5 _6 m' L6 H- @: m. X4 E4 Y' H可通过 ceph health 命令报告填满的 OSD 节点:
; e4 p' ~  g% v# K$ S5 l' c& v* E9 a( |8 W3 _# w# \5 \
ceph health9 t+ o- h( t& S, ^

) Y7 @% P  y0 j# Z* ]2 }, J  HEALTH_WARN 1 nearfull osds& E: q3 C/ I: C) r, q$ Q: Q. C/ K

( L$ C+ U# j* C& g: ]' T; i  osd.2 is near full at 85%
( q% G8 L8 u! |9 p
& U9 Z0 ~( W% L" A# Y  Y或者5 N) J3 S; E, U) d
/ z& }# W) l6 M- q$ U
ceph health* n, `" m6 ]) ?1 t  p

" Y  s. @1 B# G& V  HEALTH_ERR 1 nearfull osds, 1 full osds/ F: b, L2 v4 |1 ]* d
' Z/ z, g  z9 y; @4 T- O+ c
  osd.2 is near full at 85%0 Z2 P  s' e7 [

+ c3 k  _1 R. E  osd.3 is full at 97%2 @4 f5 H7 ^0 U3 J0 [9 I8 p# {4 o9 \

; i* T! y, R; M4 t7 k+ z处理填满的集群的最佳方法是添加新的 OSD 节点,以让集群将数据重新分布到新的可用存储。
( \3 n' y8 s  D/ l: N. h/ t
7 }) ~  k) A0 S# o2 T如果 OSD 因填满而无法启动,您可以通过删除已满 OSD 中的一些归置组目录来删除一些数据。
' R$ o# X4 K( c  a- |5 ^" S" t2 n- F1 a4 X

9 ~$ w* g" A: t. k6 ?; q3 }  H) Z4 M, M: D
提示:防止 OSD 填满
5 Y/ k# r0 I9 a$ p" E+ R" D& q/ t  m" d( ~1 g5 ]) x2 S
OSD 变满(即用完 100% 的磁盘空间)之后,往往会迅速崩溃而不发出警告。管理 OSD 节点时需记住下面几点提示。
: w( z" v2 B+ M, f# k, s2 d$ {# j  b/ f* |$ o8 {
每个 OSD 的磁盘空间(通常挂载在 /var/lib/ceph/osd/osd-{1,2..} 下)需放置在专用的底层磁盘或分区上。0 y+ y& T1 W- S; f! p7 j& J0 T8 E$ W
检查 Ceph 配置文件,确保 Ceph 不会将其日志文件存储在专供 OSD 使用的磁盘/分区上。
1 ~; Y4 f/ m; o3 z, s5 o确保没有其他进程写入专供 OSD 使用的磁盘/分区。
5 Z1 g' U. e6 ?/ a! v: y( c, g& j4.7 检查监视器状态
! Z- a# J" I' X' X6 d2 v+ o# Q- Q1 F  z- ?: X
如果集群有多个监视器(这是很有可能的),则应在启动集群之后到读取和/或写入数据之前的期间检查监视器仲裁状态。有多个监视器在运行时,仲裁必须存在。您还应该定期检查监视器状态,确保它们正在运行。( U8 Y  a: \; m2 h3 [4 ?! h

) ~5 G3 z( h$ l; J8 J要显示监视器地图,请执行以下命令:
2 y4 U3 x- Y. z* k) c6 R- Q0 m9 W( ?; a! S+ u+ c* j$ |& A! p- S
root # ceph mon stat# f' s0 ]2 u7 D9 e: Z3 l- T

: I' @! R/ S/ L或者6 k- m6 {, s. i3 A- i& p

. x8 }, }: e5 W, {7 ?0 ^root # ceph mon dump. a, H8 b: S3 {8 s% N  C; s

1 U/ N7 I6 Y8 P% F9 z要检查监视器集群的仲裁状态,请执行以下命令:
( D, ]) N  K* v1 ^, Y% [- u
) J0 \9 l- W% q; m" F$ y; H, Yroot # ceph quorum_status
2 [9 r, C# b( t8 V9 x0 Q2 a( p  o
) G. q6 z1 G. N- O+ B6 E* |1 xCeph 将返回仲裁状态。例如,由三个监视器组成的 Ceph 集群可能返回以下内容:
! G- T- t; `: g1 v5 Z6 C, M5 n; h3 K/ G
$ q( X; T7 {! O* J) A- |0 H{ "election_epoch": 10,: b, ^( Y! n+ D

# C/ `) _) x) Y; c2 U  "quorum": [& P& L1 {$ H8 }3 i6 K5 l
1 |1 v0 J- `4 d5 A
        0,2 D( [( l( [) _/ q, N. Y

$ z9 d5 _2 F- ^( n( K! c        1,: ~4 L( w) T8 n8 Y8 T/ r
" M. k: J( ]8 K1 z; \
        2],
* }& E, y* d9 t. l4 h7 l8 N$ E% Y: r. e- \6 B( \$ S
  "monmap": { "epoch": 1,1 ^) W( G- c6 g1 A; @, b
4 S' q9 d' B# O- v
      "fsid": "444b489c-4f16-4b75-83f0-cb8097468898",# F/ s  k# n5 w' H! C
  t) W2 w/ s6 C. H/ J6 |; T
      "modified": "2011-12-12 13:28:27.505520",
- B4 N) q* g/ d/ Y/ H, j% q" m) j' {3 R; R: e8 [
      "created": "2011-12-12 13:28:27.505520",; z+ G! J7 c5 l1 w4 ]; m: E
0 W! J3 C. D+ ]# v: |
      "mons": [" T0 M& J5 Z6 Y: }, Y0 x  @  d& u
/ ^, h! ^; F5 M1 {; J
            { "rank": 0,- l( s) j2 h; T8 \: Q' @8 p: M! s2 d

- X3 R- G& t% Q6 `/ j3 U( D              "name": "a",
6 d) [, N+ {8 h5 ^; d* j& n- j5 Z- ?" l) }
              "addr": "127.0.0.1:6789\/0"}," h" Q# Y; q) @" }/ ?$ o" W  G+ z3 [

8 M5 s, T) W. k' V- W+ u            { "rank": 1,
4 F/ m9 I- ?) Z" |# {7 B3 t& I# V5 }+ Z3 b$ w# C( O
              "name": "b",
  R; S0 \6 M# S6 M7 k
" [4 [& c, B9 \              "addr": "127.0.0.1:6790\/0"},
! R2 j! o* P( X/ N& D( M1 ~$ t2 D4 t- g6 Y+ T4 W- d/ p
            { "rank": 2,! _' H7 a# n* F* ?9 F1 F% E9 K" u

- R& p8 t0 @4 X( j' f              "name": "c",
6 X( D7 r6 k* m0 @: F, q9 a) k$ [
. J* {5 x7 C  h& T3 Y# X) x              "addr": "127.0.0.1:6791\/0"}# W; {$ m* t) X8 H6 q3 X5 U
2 s3 N( K! A6 N  [9 v; q( w
           ]# M: l2 i1 q3 Z1 b
7 X% w1 F4 v- W, k" a
    }" V9 s  Q- d! i% v$ W

& e% u8 K; Q0 \5 B: |/ x7 F}
) z/ n: |& y, }
- a0 U. V) H* [* U& R4.8 检查归置组状态 1 V8 U  Z+ e% a8 s" U
! s5 L* X$ a' E% Q* n4 h! A
归置组会将对象映射到 OSD。监视归置组时,您希望它们处于 active 和 clean 状态。有关详细的讨论内容,请参见监视 OSD 和归置组。
2 X* d& t3 T% l
- N: b- `3 [* h1 ]7 s  w! L4.9 使用管理套接字
, b( j& Y. O- r) y0 ^/ T' h2 H6 e7 {2 g9 l  K" ~+ @' j
Ceph 管理套接字可让您通过套接字接口查询守护进程。默认情况下,Ceph 套接字驻留在 /var/run/ceph 下。要通过管理套接字访问守护进程,请登录运行守护进程的主机,并使用以下命令:
9 D% o0 s3 e. T. E3 J2 P8 c. x
1 |: G. s1 }: R2 g9 Z+ B5 t2 q2 Oroot # ceph --admin-daemon /var/run/ceph/socket-name
( j) y5 }9 x- G5 _4 Y; S3 A' j1 Q# O9 e2 k, ^4 M; G; f  V
要查看可用的管理套接字命令,请执行以下命令:
5 @& J, `8 o6 P5 Z3 Z$ V5 p0 x9 t0 W& ~4 {; [( G
root # ceph --admin-daemon /var/run/ceph/socket-name help" o  q1 v& W3 q) q+ J& ]$ j

3 e7 k4 ]9 d0 _# ?: K管理套接字命令可让您在运行时显示和设置您的配置。有关详细信息,请参见在运行时查看配置。1 U8 o# w1 {9 H" D& a) g$ E2 Y$ n
+ P9 `1 @6 j( ~( B1 n6 v% }: |8 I
另外,您也可以直接在运行时设置配置(管理套接字会绕过监视器,这与 ceph tell daemon-type.id injectargs 不同,后者依赖于监视器,但不需要您直接登录有问题的主机)。
9 \6 P! i4 |' n  Z# m7 w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:06 , Processed in 0.279595 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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