|
|
背景
, A+ L! C8 J9 Z7 @8 N' H最近公司服务器搬迁至外地机房,服务器中包含ceph存储集群,迁移到新机房需要整体修改服务器ip,因此mon节点的ip也将被修改,发现官网有修改ip的文档,正好参考官网记录一下。官网提供了只更改同一网络里的mon节点ip以及ceph集群更改到不同网络的情况下修改所有mon ip的方法。, u- n) Z7 } Z% _, E- S
0 }$ w1 f! K* B$ q, j修改同一网络里的mon ip* G! K; V& y- e6 E
这被官网称为是一种正确的方法。仅更改监视器的 IP 地址ceph.conf不足以确保集群中的其他mon收到更新。要更改监mon的 IP 地址,必须添加一个具有要使用的 IP 地址的新mon节点(如添加监视器(手动)中所述),确保新mon成功加入仲裁;然后移除旧 IP 地址的mon。最后更新ceph.conf文件以确保客户端和其他守护程序知道新mon的 IP 地址。- ~7 e! g# L0 p; [# O9 i1 ~
6 ?0 }0 B% |' Y" V. _3 U+ J) q手动添加mon节点
5 {' y @' U5 l2 ]4 c在目标节点上,新建 mon 的数据目录。{mon-id} 名称自己定义 。
# t. k0 G1 O5 H' d- R5 B% s0 c, j' J8 x/ o4 k6 e9 V
复制
* P3 X- A# H' b2 u$ Dmkdir /var/lib/ceph/mon/ceph-{mon-id}( W; E/ ~2 _' L4 {$ D$ S0 q
mkdir -p /var/lib/ceph/mon/ceph-`hostname -s`2 {8 R9 v' R/ M0 S
获取 mon 的 keyring 文件,保存在临时目录下。4 Q6 f+ P0 g" d0 ?
* |0 b0 D$ \1 \$ K0 K( H* m% W复制& y; L6 O2 t q" P0 L* G5 w
ceph auth get mon. -o /tmp/ceph.mon.keyring# y% m7 K4 l. L1 C
[root@ceph1 ~]# ceph auth get mon. -o /tmp/ceph.mon.keyring
5 v+ G6 i& Y, @获取集群的 mon map 并保存到临时目录下。( H& B+ Q3 b8 s1 h$ F2 @% c
+ t9 x: y7 S* I. Q$ K) z+ Q) ~
复制
: S1 x6 y4 J4 K; a$ nceph mon getmap -o /tmp/monmap2 T! T$ V" P# E7 Y/ _
[root@ceph1 ~]# ceph mon getmap -o /tmp/monmap ) J2 W; d; P$ B+ q8 g/ L. M: {5 G' k
got monmap epoch 35 ?: A9 E4 H- T; o
格式化mon的数据目录并指定上面两步创建的monmap和ceph.mon.keyring文件路径
- g/ Y3 {, {, A. O[root@ceph1 ~]# ceph mon dump `1 C- [, K3 e* s: M
dumped monmap epoch 3
) p& t0 b' @( s H8 Q7 e G0 Tepoch 3) b. y) R/ F9 f6 H; S7 H
fsid 9c7a1c4a-e1e9-4ebb-9254-c7dbaf30a23f( a6 K3 r7 F8 A9 F f
last_changed 2022-10-17 10:51:14.554172, M8 w. ?2 c5 N2 {
created 2022-10-17 10:46:00.900267' R- C6 u8 o8 m1 E
min_mon_release 14 (nautilus)6 U4 J* Z5 o+ W7 i5 u( e
0: [v2:192.168.120.26:3300/0,v1:192.168.120.26:6789/0] mon.ceph1
" Q+ u# `3 U; q% x& {, S1: [v2:192.168.120.27:3300/0,v1:192.168.120.27:6789/0] mon.ceph22 H8 a) Y: n# {: h% A9 m6 I4 l
2: [v2:192.168.120.28:3300/0,v1:192.168.120.28:6789/0] mon.ceph3
# z1 }5 x, B8 \, P2 a. N' V复制; w6 W$ }" f4 W, M' i5 K
ceph-mon -i {mon-id} --mkfs --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
) R2 x$ q5 L* q6 n' [) N* F9 a2 I0 |' ?9 J- j/ \4 Q
启动节点上的 mon 进程,它会自动加入集群。守护进程需要知道绑定到哪个 IP 地址,可以通过 --public-addr {ip:port} 选择指定+ h- |! V: r" g5 W* D
2 k, B, y U' d" ]- a
复制
4 i+ i* q9 p2 H3 D0 M7 r1 Hsystemctl start ceph-mon@{mon-id}
) ?& y) {( t4 Rceph-mon -i {mon-id} --public-addr {ip:port}5 C- L4 C! n5 n
[root@ceph1 ~]# ceph-mon -i ceph1 --public-addr 192.168.120.265 y; v6 a) c% S9 u! X8 l
+ c. e2 \5 H, t* {; q1 s
删除mon节点
0 G2 B9 | v8 P! p1.停止mon节点
3 ]/ _* L, }; i0 G+ O
: O* F2 i! B' d% o复制
% y: }. D- U9 l. isystemctl stop ceph-mon@{mon-id}
- g: m W* p: I/ T' |; ~systemctl stop ceph-mon@`hostname -s`.service . ~! g$ O9 V( ^7 W; ^. A( _7 k
2.从ceph集群移除mon节点
8 t# |/ r! \9 H/ H4 R. b6 U5 g3 O& f+ V/ [0 X' f
复制
& H; k1 ^! x! _. p, @6 j$ L/ fceph mon remove {mon-id}
S! E$ ~8 @7 |9 U6 g! T* i[root@ceph1 ~]# ceph mon remove ceph1+ P1 A. e0 B' U7 t
+ T5 J- k* J: U$ ?; l, J8 r3.在ceph.conf配置文件中移除mon部分( t7 I! K! a: d- R! T% [/ |' p
+ D# K* a. z4 o/ G! K修改所有mon节点ip* O6 L! P- x: m6 m9 r4 n
如背景所说,我们刚迁移了ceph集群的服务器到其他地市的机房。这需要改变mon节点的所有网络。在这种情况下,解决方案是为集群中的所有mon生成具有更新 IP 地址的新 monmap,并将新映射注入每个单独的mon。我这里是将192.168.28.0/24网段变更为192.168.244.0/24网段。
+ ~% W4 f& j9 u2 ?) U
1 V1 s/ [, |4 `# T获取monmap,如果此时已经连接不上集群了可以在mon节点上使用第二条命令,并指定{mon-id}; L' t: G5 @( p/ W1 c7 h% O" f R
& }% M* R$ _- [2 B8 i
复制4 G4 q* Y* M( u+ F$ y% b
ceph mon getmap -o /tmp/monmap
. N& u3 S% m/ hceph-mon -i node3 --extract-monmap /tmp/monmap
- c/ w7 n' l: d" r: W' q
' M( Q5 A" `! w7 j' w$ imonmap内容如下:& L: P$ z3 R3 o2 N! h. ~: B3 c: }4 w
7 L2 h2 o( T! s s: s5 d; w- E1 r
复制
/ I. E8 B2 P2 \9 cmonmaptool: monmap file /tmp/monmap
7 G5 j: }% j$ {8 k2 L& kepoch 7
+ m9 k4 E7 z- _% ]% M2 p8 o. |# i' bfsid 9c079a1f-6fc2-4c59-bd4d-e8bc232d33a4
' p9 B$ b# F, Z9 Q7 W3 q% \last_changed 2022-10-08T10:00:04.055141+0000' r( Q+ m! q1 P9 x' T- u2 X
created 2022-10-08T03:45:47.301186+0000
$ V4 p$ n- U6 Z: f, mmin_mon_release 16 (pacific)
! P9 \$ E7 f! S7 U' E/ D1 gelection_strategy: 1
3 P2 V2 a: Z# d1 l- Q1 _/ x3 c0: [v2:192.168.28.159:3300/0,v1:192.168.28.159:6789/0] mon.node16 L( C/ @* `2 t* |
1: [v2:192.168.248.160:3300/0,v1:192.168.28.160:6789/0] mon.node2$ x7 n% p v; T& O, w
2: [v2:192.168.28.161:3300/0,v1:192.168.28.161:6789/0] mon.node3 Q9 g6 w) ^! {; m) @8 Y( M
7 c4 P! u0 O+ P% f# G: `7 P
删除现有的mon:
C% x8 B; N) l3 Q z' q( `7 X8 \; H% x4 m$ U! A' L
复制
0 M' G' H! K6 {' qmonmaptool: monmap file /tmp/monmap
# y# f, m2 d1 I# emonmaptool: removing node12 O. R3 X% }5 l" l3 @; R) d0 m
monmaptool: removing node2! {+ j; x: B4 V, v& x
monmaptool: removing node3
! U4 O) X. o6 @: Zmonmaptool: writing epoch 1 to /tmp/monmap (0 monitors) e' Q8 F+ {4 F2 F( G
& i/ l9 b- O, \添加新的mon:- X! O7 c; ]9 c' w$ v! q
% ~3 P7 b. [7 o复制
, F5 R8 U; j5 ]/ Vmonmaptool: monmap file /tmp/monmap; i( ^$ Q9 q: v5 Z5 k4 J
monmaptool: writing epoch 1 to /tmp/monmap (3 monitors)
1 ]7 z" o2 P9 U) @: D1 V
- q. o1 \' G1 N- Y& M停止所有mon服务并注入monmap,,每个mon节点都要执行;
! ]& j) D+ D1 k$ h l4 ~( e- f$ ~' F2 F4 U" X
复制# z( p. R5 m& c9 E
ceph-mon -i {mon-id} --inject-monmap /tmp/monmap9 E8 a! O' H5 a! T8 _; _2 e1 Q/ }- w
[root@ceph1 ~]# ceph-mon -i ceph1 --inject-monmap /tmp/monmap
. }+ q0 O/ l4 a7 _* W s执行完成后需要重启mon
* Z+ X% j. s+ ]# E& |/ I9 z8 P4 q; J: r
复制
$ W1 E# m0 ~4 H* N7 Tsystemctl start ceph-mon@{mon-id}
3 G5 {1 i& \+ Y5 ~4 w$ u2 Z: F% _1 u
4 G4 A; g5 k5 R8 b: c' \[root@ceph1 ~]# ceph daemon mon.ceph1 mon_status: U7 ?& ^0 [9 c6 d8 t, Z; P; J) ?
{3 {0 R$ W% [- c0 n
"name": "ceph1",
9 C& a9 W5 k# x "rank": 0,
2 f6 y! r! E& v8 x8 C "state": "leader",
9 c$ L# u7 s5 K' ]3 { "election_epoch": 30,% D& h* i1 n Y% ]0 b
"quorum": [
# }) e* p$ r, Q4 O# n( E7 q, f 0,8 W2 [& q$ O7 b- Z
1,5 G! E. H8 v$ ^! g4 p/ a
2
* |% x% l( [) C7 M M! D ],2 ]- y- i2 e) n0 h( }* N. w
"quorum_age": 79151,( t% A- t5 Q. r
"features": {& f4 O% d" ^9 Q$ z" X
"required_con": "2449958747315912708",2 u7 z% I* b4 W+ w& z2 M
"required_mon": [" N" q8 B1 Z" f/ `0 c( ?3 M2 c
"kraken",
% L; r+ N& f" g( w. y "luminous",
5 d0 m; [5 b1 {: f1 C "mimic",
0 |$ \9 G* J2 ` "osdmap-prune",2 G2 h, |% z7 h+ O) G% q; |' d
"nautilus"3 C9 ^) l( d3 i
],
; }# {" O4 P8 q4 N "quorum_con": "4611087854031667199",7 S6 b; M& A1 r& \
"quorum_mon": [+ x4 I: T' @* y; `8 t
"kraken", j; O1 p- ?1 E! C) d" v* y
"luminous",
$ ^, h, D3 s ^" s "mimic",3 ^% W5 u) ^0 I# ^5 c1 l
"osdmap-prune",, o; o! r1 B- I3 F9 N
"nautilus"3 K: p W+ R* S* {6 W
]# G7 [5 z4 D. U1 `: o
},: x1 ~$ `& J$ h: ]8 U- m7 ]
"outside_quorum": [],
0 z" n1 h& \6 Z" K* d5 p "extra_probe_peers": [],
7 v# Y7 i5 e/ c "sync_provider": [],9 ]) P' t5 W8 ~1 O- J
"monmap": {6 M9 F: L2 B% J& B5 ^
"epoch": 3,' V5 L/ ]& |% m1 q2 i: h/ O* ?$ G
"fsid": "9c7a1c4a-e1e9-4ebb-9254-c7dbaf30a23f",
$ f$ M6 r$ X% l& ?2 j "modified": "2022-10-17 10:51:14.554172",5 E g7 c4 g/ d7 q, p* I3 j- e9 J
"created": "2022-10-17 10:46:00.900267",/ X3 D; O2 F8 V+ }/ H
"min_mon_release": 14,
- }1 _+ V, p" h! H: F0 E/ Y8 M! X' | "min_mon_release_name": "nautilus",
; w, {* r8 w6 u& d' o$ ] "features": {* l! S P+ _1 b! \' j
"persistent": [! u' s& ?1 V5 b8 n S4 [* _
"kraken",
3 Z) J a w, ^ K: k; L, c# G "luminous",1 o; u, q- [8 P/ B6 d2 j& K" m7 G
"mimic",
/ r6 `: ~! o, m& G( l9 s "osdmap-prune",
3 _# i) }: X$ w6 ^* }2 S "nautilus"# n3 M6 F5 z: g/ W
],) L& b9 g/ E5 o) w& i5 u2 x- Z
"optional": []
4 W6 ^- [& {, L3 l! B },
& V4 P- ]4 i' ?" G) c. q "mons": [
% ? W, T+ L5 e& u' q5 v- q {9 k5 z5 u2 Y: `, `8 W5 |5 a; e
"rank": 0,
2 n- t) \- `3 T" q; D4 H" H9 p* x J "name": "ceph1",0 Y- c7 F0 ]& y
"public_addrs": {1 ~0 d+ }- o" }; q' {8 ?
"addrvec": [& ^8 [& U3 h! X. F
{7 J k; l- w7 v+ w0 F8 ^2 {
"type": "v2",) D" @/ m2 y3 j+ X
"addr": "192.168.120.26:3300",
# V9 @, W1 K0 P! q- m8 G "nonce": 0
$ t! S/ _! _8 a8 Z5 w! O8 G1 B( @+ r( u },1 k5 T% P; ?, b+ d" V: h/ R
{# [5 b+ S7 h9 T: Z
"type": "v1",' q7 k( E$ ^. y4 R, \# {" R! A
"addr": "192.168.120.26:6789",% c4 X" X# U( G9 G& K! S' C
"nonce": 0
, ^9 A8 K/ K3 d1 i6 ^" E }1 ^' \$ H: s' L$ i) c' _
]6 q) Q- R; |$ Z# i, D' Q+ T* M
},
) B% Q+ f5 n2 O+ X, L "addr": "192.168.120.26:6789/0",
2 k5 N( ^0 }( y/ {0 C "public_addr": "192.168.120.26:6789/0", Y6 |7 R: n( h# I. o2 X, K' I
},2 u! S$ g, ]3 f5 b. B/ |
{
$ x$ |& U6 ]4 b! z6 G "rank": 1,9 o* ]6 O/ [( ~) t6 A
"name": "ceph2",$ v* v9 a8 G( T, L3 p" G
"public_addrs": {$ ^- ~- Q: O4 i5 j, h$ Z6 ]0 V
"addrvec": [
4 `3 J$ n$ y" p0 k; r: d. @ {
, v0 L) }8 Q" d( W "type": "v2",
+ G) @0 d" E8 x' q "addr": "192.168.120.27:3300",+ b! l* H7 G8 `/ s# z
"nonce": 0# M. i, n" E% o, F7 S; q: {
},
$ z( E3 X: _6 F {: @1 ~6 z7 e" N) V5 I/ Y. _' ^
"type": "v1",: h4 v `3 K* p. g; s
"addr": "192.168.120.27:6789",9 s7 v9 a3 _, t& x: p
"nonce": 0
; B! r9 q2 T2 }6 \4 {9 K }
* Y8 N: C' {, i5 l ]- ] r# ?; b4 q" ~6 Q
}, ]/ l) E0 w! m! x- }6 o
"addr": "192.168.120.27:6789/0",
7 Z2 t& O' e9 K$ z8 \' T "public_addr": "192.168.120.27:6789/0"
/ v, C- Q3 m9 t$ ^# W3 c },
' @% A; l% V) ?' K8 W9 E {3 j0 T! d' K# F3 \/ H
"rank": 2,. J7 m. U) e9 ?* m( ^' r0 ]
"name": "ceph3",
: q, W B; o2 I0 P8 X "public_addrs": {
, K% x. r* J7 m+ b, z ]$ x5 r "addrvec": [ a# L/ p5 `% n+ n+ u( e7 R5 b8 B: Q
{
" f0 S# d/ K. ?7 S* R, { "type": "v2",4 i& O' ]5 b' L* ?! t% |2 m
"addr": "192.168.120.28:3300",* Q3 W( E" f ]- I
"nonce": 0
9 N/ Z3 k. S# b7 d. n- J( S8 W, W },
$ n7 _" [, `: G8 r: U {
$ A5 Q* W( p" I, K; ^+ {/ j "type": "v1",# |. _1 G( W* r% B0 s9 ?, U5 C
"addr": "192.168.120.28:6789",$ N6 I, D4 }+ }7 \7 b. v9 d
"nonce": 09 H6 H. T0 M3 n* A( e& G2 R
}$ Z) D8 l" }5 m0 y" T# T/ T
]
1 I {) G; q& C+ I1 K },6 v h6 L8 ^4 e. t& B
"addr": "192.168.120.28:6789/0",( j3 G7 {+ T3 J: J% ]3 g. k
"public_addr": "192.168.120.28:6789/0"
% |$ @, x- L' g" g7 m) \ J3 ^7 K" _ }0 Z, T& J, g+ ^7 Q# i( G% v
]
0 V# d z/ s- Y& g X' T },- n; D7 O! q; B' A0 K$ \/ j9 l
"feature_map": {% R; S/ ~! @1 x- k9 w8 V
"mon": [
) q( E& k* j5 }6 L {
0 h& t3 g7 V8 i$ d: [ "features": "0x3ffddff8ffacffff",
( v' i6 M5 j: X- F4 k "release": "luminous",
+ r) K5 k$ k5 r "num": 15 o- P- ~" y' _' q' i
}
$ p* R: W' D' q" O" X+ m ],0 [5 B& M, C$ y7 L0 N
"osd": [
! Y; T$ S4 C. L: q {
) T5 S8 Y7 \& w( p "features": "0x3ffddff8ffacffff",5 d: p( E' k: p8 _
"release": "luminous",
" I2 o0 w/ D% j, c$ {1 t7 Z) C "num": 6
. u' r+ B5 v8 n( Q) z8 l }
9 p/ m' ~, Z* V( {% [ ],' W. n" t6 J3 i0 r
"client": [
, b2 S' r3 S# g, E {
7 I1 C/ g% G8 A! u "features": "0x3ffddff8ffacffff",1 i* q# C/ L/ H8 W8 P
"release": "luminous",
3 i, y0 M5 L2 G4 a% O "num": 7
N, m( n) _" x& k* }5 V) M }) D/ R$ q) V6 d
],) H- o2 {. z8 T4 I. j3 w- K
"mgr": [
1 U' o0 G# b* \- Z8 g7 X& g3 G' ? {8 e# w* q5 ~4 H/ _$ V: @3 Q
"features": "0x3ffddff8ffacffff",
7 K: L. ?! @* c# t* r "release": "luminous",6 W, Y# P, d$ `3 e7 i
"num": 35 b) Q5 G! P5 e0 b( L: f' x0 a
}( K" o$ I; @' |' g- W! l
]! h( Q% i ]5 n: N9 ?, o+ v' D
}
+ W& b+ ^1 S) m2 A, h}
; N8 _+ H3 \6 D, S
% h- p- F, J! z, b: O/ N8 L9 Y8 l
) P. ~& J+ X+ @6 r/ g9 L |
|