|
|
从一本书中了解到pg修复过程记录下: e; A4 f t& ?+ _
ceph 的scrub/deep scrub 是集群自带的自我检测并修复的功能,能够实现对object 进行自我修复,下面来试试手动修复。
5 K8 N, T) }, p0 G4 y. e# b' A S
首先找到PG所在位置:/ N1 f* B: s9 \9 i* ?5 X
[root@ceph-1 ~]# ceph health detail% ^" |% J" j4 ?! Z$ J( d( m
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors" n7 Y5 E3 a9 U- E6 q7 a* W. C7 h
pg 16.1c2 is active_clean_inconsistent ,acting [2,5,10]
- i$ U2 A6 Y; d. y l$ W2 scrub errors
, q; \7 ]* x5 N8 G8 a6 ?: f( J0 v& e' ^0 H0 x* J8 |
2 B1 f; X8 W6 u& Z+ D- O0 |
如上所示,PG 16.1c2 当前的位置在OSD 2 5 10 上。
/ I$ ~, O! x$ o/ K: l- A这时可以直接通过ceph pg repair 16.1c2 直接检测并修复,下面我们可以来挖得更深入点。% D* }2 j+ M$ t; j3 {% F9 r3 \
2 P7 i$ M c# f- s' x4 [再次 找到问题所在- Z1 B- _8 j' C/ F8 _
在相应的OSD日志里,找到错误的提示,如 grep -Hn 'ERR' /var/log/ceph/ceph-osd.2.log 。如果日志已经被切割了,用Zgrep 代替
' ^3 N A& ?& n% aZgrep 可以对已经压缩的文件进行正则匹配。
! X T' I9 h6 s3 d
( z- H9 N/ {- A7 I9 R/ W5 @. wlog [ERR] : 16.1c2 shard 2: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 3607295895* P; r* _$ U @ j; j
log [ERR] : 16.1c2 shard 5: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 3607295895 q+ N. P- s, Z! O3 T
/ b; `5 e8 r1 r' _3 q
$ V0 ]. G7 R3 Q9 X7 h从日志看,object 的摘要(digest)本应该为3607295895 ,但实际却是0。
! S2 i) d) |& Q: u j0 `, S
% S* _. B t: L* [2 B3 X
: R4 @3 i. H- v4 {/ n最后 找到对象
" K; \8 i7 \% z# q& i从日志里,我们已经获得如下信息- J: M4 E8 B7 Z! |8 ?3 K
E3 ~! w, l0 b5 g: U3 r: S
问题PG是 编号为16.1c2 。
" e: E) u5 i* h! b5 Y' s osd的ID是2
4 B$ K8 U3 {3 K3 w+ N6 }+ V+ ]4 g object名字是rb.0.09213.253e1f29.00000001232c
' ]4 P7 [, \; P# T0 z2 Z, Y1 a" X$ U* i- s5 u( \8 I
接下来我们找到object 的具体文件所在的位置。
8 @2 f1 b0 A. ~' q* a7 q$ [$ f' P1 n/ p1 P+ I( C" f
[root@ceph-2 ~]# find /var/lib/ceph/osd/ceph-2/current/6.17b_head/ -name 'rb.0.09213.253e1f29.00000001232c*' -ls1 X, v0 E& L4 y k% X
5 v& p8 m6 V Q9 }; k33581488 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
, e" A* P% q# c3 e0 @6 b+ g3 `3 P
H$ r! O; E4 ^, x3 f, B& j, _& {
下面可以做这样的事情:
+ P; S1 F+ i5 G7 b: u, c 在每个系统上检测一下这个object的大小" c' [( H4 w% u+ N9 F) g
在每个系统上校验胰一下这个object 的MD5值
, V, w3 g3 N6 g1 E- }5 H8 @- h+ c! e' y' u2 K: x
: z' o! e8 X( Q% W$ Q修复问题:) X8 l% Y* B H% f- }
修复步骤如下:+ k! D O: j7 o3 j/ ^
停止所有错误object的osd进程。
# p+ U6 C( E/ N: S1 o# q 日志同步到磁盘 ceph-osd-i <osd ID> --flush-journal。 S8 F" t. s" }4 u9 A7 A
移出有错误的object。
: }! @" y- e2 m- e2 s 启动OSD进程。 v6 e0 w3 M% p8 N2 J$ ^
调用ceph pg repair 16.1c2 3 b4 w) o2 }* M+ E9 B1 j8 x+ t
|
|