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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-10-12 09:30:19 | 显示全部楼层 |阅读模式
本文介绍ceph集群中所有mon服务均无法启动或者说mon节点所在服务器os全部无法启动情况下的恢复方法,当然,这种极端情况出现的概率非常低,这里前提是要做好mon节点的配置文件和元数据备份,不然就没办法恢复了。我的环境是使用kolla部署的,恢复方法也都是基于kolla工具下才有效,如果采用物理机部署,具体操作上会有所区别,但大致的思路和原理是一样的。. Z+ B$ J0 X* Y3 S6 ?# Z' G

4 z7 e3 b7 r& y! q# b- x0 ?备份配置文件及元数据: l1 ?% ~" S7 o3 G) N! n  r. P

: c8 G7 X! |  S采用kolla部署,默认的元数据存储路径如下
* i4 y  X4 h* f6 W, ]; G, o& w) E- k5 h0 d7 A2 \: G
[root@node01 mon]# cd /var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/3 ]: L# K/ J5 f2 S; k
[root@node01 ceph-172.21.196.11]# ls7 h* j, p+ V; o* |, d0 @$ i) ~
keyring  store.db
+ b4 c. y! P; |( R, `1. A1 |3 W3 r0 E0 S+ V
2
+ C; D  f' d/ A6 A& L3+ e$ b% f& w$ D
4/ D! g, Z0 V/ s& t! J. Z9 v
将该目录完整备份
/ c9 |) n: p5 g1 _( R6 {! `% b0 |. i; ~1 r$ o& ]) n' k
[root@node01 ~]# cp -r /var/lib/docker/volumes/ceph_mon/_data/  /root/ceph-mon-bak/
+ |; ?7 [; \; H" R5 E1
) W: u" ]9 S! m$ p7 M1 x. O0 f2
' ~2 k1 t9 L# C" B4 T* v另外还有 配置文件,里面保存了key,默认路径如下:+ \& j# u/ Q$ `$ N$ T

' |2 |. q+ B! P  I- ^[root@node01 ~]# cd /etc/kolla/ceph-mon/
/ N$ |* V( K$ p& r) q[root@node01 ceph-mon]# ls
) x9 @( A8 W! R1 A$ E* {: b6 [' yceph.client.admin.keyring  ceph.client.mon.keyring  ceph.client.radosgw.keyring  ceph.conf  ceph.monmap  config.json: ?! z# U8 O# H* X
11 z; N8 L) L2 h/ C, y9 L4 m
2) g0 E" J* O/ n5 |& w7 ]
3( a8 \+ K3 {+ D8 x
4* e  C) U$ F8 I
同样,将该目录完整备份
0 N3 K% J; O% ?, z/ b; Y
1 `* \/ W- g' \) L+ R6 T[root@node01 ceph-mon]# cp -r /etc/kolla/ceph-mon /root/ceph-mon-bak/
/ b# R% C. q! G. p9 |3 s) w' @1
; I" E) x- b  ^& T3 S  W2
1 l- R% `1 r7 M8 A! _7 Y+ B0 j4 L我这里所有的相关进程都是跑在docker里,删除mon服务和数据之前先看下集群的整体状态2 \% D4 C0 p. n2 b; E4 B: y+ f
) k( Z8 L( a+ H3 [7 V9 u- i
[root@node01 kolla]# docker exec -ti ceph_mon /bin/bash+ ]! x  o  M2 @/ Y
(ceph-mon)[root@node01 /]# ceph -s
! d. i& J* ?4 j! D4 g- |. v    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd% J7 k4 V/ p+ x4 j  p! ]% S9 x; M
     health HEALTH_OK
" x+ P7 y  R; I: s3 H! M3 C( \3 [) 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}: \! P2 T  Y6 t" o+ S0 ^; Q4 k
            election epoch 44, quorum 0,1 172.21.196.11,172.21.196.124 B( {+ v; }1 Y, ?$ p" n) z, ]# @& L* \
     osdmap e491: 15 osds: 15 up, 15 in
0 u# a, m) _0 X, D  C9 E            flags sortbitwise,require_jewel_osds* h/ ]0 }: [5 a* P: r+ X
      pgmap v679746: 7096 pgs, 25 pools, 184 GB data, 50069 objects. O: y( N( `4 r4 i) _
            555 GB used, 39643 GB / 40199 GB avail2 R" E6 `9 I- ]' P! M+ \
                7096 active+clean4 K* I- N1 }# a- N1 D
1
" r6 G* m. q$ L) Z. x- v29 K5 e- _8 Q3 q7 q3 q+ T
3
% o/ J3 Y! {  M# a* m4 L3 ]4
: j2 M3 c4 y1 D( o( o5 `* a5
9 d0 |  A% ]& S* n- i9 q* \/ A6
8 r4 u" E, T% a# F& G7
) z8 U0 e3 L+ ?' K! u% F84 e' ^0 v+ E; ]7 f* f! d% L
9
( d& @8 q+ i( m6 n  `+ _! g10: k4 |  s* o% Q5 W( ?1 A$ A% v
11, j/ V9 y  w4 z, l9 x! t! G
12
9 }6 y$ s7 {, W8 b; g( T0 L有2个mon节点,15个osd。现在我们将mon数据和容器都删除掉& B2 b3 l  @- M+ t6 I9 I/ \1 ]; \
/ ^) {6 \5 ^$ Z
[root@node01 kolla]# docker rm ceph-mon -f
* m( E. g* F: E5 F0 o8 c+ a" P/ |[root@node01 kolla]# rm -rf /var/lib/docker/volumes/ceph_mon/: m, [! L! O3 ?( z- J/ @, Y9 |- }
[root@node01 kolla]# rm -rf /etc/kolla/ceph-mon/* j5 v1 l$ i3 p$ n2 f( `
1; G/ u1 {& Z/ |! m8 v1 k; q# g
2
+ Y* z" Q4 @0 k0 a! L' t$ F! ^3* ]! o8 i* k+ A2 l. `6 U
另外一个节点执行同样的操作。删除完之后,修改kolla的配置文件,执行部署命令,会发现有错误,在ceph创建keyring时中断了,报错信息如下:. X* _* n0 A) i
- c3 o* @, |- L& M& `
TASK [ceph : Fetching Ceph keyrings] *******************************************/ a; g$ z( A! P1 ?; F# k, t

+ v. _! q! H6 ]7 Y: v6 s: Sfatal: [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”
8 ]  j7 ]" w7 y5 E1 @4 n' F- t. L12 R* o6 u7 J5 B: D. Y0 S$ [2 {
2
! `/ D5 r! s  H3
3 ]5 [3 N9 b! X! F; Z原因是在我删除容器和配置文件后,kolla生成的相关volume是没有删除的。其还存在于/var/lib/docker/volume下。因此当再次构建kolla时,这些已经存在的volume会阻止ceph_mon的启动,会导致上述错误Ceph keyring无法获取而产生的一些错误。因此 删除掉docker volume ls下的卷。再次部署就能够成功的解决问题。, X$ a9 g, V! K

* s6 d: f0 M; k/ x. O[root@node02 kolla]# docker volume ls4 \: D9 O8 L; H% i
DRIVER              VOLUME NAME
' r& R' z# x% q! a  |local               ceph_mon
4 l: X5 n5 Z1 W9 u& D6 \, i  plocal               ceph_mon_config
0 x& j' N" l  Mlocal               kolla_logs" }4 f6 [) M! C2 {; H0 h
local               libvirtd
! t- X- }1 b" `/ g) B) c+ ilocal               nova_compute
/ I2 L$ u9 e8 q% zlocal               nova_libvirt_qemu/ ^5 [& x2 g; Y# X1 n4 B
local               openvswitch_db! l; t0 K0 Z2 l5 F. B, U5 t
[root@node02 kolla]# docker volume rm ceph_mon ceph_mon_config" R8 i# _" i5 q% G
1; o5 N3 o! e$ [# D4 ~6 r1 j& N' ?
2
4 X* n# `# J2 S, p/ ^. ~, a( s7 X3% v) B; p4 G' ~, C/ J+ d
4" v) f3 F4 L* N: x4 b# w
5
4 }8 T9 e9 }: Z6
2 j. u( n2 Z+ l7
' e/ Q9 @9 H7 W; |% k! w. c' f8
! j7 q4 n0 t& ~" P9
4 a' R3 V) |4 `$ ~0 M# z8 s! D10
& I) V1 c5 ~. Z3 F0 f这时再部署即可成功。这里有2个mon节点,我是一个一个的加入的,添加完一个mon节点后,查看集群状态9 P1 t: V% ~" v4 N9 A% N+ E5 W0 g5 o' g
/ W% [( H# O8 j' M/ H4 G
(ceph-mon)[root@node02 /]# ceph -s( q- C0 v8 L3 s1 y
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd1 C; ]. M: G$ ?$ Y# i
     health HEALTH_ERR3 T3 {1 Q* |- n# G/ @( N
            no osds
& v1 z; b% `3 K6 f3 ?+ }9 ~     monmap e1: 1 mons at {172.21.196.12=172.21.196.12:6789/0}/ h- s" d, V( C% ^
            election epoch 3, quorum 0 172.21.196.12
! @8 G* P- F5 f4 m. H) w8 a0 u     osdmap e2: 0 osds: 0 up, 0 in
& r. h7 J3 W5 H2 _% r3 a9 u            flags sortbitwise,require_jewel_osds
5 l/ k7 p1 ^+ f3 }( j) x      pgmap v3: 320 pgs, 2 pools, 0 bytes data, 0 objects: O9 i' K5 k# T" ^  k6 y/ @
            0 kB used, 0 kB / 0 kB avail
+ ]& ~4 [: d; J" g7 J! O" Q, g                 320 creating
4 i; }  x- M3 H& ]# C15 q' z% O" L9 L1 ~
25 s1 V! C7 h8 ^  B
3
2 t9 W' K5 f& l$ t- B2 F/ f4
- f' Y) A; g' ]5! e; g4 k" M2 j: K( y3 {) c
6& r  B) a( a) \: \1 V/ a; j1 l
73 v7 |; O: O& H) U* E
8
- d5 ^  P' E3 O& ^+ Z5 k8 [9
4 s2 E# ?+ K, p: W5 _10
" i; ^, P, h& T& ^9 A113 u8 j7 K3 ~8 \1 @/ L
这其实 是一个全新的ceph集群,现在把之前备份的数据拷贝过来,覆盖新的数据, n( w  h. c! `9 U9 \

. o+ g) L( F3 I: ^[root@node02 ~]# cp -r ceph-mon-bak/_data/* /var/lib/docker/volumes/ceph_mon/_data/- o: b+ S! r! Y9 `7 t- j
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/store.db/LOCK’? y1 I# y1 E  ~7 Z8 J
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/store.db/CURRENT’? y5 V" l+ U7 i9 T/ j6 c, R9 {8 d. G
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.12/keyring’? y
7 H" s2 t8 V3 l; j[root@node02 ~]# cp -r ceph-mon-bak/ceph-mon/* /etc/kolla/ceph-mon/% {3 e! V- c8 ^) j- p
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.admin.keyring’? y
3 B' z& |! a1 I9 @- x) c5 R, s$ Pcp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.mon.keyring’? y' ~' y8 [% {3 Y/ Q' f4 o- y
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.client.radosgw.keyring’? y& z$ l( F$ c1 T( a6 |, w
cp: overwrite ‘/etc/kolla/ceph-mon/ceph.conf’? y
$ Q9 k* s# L1 K6 Tcp: overwrite ‘/etc/kolla/ceph-mon/ceph.monmap’? y5 b$ }* N2 A0 Q) P$ D" T# {
cp: overwrite ‘/etc/kolla/ceph-mon/config.json’? y7 ~# \* J; q7 X
1  g9 N% V" x; g4 G, b
2
0 ~8 f# s+ e8 q% J3
  v' V. Y8 h9 F0 z" A4, l% Y7 r( k) N6 M7 W+ k# x0 z
5
* Y. f; _, K8 g7 Z. Q' H6
0 J/ k$ p: I; ^3 B* C; P- V74 j: Y/ T, M! _4 q) d" s6 u8 r
8
) R6 y  [, U! O$ w9; X* F6 z8 }$ h2 j7 _4 C1 u
10
( D0 A, B4 ~5 l7 Y/ `& A0 c116 i7 O* [: J/ ~7 D
重启mon服务后,查看集群状态
' r2 A* q: m! o. o+ U9 l7 n- J) f# v: A/ h) ~
(ceph-mon)[root@node02 /]# ceph -s
- b' a/ ?/ J' y* U5 |; F# \Error connecting to cluster: TimedOut
/ L' h6 T# T5 y, w+ _9 F1- c" y( Y! Q1 w" y0 }/ N- B4 D
25 i+ u* |/ y+ `" g5 L1 ^8 H
这里只启动了一个mon节点,整个集群状态还不正常,需要把另外一个mon节点再恢复,整个集群状态才能恢复
/ V$ e$ f* x# p6 t
/ x4 ?; M( W) L8 l( S  Z恢复第二个节点的配置文件0 W$ h, K2 S: O3 T1 K) L
* t- l5 J3 O9 c( S% V5 c, u8 _* d
[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/ceph-mon/* .
0 X- C3 Z' z+ n3 t$ e9 lcp: overwrite ‘./ceph.client.admin.keyring’? y% }+ f# Q6 [/ Q$ `
cp: overwrite ‘./ceph.client.mon.keyring’? y
6 ~; {: o2 t; ~# Ucp: overwrite ‘./ceph.client.radosgw.keyring’? y# T6 w+ N& r& L% m9 f2 n' H' O- H
cp: overwrite ‘./ceph.conf’? y
0 Y5 R6 N8 s2 i+ acp: overwrite ‘./ceph.monmap’? y
( M- b0 n, S( u- v+ b! j: Ycp: overwrite ‘./config.json’? y
/ B4 |, ?) \! z9 S& F6 t3 V[root@node01 ceph-mon]# * G& z% L, f* {' w+ V' [( H
[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/_data/0 C% k2 [; Z. q9 Y; P
bootstrap-mds/ bootstrap-osd/ bootstrap-rgw/ mds/           mon/           osd/           radosgw/       tmp/           
& C& M) [2 L& b. Q# `[root@node01 ceph-mon]# cp -r /root/ceph-mon-bak/_data/* /var/lib/docker/volumes/ceph_mon/_data/
8 }- `4 C7 g! h. n# S# xcp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/store.db/LOCK’? y' w' ~9 m( E6 M7 V$ u% F
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/store.db/CURRENT’? y$ B  E$ i" ^0 ~0 J; e
cp: overwrite ‘/var/lib/docker/volumes/ceph_mon/_data/mon/ceph-172.21.196.11/keyring’? y4 p3 g5 Q2 y* z& i; l# w
1
6 l+ i1 x7 l% y% o2
( V9 _2 |$ k# k' e& s) v3 a' d3
0 c0 n6 }1 R" k; h- o, e: Y4( s' w$ n3 m1 x% F
5! }2 h) f. ?# J
6- \$ U: Y6 I2 Z
74 H+ Y) U, c- O. Z$ k8 T
8
* N  x% i/ `5 x9, R9 l* x1 V  d, B
10
  K0 z: l6 [) y0 b6 Y, j1 ~11
" R: }4 f4 q- B, h12! o. d3 d# ^3 m3 U1 n; @
13
% V% a9 v. Q  P. Z9 F  }14
' D1 P  w- K& n. t- m4 K- n15/ l- _6 h$ G7 w2 G1 _, t, w& L
再次查看集群状态
2 U; M3 j5 @& M  x- J- c# j5 k4 O: l! [. Q; S0 @' [- U! A* `; N/ X
[root@node01 ceph-mon]# docker exec -ti ceph_mon bash
: ?/ E# g5 ?+ H& _# q(ceph-mon)[root@node01 /]# ceph -s' `  ]7 e- T4 O7 ?7 F
    cluster 84ff3941-2337-40ca-bd76-fb3be71b0fdd9 S6 T: L* ?) f( L; n/ c
     health HEALTH_OK
& `. p& w6 J: J5 y" i2 x     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}
# B' |& Z- _; d. ?; n            election epoch 44, quorum 0,1 172.21.196.11,172.21.196.12
: t! V) `+ i" c$ H9 ?( g     osdmap e491: 15 osds: 15 up, 15 in
3 \- i. x# `+ Q  }& W+ C) |            flags sortbitwise,require_jewel_osds
" p% z1 T( j, z6 ?+ u' x      pgmap v679711: 7096 pgs, 25 pools, 184 GB data, 50069 objects
+ x, F: V# O% t- R+ h% g# {9 w  v            555 GB used, 39643 GB / 40199 GB avail
) A2 b, o% [9 Q3 K# U5 p                7096 active+clean
" }5 [1 U! Q- \' V. D* O9 d% |2 y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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