|
|
从一本书中了解到pg修复过程记录下:
2 R) V" I+ j; ?: eceph 的scrub/deep scrub 是集群自带的自我检测并修复的功能,能够实现对object 进行自我修复,下面来试试手动修复。0 I* w2 s3 ]+ ]% m
1 f2 i0 r" o& R' z% W! [/ S f0 N首先找到PG所在位置:
& U! K2 B7 ^7 }0 K[root@ceph-1 ~]# ceph health detail: e+ `9 q$ N1 `" U. B3 G* y7 |# \
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors- G. V' |9 M, R1 f
pg 16.1c2 is active_clean_inconsistent ,acting [2,5,10]
} {2 G# t1 k @7 O% S2 scrub errors! @) G5 ^ N! W
5 r& m1 d: b5 b) }; r
5 }; B W3 Z: i T如上所示,PG 16.1c2 当前的位置在OSD 2 5 10 上。
8 V3 h3 T9 F8 ]+ @这时可以直接通过ceph pg repair 16.1c2 直接检测并修复,下面我们可以来挖得更深入点。* A/ r, O7 G3 X9 G- @! V i
( u. W, @- ]$ n: E9 ?3 e. S9 s( h: ]" P
再次 找到问题所在
) S& W$ `4 v0 v8 @+ r0 b# B! \ 在相应的OSD日志里,找到错误的提示,如 grep -Hn 'ERR' /var/log/ceph/ceph-osd.2.log 。如果日志已经被切割了,用Zgrep 代替
; q5 d. D& N; y5 xZgrep 可以对已经压缩的文件进行正则匹配。3 o6 H7 M& A* p) U" }# v1 @
1 [+ @4 b2 b" o5 a1 B7 i) \
log [ERR] : 16.1c2 shard 2: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 3607295895: ]" r2 B3 l& `- o
log [ERR] : 16.1c2 shard 5: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 3607295895% h7 M7 |' O1 Z& D; C- i: z6 c2 `
& }3 ]1 m/ s+ R- ]& C; t
: S/ H K/ M* |& \0 M: R8 f G" Y: c
从日志看,object 的摘要(digest)本应该为3607295895 ,但实际却是0。5 d0 e# ]2 h5 t: v) H0 w; d z
+ r0 A% o* [+ \7 ?; s7 P5 D6 ?2 T
/ w3 T% c+ q! r7 z
最后 找到对象9 j1 Y6 Z& C+ C T+ M7 a
从日志里,我们已经获得如下信息! Q8 C Z5 H( Q5 x1 L" x. D
0 i2 {) } k+ t, d% B: O/ S( r$ C
问题PG是 编号为16.1c2 。
( _0 b% e1 b& E; `! G9 ` osd的ID是2 # R. H; [% D& P7 u$ V
object名字是rb.0.09213.253e1f29.00000001232c
$ {& W! p, c4 G5 \9 K! m/ U, m- ?% F' A9 ]0 h7 I3 f/ J9 r7 N
接下来我们找到object 的具体文件所在的位置。
2 ^2 \; l/ G; @
. D' e4 C2 {! }( u. H2 t- V# T5 y[root@ceph-2 ~]# find /var/lib/ceph/osd/ceph-2/current/6.17b_head/ -name 'rb.0.09213.253e1f29.00000001232c*' -ls
( E% ?6 m2 ^1 D" Y8 z$ P% I1 b1 s* [- @$ s( A
33581488 0 -rw-r--r-- 1 ceph ceph 0 Jul 27 11:47 /var/lib/ceph/osd/ceph-2/current/16.1c2_head/DIR_C/DIR_1/rb.0.09213.253e1f29.00000001232c__head_58BCC1C1__11/ o x9 e( i6 H/ t4 V
- B/ `% ]& h0 M
4 \( H+ s. w/ `( h- L, d
下面可以做这样的事情:
! M; B3 ~2 S" G6 @ 在每个系统上检测一下这个object的大小: f- ~2 j3 n3 k) P" V/ e
在每个系统上校验胰一下这个object 的MD5值
" t) c$ _2 M4 i
. T$ k; i8 e" W: O+ i6 Q; V# g2 b, a% A7 h* X9 N' ~; d
修复问题:
& r1 k0 w0 T. ~0 }& E: d( T' ~, S8 \ 修复步骤如下:
1 a: t3 T$ H, v 停止所有错误object的osd进程。- X9 X8 t* c% ~* _9 V) `2 K2 n
日志同步到磁盘 ceph-osd-i <osd ID> --flush-journal。
" S6 y( _6 s/ A) I! u+ o: e2 N 移出有错误的object。
8 Z8 t! R- w5 X8 h8 ?6 i 启动OSD进程。
9 Z5 k" D4 G8 r& \% ~ 调用ceph pg repair 16.1c2 1 e( m h! e- }3 d0 V
|
|