|
原理比较简单,利用ceph的rbd导出nfs,然后配置keepalived,在不同主机映射的rbd块间进行vip漂移。 1. 创建并映射rbd块设备试验机器为ceph中的osd1和osd2主机,ip分别为192.168.32.3、192.168.32.4,vip为192.168.32.5。 先创建一个rbd块设备,然后在两台机器上导出此相同的块: - * K+ |6 f9 }6 g; @
" f. E0 O2 R* C
[root@osd1 keepalived]# rbd ls test
4 z, p% O3 o- H* z* D, e0 [7 g* Z: b" u% O; R
- % q1 `) k% r5 e$ J* Z
$ p# U/ W- B4 ?2 l% e
test.img
/ H; [7 z* k5 K3 i$ h
8 {% A& T) C& k! N7 j - + z2 M* c8 D- k- v! ]) S+ d
1 \, I; d: w- d! ]) s+ c
[root@osd1 keepalived]# rbd showmapped
9 E/ F; s0 z! u K3 f3 s3 V' E8 a* ^# F- h, j
' A6 g7 @+ ]- j. Y; z5 T: k i1 @2 x9 Q- O# [# D8 {" E' E
id pool image snap device3 b0 Y+ W# x7 Z( C4 G
7 U3 j: N# u* a% E
4 _* Q I: `3 ]4 K$ k1 [
, y3 r! n3 y7 F3 i6 ?4 Z( _0 test test.img - /dev/rbd0
" L: j$ R7 L' K; b8 L
: H: W& J, V2 \+ K$ T+ J6 s+ W
6 M$ K0 E4 m) e Z( o+ g2 M V5 K; K8 i
[root@osd2 keepalived]# rbd showmapped y% T( Z7 n0 Y! _" w& b" k
" z2 g: H2 D/ I5 F- y6 a
2 |- r$ X3 s( A+ q
0 a, G0 z; V9 @- \6 k, p, K. Iid pool image snap device; u# K% e9 R/ [/ w, |# P
" m. A( g2 L5 p h0 E0 T5 E) J- - Z5 x4 n, k5 J2 {
/ r* ]. D% x& A$ X: u. a0 test test.img - /dev/rbd07 M- l- D6 g& L2 q8 W G! E
9 I/ d. C& v; i1 u) W( K, ]8 t8 ]9 @; [% }) q7 D* g% {1 D+ q+ ~
然后将/dev/rbd0格式化后进行挂载,如/mnt目录。 2. 配置keepalived
2 [7 o: S2 G9 d0 k从http://www.keepalived.org/download.html下载最新的keepalived 1.2.15版本,安装比较简单,直接按照INSTALL的说明进行默认安装即可。为了方便管理keepalived服务,需进行以下操作: cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalivedcp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/cp /usr/local/sbin/keepalived /usr/sbin/chkconfig --add keepalivedchkconfig keepalived onchkconfig --list keepalived配置/etc/keepalived.conf。osd1的配置如下: - 3 @# L" p& L5 w" o# X$ L$ w8 ]
" @# S! S* t4 ?
[root@osd1 keepalived]# cat keepalived.conf
/ l& Q1 C( g) r. b) C
g7 j+ D3 i8 h2 @" H2 r - $ g5 T, N6 n5 K6 z) Y
7 Z$ R9 m& q& B5 P& w% mglobal_defs
) S, h# U! @% C, O. r# o# e. G o. w5 Q
/ \; X6 n, h( y' R( G6 Q" } k9 L, C" V$ C
{
8 X" W; r- ]' u8 E4 H2 R4 D/ i5 z! o
8 ~2 y, ^- ~4 | R
# |2 c+ W E6 v% P notification_email% Y5 A+ t# P, P! N; ^ ^) K6 Y* ?, ?
5 n2 [/ d) \, J0 ]- v* j& E. w0 M
( J" z1 f+ k6 ~' ^
: M1 ~# x- c3 r, F8 f) q {: ]" S* Z1 ]$ U
( ]' ^! w, A8 `- C- 8 r/ t+ R) j: J+ ?/ x
" P r8 y# v" o! v8 L" A }
1 g' N' W: k) V3 Z8 S' D& d
! V2 d4 a6 a K. u) n8 w* R* s
/ h3 a9 d% Y! Z- I% \9 {% L: i7 y
router_id osd1) Y% N$ D. f, N' ~/ M
9 M Q8 s6 E& \
4 q B9 f! D' O }1 H8 @3 `+ A) r0 T' n9 {
}+ R3 N) `/ `7 u f
, a; |0 ]4 E9 G* Q+ E6 a2 } \5 i9 p- - U, d* A0 N7 `' L- Y d% \
; m7 H- Y7 n8 F( Y# W# n# T. B+ c. _- h% Z# q( Z( Z7 J9 W
4 U+ c2 q& V. v! b5 n& a0 Q
- # |; b2 C8 H. G: P w9 D6 v$ R
2 W/ X6 t$ [+ d b) p- Z6 \vrrp_instance VI_1 {7 O4 H; g3 y8 t) _( c
& e4 a, h* `; _, H
" t8 Z+ D; n6 {0 T, ?& N3 |) i; g! u. H1 o0 g7 Q8 Z
state MASTER
! v3 o4 n6 K$ _1 H4 [# w( U% a, p& ?
# F1 Q! V f1 T; i* c2 S! X
$ i. ]! |" }% W# B/ u2 b) r/ y6 O/ o& l
interface em1
. E2 X1 c) D- t
/ _ Y6 Z8 o" ^2 O5 O2 q- ( k4 d3 a9 q& y0 ?0 R
T! U" f: v/ G8 {% Q7 Y2 g+ }; k" i virtual_router_id 100
: p7 Q+ {: x% [; X
% J" v; y& @% H0 t# @* e* ?3 \9 ~0 L - : G- ^# X% Z/ l, J; t
D8 n n! z/ U+ y$ N
priority 100 m/ d+ z, Z, U) x1 _9 G& G* U
8 k( U f7 L$ U# q9 Z
7 Y* w: L% I7 q5 Z, b: d5 D. |' E: F1 m: Y2 l) T
advert_int 1" G1 ^/ n/ X- B( Q
+ c: h X' `0 R0 ~* o- T
. `0 y P; h+ e8 S! s" G8 c! Q: T7 ]6 @' M. L5 a0 |. p1 `
authentication {
8 I& ^* \$ @9 w/ `( I- o [) B1 V- h' N2 l' O: v
- % h% e3 \: _& O: N4 ~2 l
* z2 ]. {; @1 E* z \& h auth_type PASS
# g! }7 s- `8 ~1 D. S% g1 n' _+ {2 }% Z- Y R p
- 9 R d( r+ `4 t0 _
6 Y1 q/ V+ Q: g0 y5 m
auth_pass 1111
8 Q2 M: U4 O6 V) M3 _2 c
- _ l$ ?$ f! s5 b
6 T+ _- w. l/ x7 \7 h' @3 o
& e+ J1 G$ N! @' m# k: D }
# W) z/ o! p$ h' l* ]( O7 }0 V) L; U4 _
5 \& Y% C2 T" S$ o0 o& H: ^: i; [# a. f9 {/ Q1 z* c, p
virtual_ipaddress {3 A6 y/ u7 n; O8 I$ Q+ V$ G
; Z& A) b/ X: T; J& q! ~: }) |% ^
( @: o- J5 |5 b( y, G5 y Z0 l1 i$ O! Q2 u- w. _8 |$ Q( r
192.168.32.5/24
3 Q% H) O4 H1 z1 t/ K4 x4 B$ e1 w" U1 t$ P5 W) u
- 8 m3 C2 @5 X" i5 y( f2 J. e
! Q7 l3 k6 r* Z }0 J: C5 q1 ]" Y# Y
e0 u! t. m8 j+ M - 1 f3 ?+ L( j( K: v
3 R# @; N0 ~! d. ?0 E1 j}
5 B2 J) T' L0 |. y# z
% I8 U$ v; T( \( S2 u q" S. C2 e, u H6 m3 B {" ]; j+ z
osd2的配置如下:
7 @2 S: z* r0 p# @- |# }1 d9 w5 H4 c
[root@osd2 keepalived]# cat keepalived.conf
: y# n" [5 F0 H X' Z& i3 f
( z. ^/ a" J: ~, R: Z# g
. R* G) q* p9 J
5 {+ @8 Y$ K- Y8 ?/ y$ n- w' Zglobal_defs
+ K0 ]( L2 Q7 F7 R/ p" n1 b) w. }: X
! f: d# w1 V7 G+ ~) J- & |" o. p: n, F7 T# C) a( b! x
- m& b% u, B: p4 ~{
$ }; S. S! o' }0 k( |3 U) u, r5 j2 {0 [& N, c3 l4 n
- / K/ ?, b L6 I& X! G( T* _6 A
# f1 p( ^6 W9 U9 k& A" E
notification_email: R9 ~# j7 Z! j- O" y% p4 c
( N$ c% t8 J( X" d - . ^' {. @" u4 X8 Y$ o8 P
& t& D% O% X- v1 h0 n! ]% z {$ A! O" _9 W o; D( A. O, A/ h$ j
, I1 g! Y; U% X# `, y5 o5 h3 n
- 5 R# l1 |- I- J4 z: J/ _% H2 ~
- l% q$ N. D/ n # admin@example.com1 |3 i7 ~' \( q8 d7 [/ E/ m8 Y
! L i" H. \* d" G( i - ) } O/ V! _* ?7 t4 p4 k, G
) I' r5 B' x% B; ?, U+ W! ?# g }6 s" H: u+ F; V! [( e, V# F2 T6 X
; @1 \- g b- }( ^
- 1 |4 w9 E/ x* O
% n% }. @6 L1 C# o #notification_email_from admin@example.com4 {! P" n$ s: C: K9 g t
! d" Y" O! v0 ~; A
- 0 Z7 _1 ~" h4 \8 @" r* B
4 E3 a( |: ~6 I9 y9 b #smtp_server 127.0.0.13 e# }% r/ M8 u ]9 H
' i. ?0 B( X4 r0 a - . V# S- a; [+ w2 ~ l- n
7 [) n! K0 e' ~ g #stmp_connect_timeout 30* u5 T' y5 ~9 S% Y$ l6 x; m- B
. i# i0 @0 o! V) T
- ) z8 O7 i2 e4 l# h
+ W/ {3 a- U; q1 }1 N router_id osd25 N: D& z5 D& Y+ v! A$ T" P
3 u6 ~6 }2 S) T( a u5 J5 d. ]
- / T8 y! J8 [7 o2 V, x; u* ?
! T) {1 Q9 ]) S7 ` y4 Q9 E
}
0 A- `( `+ y( N. p7 E, F, Z& U
1 c' ]6 ^! r1 z$ ]. t1 O - " Q& M' P$ E+ d% D1 J1 L4 z3 x+ [
7 [" {2 I- q6 {
6 Q; v9 o3 e l' g3 o: n7 M& y/ m3 `8 Y( h9 s
& g, T0 c9 O) S% [2 H
, P3 Y" a+ s& E3 @4 i6 a8 Evrrp_instance VI_1 {
% _) Z" f5 I( |3 k" T6 R
1 @" b9 h+ g+ T* f$ J: s6 {- 5 V$ C' N" M$ }9 s! b
1 r+ U" @! X9 l3 h5 O; z* N
state BACKUP# s Q. [" e6 A8 ^4 l+ B' K- [3 f- |
" L" E3 p' M1 E4 O1 J+ @
- 3 W& Q9 o% U+ z- T
c( J8 J9 ?2 A- s8 F% E: o
interface em1
1 }8 j% o( Y3 x
" J7 R& I( p4 R D+ c - 4 T- q/ _. p$ @( z' M- Z
9 ^1 h* \" s! ?5 | virtual_router_id 100
% S7 S( [: `7 X; k: V; z; |6 h; Z
; \2 P- U& ~3 r! S
. r. E$ ^, I8 Q5 C" i9 O9 X- W" A5 h' {4 Q
priority 999 R# ~- _5 r9 N
4 }. }5 N. E2 z2 [) w& v
, } T4 W0 l! Q9 M2 s' {- i5 z* F% C+ y! K
advert_int 1. {. z1 w9 T) j0 K, Y# Y
9 q" p6 x- b u
$ z6 ^; P A' D$ Z3 H ^3 G" ]- o0 O: {1 |5 P2 U U9 j
authentication {
& ~( U s F, s! f- W6 t/ v( F$ C: A) G9 P# w$ _
; t- R" p- K1 ^( e" o/ H$ @- v) }; q0 M% |1 Y
auth_type PASS
' y; T& I. @ F0 F: v3 P( c( U6 a% U* O N
" B' v I& u, L, Y
7 h% I X$ B: |+ V auth_pass 1111/ B4 R' W& b: _$ W) p! c
, e) O" G( @) Y: H+ i( N: p
2 b' c) b/ H% C( k# s6 f2 H0 Q' C( K$ j1 P) [
}! q( K, m0 _; U* O
6 ^0 ?' R) v. m* a) H- V+ f+ s- 7 l' P: i0 h" o1 H
, }' a% d0 C7 w- j' E S
notify_master "/etc/keepalived/ChangeToMaster.sh"/ J- ~6 D! E! N A0 }
" ~1 O/ G; j4 [4 E( V3 e8 x - 0 f! ]+ Q1 m* F- A7 a
8 T. J( S1 i3 L* r% \/ ]
notify_backup "/etc/keepalived/ChangeToBackup.sh" u5 R- l e5 {1 g
7 p4 A5 z6 ?+ J V4 l% \. s- d
( m2 Z i; ~# V* f( K9 B6 C! x
9 o' A, W* g4 T+ ]' x7 J virtual_ipaddress {
O) [6 d7 l2 ^* e. ]
" Y3 ?6 k- c) d% d: s" N
* N' o( o9 U) ^' r$ b+ r
" ]( G- F0 @- l7 v 192.168.32.5/243 t# ]7 ^% L2 o* q: J: X* v( }) N
5 x! a c0 ]# w0 z# Z
4 O& \# V/ I3 i, a P3 S
* @6 Z( A$ j) H$ M- R( a$ T }
- {" \& {0 r; ?# X* a
/ F! p8 d' g7 S% p7 ^ P
1 s, g0 C1 [, N' Z6 Y2 D
( s6 Z4 x" Z) B7 z$ y}" K' @: g; A+ F' Z
) A G3 D' M8 O, D9 m) ^! j( e! t) U7 ?8 G- g$ c! X$ @& _
在osd2写了两个控制脚本,用于osd2的keepalived状态改变时执行。ChangeToMaster.sh: [root@osd2 keepalived]# cat ChangeToMaster.sh#!/bin/bashservice nfs startssh lm "umount -f /mnt"ssh lm "mount -t nfs 192.168.32.5:/mnt /mnt"ChangeToBackup.sh: [root@osd2 keepalived]# cat ChangeToBackup.sh#!/bin/bashssh lm "umount -f /mnt"ssh osd1 "service nfs stop"ssh osd1 "umount /mnt"ssh osd1 "rbd unmap /dev/rbd0"ssh osd1 "rbd map test/test.img"ssh osd1 "mount /dev/rbd0 /mnt"ssh osd1 "service nfs start"ssh lm "mount -t nfs 192.168.32.5:/mnt /mnt"service nfs stopumount /mntrbd unmap /dev/rbd0rbd map test/test.imgmount /dev/rbd03. 配置nfs
8 q n, R2 U) H0 W+ g2 @6 z4 V6 }. p在ceph的一个节点利用rbd map一个块设备,然后格式化并挂载在一个目录,如/mnt。在此节点上安装nfs的rpm包: yum -y install nfs-utils设置挂载目录: cat /etc/exports/mnt 192.168.101.157(rw,async,no_subtree_check,no_root_squash)/mnt 192.168.108.4(rw,async,no_subtree_check,no_root_squash)启动并导出: service nfs startchkconfig nfs onexportfs -r客户端查看一下: showmount -e mon0Export list for mon0:/mnt 192.168.108.4,192.168.101.157然后挂载: mount -t nfs mon0:/mnt /mnt需要注意的是,NFS默认是用UDP协议,如果网络不稳定,换成TCP协议即可: mount -t nfs mon0:/mnt /mnt -o proto=tcp -o nolock 4. 测试
" V2 D$ q4 r; X. k) L- p8 B关闭osd1的网卡em1查看结果: [root@osd1 keepalived]# ifdown em1[root@osd1 keepalived]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: em1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000 link/ether c8:1f:66:de:5e:65 brd ff:ff:ff:ff:ff:ff查看osd2的网卡: [root@osd2 keepalived]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether c8:1f:66:f7:61:5d brd ff:ff:ff:ff:ff:ff inet 192.168.32.4/24 brd 192.168.32.255 scope global em1 valid_lft forever preferred_lft forever inet 192.168.32.5/24 scope global secondary em1 valid_lft forever preferred_lft forever inet6 fe80::ca1f:66ff:fef7:615d/64 scope link valid_lft forever preferred_lft forevervip已经漂移到osd2,查看客户端挂载情况: [root@lm /]# df -hTFilesystem Type Size Used Avail Use% Mounted on/dev/sda1 ext4 454G 79G 353G 19% /tmpfs tmpfs 1.7G 4.6M 1.7G 1% /dev/shm192.168.32.5:/mnt nfs 100G 21G 80G 21% /mnt打开osd1的网卡em1: [root@osd1 keepalived]# ifup em1Determining if ip address 192.168.32.3 is already in use for device em1...[root@osd1 keepalived]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether c8:1f:66:de:5e:65 brd ff:ff:ff:ff:ff:ff inet 192.168.32.3/24 brd 192.168.32.255 scope global em1 valid_lft forever preferred_lft forever inet 192.168.32.5/24 scope global secondary em1 valid_lft forever preferred_lft forever inet6 fe80::ca1f:66ff:fede:5e65/64 scope link valid_lft forever preferred_lft foreverosd2的em1: [root@osd2 keepalived]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether c8:1f:66:f7:61:5d brd ff:ff:ff:ff:ff:ff inet 192.168.32.4/24 brd 192.168.32.255 scope global em1 valid_lft forever preferred_lft forever inet6 fe80::ca1f:66ff:fef7:615d/64 scope link valid_lft forever preferred_lft forever现在的客户端: [root@lm /]# df -hTFilesystem Type Size Used Avail Use% Mounted on/dev/sda1 ext4 454G 79G 353G 19% /tmpfs tmpfs 1.7G 4.6M 1.7G 1% /dev/shm192.168.32.5:/mnt nfs 100G 21G 80G 21% /mnt[root@lm /]# ls /mnt31.txt a.txt b.txt c.txt etc linux-3.17.4 linux-3.17.4.tar m2.txt test.img test.img2也可以为ceph rbd的iscsi配置vip,后面会进行记录。 |