|
|
从一本书中了解到pg修复过程记录下: |0 x" @% T0 o3 L& D
ceph 的scrub/deep scrub 是集群自带的自我检测并修复的功能,能够实现对object 进行自我修复,下面来试试手动修复。
5 l; y0 {0 o7 ?+ i. c
$ D' ~, k% J& M, d# X: t( _& c首先找到PG所在位置:# c, d4 p9 P. Q. s6 w) o F
[root@ceph-1 ~]# ceph health detail
4 f# Z; @/ [+ CHEALTH_ERR 1 pgs inconsistent; 2 scrub errors
# g! o- k# b% {( ]/ ^pg 16.1c2 is active_clean_inconsistent ,acting [2,5,10]
* @9 y' E. @8 P! }% D: |, e2 scrub errors/ q& n2 C3 T, s# v/ P7 I4 C9 I
- P2 f; d! L" S
, q7 N0 i' x- X; L& Z如上所示,PG 16.1c2 当前的位置在OSD 2 5 10 上。
) Q- k& s+ V& o- C! z这时可以直接通过ceph pg repair 16.1c2 直接检测并修复,下面我们可以来挖得更深入点。" J9 k' Z( t s, S) L
. k' n, O3 T/ W/ [) l5 I再次 找到问题所在
5 S; }4 W: [' X% m- ^& s 在相应的OSD日志里,找到错误的提示,如 grep -Hn 'ERR' /var/log/ceph/ceph-osd.2.log 。如果日志已经被切割了,用Zgrep 代替4 v. N3 Y7 i1 }) o: ]5 J( D
Zgrep 可以对已经压缩的文件进行正则匹配。$ A& U# l* o; A: ?5 v! X! w7 u
5 k; W3 o) X9 P* x# a! ^# u8 W
log [ERR] : 16.1c2 shard 2: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 3607295895/ \6 C4 S6 ]. v
log [ERR] : 16.1c2 shard 5: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 36072958956 |, a4 A) f, \) [
# T/ {6 O% w1 Q# A" C
9 W, C& R/ x8 h6 Z8 [" D0 P% w从日志看,object 的摘要(digest)本应该为3607295895 ,但实际却是0。
2 q; J! x/ |% Z; r" \) T* N7 K+ E5 j! C, S
7 |! z, R1 X+ d
最后 找到对象
+ l1 A3 c- k% @) A# q7 q1 z从日志里,我们已经获得如下信息- A5 j, y1 G- j8 Z, b- v, N/ h
7 O& H: y' I" e0 L2 ?% n7 a" Y+ ?
问题PG是 编号为16.1c2 。, i, \- H; h# {; N v- Z
osd的ID是2
r$ f* O' |+ Y/ z2 V6 |4 Y6 t- I0 T object名字是rb.0.09213.253e1f29.00000001232c
( \ _6 i. ~/ I( z- U! N& y9 g {; N m" A8 `. N
接下来我们找到object 的具体文件所在的位置。' K7 B. `% L: L+ ~
% s( U" G1 g: [. N. I[root@ceph-2 ~]# find /var/lib/ceph/osd/ceph-2/current/6.17b_head/ -name 'rb.0.09213.253e1f29.00000001232c*' -ls
, p6 ?4 [% J2 z- p& Z7 S( n0 O% }0 ~. Q( P5 x0 Z' S- m4 v
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 ]: l/ b: H- R9 ]9 g7 t7 p9 m
# J$ B9 e& \, q& N; o& [8 W9 a9 \7 f% q. q/ p% S
下面可以做这样的事情:
+ g/ ?& R3 q. F) y 在每个系统上检测一下这个object的大小
' y: Y3 l: q, ]3 y& ~( k8 T+ G8 _ 在每个系统上校验胰一下这个object 的MD5值( O" t9 m4 O: G8 O
* h7 U5 n' Y* d/ v, P' b \) d, n/ { p2 u6 o* X- B9 W1 R* x2 P5 T+ \
修复问题:
+ i9 S h2 e1 I/ c2 w" i4 U9 f# q 修复步骤如下:3 z. r1 Z7 z5 C- }3 T5 L- L8 j6 |
停止所有错误object的osd进程。
# m% q' ]$ j+ E- o% N4 @1 F 日志同步到磁盘 ceph-osd-i <osd ID> --flush-journal。) I% |( U8 p3 D) V1 `
移出有错误的object。
- ?0 N$ A0 F. ^& _ 启动OSD进程。
) h: e# h. z9 v 调用ceph pg repair 16.1c2 ( B( v/ b" S: b. M1 u& v' m
|
|