|
|
从一本书中了解到pg修复过程记录下:1 W* [1 q- r: m0 q, A' n
ceph 的scrub/deep scrub 是集群自带的自我检测并修复的功能,能够实现对object 进行自我修复,下面来试试手动修复。
9 X+ T' g- I9 l. U2 H
6 R# N: L3 T% y& s* d首先找到PG所在位置:
8 }/ s) l( Y" y: c1 B[root@ceph-1 ~]# ceph health detail3 o6 N# b( b7 ?
HEALTH_ERR 1 pgs inconsistent; 2 scrub errors
( S {$ E p K; l& xpg 16.1c2 is active_clean_inconsistent ,acting [2,5,10]
" c0 f& Y. a' `+ O3 u5 n; F0 H `2 scrub errors
& F9 C. W8 H0 k" w9 S8 e/ z2 ]
4 L* J- m9 Q0 x) G" B$ e5 q' t9 x8 ~9 C1 y+ Q1 x8 U: j; G
如上所示,PG 16.1c2 当前的位置在OSD 2 5 10 上。
$ F) K8 y% Y2 ~; G$ \这时可以直接通过ceph pg repair 16.1c2 直接检测并修复,下面我们可以来挖得更深入点。
' \1 R) p8 P4 V& V O" ^2 T; Z, s
再次 找到问题所在
5 ?" y& N+ b2 ` 在相应的OSD日志里,找到错误的提示,如 grep -Hn 'ERR' /var/log/ceph/ceph-osd.2.log 。如果日志已经被切割了,用Zgrep 代替3 H5 S3 Y F1 \# B: a- z4 h& e
Zgrep 可以对已经压缩的文件进行正则匹配。
8 n4 D, V; }) g7 l! Z# |3 _7 u8 y5 ~. }% Y- X0 |" V* ~
log [ERR] : 16.1c2 shard 2: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 3607295895
- ^( v/ L* S; S9 Q. K7 Zlog [ERR] : 16.1c2 shard 5: soid 98cbb1c2/rb.0.09213.253e1f29.00000001232c/head/ /16 digest 0 != known digest 36072958959 L; H. W x* G' G6 i5 b
& p2 Q0 C9 k0 i& X; C8 x6 C; l# [; E5 L* }' |7 y0 Z# \
从日志看,object 的摘要(digest)本应该为3607295895 ,但实际却是0。- g4 L* @ V p0 J, N# Z( p* h0 a1 b
9 f0 Y2 b3 n: { r/ f; R/ W- X' s4 l! h) R; d9 P/ X& \
最后 找到对象$ F+ E6 _: r" x- X3 o+ H
从日志里,我们已经获得如下信息
2 W ]$ g9 q2 a ]7 L1 ?/ k. f3 t
/ L8 C9 H9 R2 e: S9 F' [- X 问题PG是 编号为16.1c2 。
" E) m) q' L+ \+ ~9 S- r F osd的ID是2
4 F9 T" ?, r0 e+ o, u5 B object名字是rb.0.09213.253e1f29.00000001232c
2 q! T6 y- t4 z
. p: |, H9 C6 n( z接下来我们找到object 的具体文件所在的位置。' ^4 }* G Z' a/ @5 `0 r: l& q
, a% e. k" _/ Z2 I% N[root@ceph-2 ~]# find /var/lib/ceph/osd/ceph-2/current/6.17b_head/ -name 'rb.0.09213.253e1f29.00000001232c*' -ls' \' R0 @3 Y5 a3 h: u
! h/ f0 d# c, `
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
' S. S+ _, i0 d r) ~$ e. m4 R' G' E4 L6 a6 l/ w3 m3 q
b3 T' ? f. k0 Q
下面可以做这样的事情:5 z4 Z( i2 b. p" V( ]
在每个系统上检测一下这个object的大小4 ]) M5 J$ H: |3 L- b2 ~/ K
在每个系统上校验胰一下这个object 的MD5值) u$ E3 }* s: o- z# A' m
& F2 e. V, v: d! {, ] h$ u/ q
1 g8 m3 u' Y, _修复问题:5 j) C6 S' D+ U# S
修复步骤如下:2 N. i1 a! j" j( r' T6 U
停止所有错误object的osd进程。
1 N4 m2 U5 u1 y: W- T; T 日志同步到磁盘 ceph-osd-i <osd ID> --flush-journal。
' s, J& j* `! M# K& e! @* f7 K 移出有错误的object。
$ b' v6 V7 x# h4 z! c+ v3 Y 启动OSD进程。
& K' i7 t2 F& e 调用ceph pg repair 16.1c2 6 B- a& Q0 |' H1 B7 b
|
|