找回密码
 注册
查看: 6466|回复: 0

CEPH集群MON全部挂掉后恢复方法

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-10-12 09:30:19 | 显示全部楼层 |阅读模式
本文介绍ceph集群中所有mon服务均无法启动或者说mon节点所在服务器os全部无法启动情况下的恢复方法,当然,这种极端情况出现的概率非常低,这里前提是要做好mon节点的配置文件和元数据备份,不然就没办法恢复了。我的环境是使用kolla部署的,恢复方法也都是基于kolla工具下才有效,如果采用物理机部署,具体操作上会有所区别,但大致的思路和原理是一样的。! z. n, {% g8 V3 s
9 K4 y  P# G# D/ D5 K  k, y  S
备份配置文件及元数据
9 k1 a+ ^3 E) H  T
; ?% i8 C' P% b采用kolla部署,默认的元数据存储路径如下; g2 x  r  j% Q

1 s; V. Y; Z  P( P( m( y* J[root@node01 mon]# cd /var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/
3 I: _- ]  v, C' \9 a) ^6 r[root@node01 ceph-172.21.196.11]# ls& a) w: V& @5 G! G, l. _7 H  G! P
keyring  store.db
5 f) R* Q3 `7 Z5 X- K" y+ q1/ ^4 [" D9 x6 j# _# b0 u
2( A0 `; \* y: L
31 ?# b' y9 ^. `' E8 f4 N0 G
4* j! C" J( j# d3 Y; E
将该目录完整备份; E& P* A9 z6 `" ~9 H

1 G6 j4 Y* c) ~" t! i. V[root@node01 ~]# cp -r /var/lib/docker/volumes/ceph_mon/_data/  /root/ceph-mon-bak/
& s1 I) }  f* }& Y' R1
7 J$ x1 `( H) s6 w  I$ u21 O) Z  p# f5 u& v! g
另外还有 配置文件,里面保存了key,默认路径如下:) b9 ?$ I2 @6 \( q$ J% J
" p, H$ H) u8 i( r! y% |5 ~# o+ N
[root@node01 ~]# cd /etc/kolla/ceph-mon/
" e& ~* R+ A: x+ n[root@node01 ceph-mon]# ls1 u+ ]& y: n4 E" D; P( ^6 x
ceph.client.admin.keyring  ceph.client.mon.keyring  ceph.client.radosgw.keyring  ceph.conf  ceph.monmap  config.json. S& R& u! @) |7 T) g  L
1  X( r: m1 R% I) q
2% _1 C' G. U  q
3
( K4 [* ]) ], d! ?3 t5 f4 n% ]4
" ?6 o3 [0 O% s; Y/ x7 Z$ w! [' B同样,将该目录完整备份
) C' m$ A, g) R, ~7 C
9 C( z" x" j/ o3 [$ r8 Y/ }[root@node01 ceph-mon]# cp -r /etc/kolla/ceph-mon /root/ceph-mon-bak/# }* Y4 t/ }1 M$ v
1
5 ]3 X6 T! I0 q0 H/ s# ]29 A0 H) e0 r1 ?1 C+ J
我这里所有的相关进程都是跑在docker里,删除mon服务和数据之前先看下集群的整体状态  P: V# D: r; v1 U' C& C7 `
5 l. k" M# [( x+ O- j5 s! w1 f: ?
[root@node01 kolla]# docker exec -ti ceph_mon /bin/bash/ e6 _3 |3 I) l* o3 m4 A( m* w
(ceph-mon)[root@node01 /]# ceph -s
, Z+ ^# X6 P+ W. U4 O    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd  e, m" O2 f- b( D
     health HEALTH_OK
. ~2 l9 B( n# g) n  y     monmap e4: 2 mons at {172.21.196.11=172.21.196.11:6789/0,172.21.196.12=172.21.196.12:6789/0}
, `& H8 a$ A1 Y$ V            election epoch 44, quorum 0,1 172.21.196.11,172.21.196.12; L1 [: t# @2 d; `* a4 S8 T  q  q
     osdmap e491: 15 osds: 15 up, 15 in
- y) O; v; L' y# J3 a! B; ~2 F7 Z            flags sortbitwise,require_jewel_osds
& t7 _) }6 g" ]: C* m2 R      pgmap v679746: 7096 pgs, 25 pools, 184 GB data, 50069 objects
, N" d1 S" \; O" ^            555 GB used, 39643 GB / 40199 GB avail1 C( J6 B9 x* {( N4 i0 w: Q
                7096 active+clean
. W) F1 X8 w4 i/ I. g5 S9 {2 q1! V# I+ |" a5 c( f# w0 S7 \
2
  i8 w) x- ?" |3' U5 F' [+ p5 j
4- ~$ J( G: k9 G
5
, g+ s  c) a% p1 S9 s68 n% w9 {4 U% H# U" K
7
$ ?$ N% x" X. P( p- y8. \7 i) T8 C# w/ s  S, T
9
: d7 {. V$ H+ ^1 }6 \& Z. W! a) m10
6 A) q; \+ V! ]+ f8 l0 a  U114 K- C" a. a( _  B6 B- v% r
12* Q/ a( a" S% A- U# T
有2个mon节点,15个osd。现在我们将mon数据和容器都删除掉
5 `5 F, h# |/ v9 @7 A0 H3 r2 m6 N
# U$ M7 F( F% o6 o[root@node01 kolla]# docker rm ceph-mon -f
* f& w/ G9 Z) a+ k1 u[root@node01 kolla]# rm -rf /var/lib/docker/volumes/ceph_mon/
6 F$ `$ L3 l& |8 ]8 z! G[root@node01 kolla]# rm -rf /etc/kolla/ceph-mon/" _; c5 w; N$ O' Z+ G
1
1 r/ o* I% Y" b7 o+ w- k2
' N' n' a+ q# V' S3% `9 L, I* m# f3 k
另外一个节点执行同样的操作。删除完之后,修改kolla的配置文件,执行部署命令,会发现有错误,在ceph创建keyring时中断了,报错信息如下:  J1 |3 g7 H6 @2 v" J" u
- S# Q4 I/ B  c5 B
TASK [ceph : Fetching Ceph keyrings] ******************************************** M$ s  q& y) d2 r4 c) n$ a
1 A+ y9 @9 ^# G/ S2 n
fatal: [controller01]: FAILED! => {“failed”: true, “msg”: “The conditional check ‘{{ (ceph_files_json.stdout | from_json).changed }}’ failed. The error was: No JSON object could be decoded”
7 j0 t  a3 v* c1
5 J9 d0 W! b! w+ k2 x2
6 ~. w; \' X& V; G8 J8 h+ g3% c' ?1 J2 [# i' g
原因是在我删除容器和配置文件后,kolla生成的相关volume是没有删除的。其还存在于/var/lib/docker/volume下。因此当再次构建kolla时,这些已经存在的volume会阻止ceph_mon的启动,会导致上述错误Ceph keyring无法获取而产生的一些错误。因此 删除掉docker volume ls下的卷。再次部署就能够成功的解决问题。
3 ^' @: r; I0 T- G6 A$ x/ W$ b8 `2 H8 @4 A8 d& z
[root@node02 kolla]# docker volume ls
9 k! E0 h$ [/ i* s5 @6 rDRIVER              VOLUME NAME" s" J: N+ b5 k  H3 `
local               ceph_mon
# z8 y) Y8 N8 B: P/ Z" w, `$ }local               ceph_mon_config& j( D! ^: M$ w$ X; _' e! V
local               kolla_logs* p; _' `+ R1 |8 j( |
local               libvirtd2 C9 m, t; ~1 n# O' A* F
local               nova_compute
. F' ^3 M9 Q! y" |local               nova_libvirt_qemu' \# n# T6 I( r9 T. F* m8 `
local               openvswitch_db
! ]/ t; J0 B: e0 d  n[root@node02 kolla]# docker volume rm ceph_mon ceph_mon_config# ?! r7 F2 t& @3 k# X- g
1
( L' S7 K% s- I2
( M  Z- E( V7 r! @* G9 b1 P. o34 ?9 ~  B; R' @4 G2 e3 F
4
+ E' g* a! w, W$ P$ a9 z, c5$ s# G3 c' |; U& ~$ T
6
# Z, m  D* x, z7
. f( G& u2 U2 A' [8
8 t0 r) d7 z2 R8 u" _9
0 F* m6 B& }! d& [* Y6 B10
( [! E0 g3 g8 j/ M) v* Q这时再部署即可成功。这里有2个mon节点,我是一个一个的加入的,添加完一个mon节点后,查看集群状态
- S# b/ o  ?  X3 G1 U' N+ A$ w% @$ ]
(ceph-mon)[root@node02 /]# ceph -s+ P) Y7 P1 [0 j0 C3 ~3 R
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd
$ D* G9 _( C. N' d+ V" t8 u     health HEALTH_ERR
" U$ ]- c. D) j7 G            no osds" {# m4 L2 ?) q/ ]
     monmap e1: 1 mons at {172.21.196.12=172.21.196.12:6789/0}
- ]" U: l0 I  H( s, |! b            election epoch 3, quorum 0 172.21.196.12
; \; U! x/ D1 D2 w/ K  O     osdmap e2: 0 osds: 0 up, 0 in) K3 ~- n" K+ F0 Q  a
            flags sortbitwise,require_jewel_osds! I7 B, W) [- O+ }  E# D
      pgmap v3: 320 pgs, 2 pools, 0 bytes data, 0 objects" }; D8 i/ _' z$ {: i$ A7 b9 s; S
            0 kB used, 0 kB / 0 kB avail
' W. q. ?( F( s0 X                 320 creating
% H9 Y( _' f' f# V3 u- a7 P19 j/ p: h3 o( |% ]7 d
2
( [  d! I3 G+ D6 d36 T7 C  _) \) [$ J
4
4 u" Z2 O5 j1 i& e5& ~4 O9 \$ k) e6 ~  A! V
6
5 `3 I; n; p5 p; Y4 G6 u9 t/ ]7% b2 n) G6 j6 [1 s9 F
8
4 ]4 N9 h: R8 P; r) i9
9 e- J) H9 t3 f! |* [' i10- I' m8 d; [  @$ m6 B$ P6 ~0 {4 N  }0 _
11/ G, t" b& F) D7 u7 {) T3 I' l1 t
这其实 是一个全新的ceph集群,现在把之前备份的数据拷贝过来,覆盖新的数据
, E6 r2 [* O0 {# B* r) n9 V- a
% E- I$ H0 P% I[root@node02 ~]# cp -r ceph-mon-bak/_data/* /var/lib/docker/volumes/ceph_mon/_data/1 J( E' {3 e5 s9 @. e
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/store.db/LOCK’? y
. k4 y; Q: z" i$ V7 L: y4 Ccp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/store.db/CURRENT’? y
7 P  i8 R# |7 }0 N' Qcp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/keyring’? y
4 B: A8 H1 E6 Z7 u- h* }6 P[root@node02 ~]# cp -r ceph-mon-bak/ceph-mon/* /etc/kolla/ceph-mon/6 u  [, x  S& M0 {4 O: P0 q
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.admin.keyring’? y
: o' e/ r% j* {cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.mon.keyring’? y
) Q$ d+ w, k! B# Z3 ]cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.radosgw.keyring’? y2 W) \; G* ^7 `6 H7 ?, Y7 d
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.conf’? y
: r# M6 U4 }, mcp: overwrite ‘/etc/kolla/ceph-mon/ceph.monmap’? y+ O1 g& t- q) P3 R1 |' z
cp: overwrite ‘/etc/kolla/ceph-mon/config.json’? y
4 `( S  J& Z# s2 W9 Y1 T1' V, E# Z) i7 P5 u2 x# \
2' ~8 k' @8 J$ S7 @" N, b
3
( \: S3 X, B3 c* ~9 Q$ O& h4" W  s. R( v  ~+ U9 I4 q/ N
5
4 T# _# b% Z1 W# v1 R, N" K- m6 \6
  y7 d# e" ]9 c$ P8 V8 q7  F5 x* H- P1 a' t
8
8 Z  U, Z3 U- _6 R1 `& L8 T, `9' x3 N1 x1 s9 [. A" t: l5 D, f, }
10
1 ~+ h- b7 p' A- v! O  n11
4 I' n$ E3 W$ |" _重启mon服务后,查看集群状态
' l4 e! ?( R, ^" T2 K' \; j. {1 I! |
4 |- h6 H7 Y. z- g/ O/ c; l, T' ~(ceph-mon)[root@node02 /]# ceph -s
+ m4 e0 v; `) y% vError connecting to cluster: TimedOut" Q7 U1 q6 i& i3 s3 J) b7 z+ B
1
! g" x6 C& ~" S6 Y- n* ?2  r  I/ J! F% U# a7 e; l
这里只启动了一个mon节点,整个集群状态还不正常,需要把另外一个mon节点再恢复,整个集群状态才能恢复5 g" D+ }6 V0 E" F( P) G$ O# v* K* V, `
& n; j; l; M/ n5 g, {/ y! S" J
恢复第二个节点的配置文件0 m6 f6 ^) g' E/ o3 [, s* |

$ Y) F/ E) |9 z0 R1 O, P# z[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/ceph-mon/* .
# M) Y" z$ d- a# ^9 icp: overwrite ‘./ceph.client.admin.keyring’? y
! S) E6 V. p& Y2 k  z- x3 Qcp: overwrite ‘./ceph.client.mon.keyring’? y  M/ L$ Q( u+ m+ n
cp: overwrite ‘./ceph.client.radosgw.keyring’? y
2 y9 B( D7 i1 n8 kcp: overwrite ‘./ceph.conf’? y, h( Q0 c* m3 `/ e# B
cp: overwrite ‘./ceph.monmap’? y
- f, q9 u8 \% ?( H* l/ Xcp: overwrite ‘./config.json’? y
. x2 [0 M7 _, h# c0 u5 r[root@node01 ceph-mon]#
, j! L1 b. |9 J* [( B. p[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/_data/
0 k, z% P$ g6 f7 Z" `: |; [9 bbootstrap-mds/ bootstrap-osd/ bootstrap-rgw/ mds/           mon/           osd/           radosgw/       tmp/           % Y8 B  r) }1 B! I. T. [* F
[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/_data/* /var/lib/docker/volumes/ceph_mon/_data/' b  H7 e3 A1 I, u7 U7 Q' ~
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/store.db/LOCK’? y' h4 v' K. X+ P- J
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/store.db/CURRENT’? y& B: A( A' ?, N+ c7 x
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/keyring’? y; ?1 M% L" R$ y: t5 r  [) [
1+ q) K, m: v4 Z3 ~: S, {+ D
2; A" }9 T* V9 m9 {4 O9 [
3
  [( H/ _" {8 @* |4
" X: `5 s& b3 Z* `5
* F& d" m! q) h# T/ R# m6
$ R( Z  H+ _! l) e* @/ `70 Q& o6 y+ m7 m+ c4 ~3 \  ^
8: I; |4 y2 g  N- l* b0 x
93 m+ [: X; B, g- U& C' F$ P
10* ]' |' {/ Z7 d! m9 c. P8 z' k
11
8 O1 c/ Q% i! a7 Q: v  T9 Q12
' F" U6 ~! j" G3 t9 n+ f/ B$ [13  c1 X5 d- j! |' h2 {, [
14
' ~/ Z+ E- t; w. T; O3 L* v' Z15) d( t1 d- q; O
再次查看集群状态  C% n/ _1 W( T/ {
2 m' l! q  x1 R6 X
[root@node01 ceph-mon]# docker exec -ti ceph_mon bash
2 S5 F- y. i. E(ceph-mon)[root@node01 /]# ceph -s4 U; H- d3 R8 g, k
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd( M8 ?& x' J6 {+ S
     health HEALTH_OK! g5 ]% `. q2 l$ c' _6 Z
     monmap e4: 2 mons at {172.21.196.11=172.21.196.11:6789/0,172.21.196.12=172.21.196.12:6789/0}: [# K7 _2 P2 M! D7 H
            election epoch 44, quorum 0,1 172.21.196.11,172.21.196.12
9 d2 {! _1 \) k" a     osdmap e491: 15 osds: 15 up, 15 in; C; O4 H$ Q& ?; I/ C- j4 f
            flags sortbitwise,require_jewel_osds
! g: @9 ]9 K( n' F5 c% i! s/ B      pgmap v679711: 7096 pgs, 25 pools, 184 GB data, 50069 objects. b' Y, s- |1 y0 y' N/ M
            555 GB used, 39643 GB / 40199 GB avail- e& Y8 {+ O2 f) l7 X
                7096 active+clean
8 I. {" U$ ]( R3 E/ K" L- Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:59 , Processed in 0.014640 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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