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

Keepalived+Ceph RBD配置NFS的高可用

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-11-21 21:56:12 | 显示全部楼层 |阅读模式

原理比较简单,利用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块设备,然后在两台机器上导出此相同的块:


  •   H  y: C! r+ s2 U( G8 ]
    9 B: J0 M) v, f, g, i! Q9 \: B
    [root@osd1 keepalived]# rbd ls test- P8 C4 t' _' ~/ p% z  f

      k; K) y+ O& ~3 m9 Q6 m

  • 2 j4 K  |9 ^: ]: j+ F' `( }
    8 W/ z7 q; S1 v/ ~7 ~, c) B8 I
    test.img* ]& [( h& x2 v( Z  Q2 e) _

    * I2 P9 N6 ^( S* p
  • 7 p  B# I% ^- C) C

    8 n( N* Z: _1 r3 x[root@osd1 keepalived]# rbd showmapped
    3 ~6 A' i  V/ q: v1 L
    / ~! `9 I8 D/ g( i  k7 V

  • # _. G  v8 m# L7 C" a* w- L7 D6 T2 I

    / |2 y1 y! z% t2 j$ k! W7 t0 eid pool image    snap device2 K+ L4 \1 f) Q& a& n

    # K5 X7 p; j) g9 G, Z' {
  • ) y  ~, q) [( Z( m% {

    4 U& ]: _/ W) G# ?$ j. G0  test test.img -    /dev/rbd0$ u# w: T; N/ \3 N8 @
    8 E( r4 V5 @9 K% W  T9 m% i
  • ' L& t6 F( y+ ~) \, z3 ^
    & o/ W7 W; c6 C7 K! K! `6 r; F  {
    [root@osd2 keepalived]# rbd showmapped1 w. B3 L, U* _& U: C9 u

    3 }( a1 i2 ^5 B: L$ m9 M
  • 5 N' u1 S1 p' M/ A" Z" I& c

    ; p& D# G+ D5 w( `0 m+ Mid pool image    snap device
    " T0 T5 W( k+ A# r; O3 x9 f3 x

    , f0 b1 `; A9 @  I& Y
  • - A" I$ P/ s+ ~9 h( E  J
    : o+ n6 Y  d" a9 r1 g+ \
    0  test test.img -    /dev/rbd0
      o% @# h" h9 U8 [' j2 P6 q& _, _5 R; x
    4 M6 L$ o5 ?$ Y; o

    7 o  ^* H- g2 I0 a, {

然后将/dev/rbd0格式化后进行挂载,如/mnt目录。

2. 配置keepalived
9 x. q8 S1 E5 ]7 m9 P( m3 U

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的配置如下:

  • ; X1 X8 E! [; ]" W

    6 h, N& W4 J; I( \* B) V[root@osd1 keepalived]# cat keepalived.conf5 N7 _' f- Z* t7 R' S' \
    7 I6 Z  U( L# M' }( e8 p8 K( r
  • / o1 v. b2 K; ~! m) I7 Y

    / N! i' L/ K* y8 p3 yglobal_defs4 o  @& P; }4 I0 C9 v

    , f8 j" p/ l+ F' j+ u  z8 ]
  • ) b$ ~- {% w5 N+ ?

    ; h  y) u2 P. |$ a8 t( l( g0 X. Z{
      d! A/ x1 E6 E" r1 @. H! u

    0 j9 k& v9 T9 r
  • 8 ?: m; H: g6 o" u

    1 D$ y& Z  d3 Y    notification_email
    0 Z) T0 y9 `4 V  Q

    5 q  L: M& k7 D1 e
  • * p+ s, ~2 A. a: B/ ~: k- q

    1 d4 H6 S3 Q# j$ U8 w9 f" t    {/ k1 c2 k, i$ u2 Z4 L; U' p

    5 W( ?! ?' o; U4 d
  • / X! ^5 K& u6 v( n7 e/ k9 l

    # P% ~2 Y4 z$ s. Y5 N# T) V    }4 K% I' I0 p- S

    5 m: H! H$ }* y$ E! V- ]" L

  • 4 L; T0 W/ S( ?) v% i( D, }+ T* S
    , {0 r" k9 R! u3 u' r/ f# ^
        router_id osd1
    5 a5 b0 V# r3 ]4 {& [' K7 W

    ; a) a$ O& P: q1 }, I# v

  • 0 P* k7 o$ `& ?/ k! `6 U

    3 y" z8 Q+ v/ e; J  x& {0 _}
    ) G/ ^; C) q  [% a% p
    * J8 Q$ X: F' ]% J

  • * |" x! q$ n8 m: C

    ( z; m- S& z7 L; U5 F, b
    $ ~" _9 S' X/ W; Z
    ! P' `$ ^3 ^! A8 q& m) s
  • $ c5 v3 ?" y6 E1 H# A$ ]

    $ P% e/ V/ t9 T0 Z6 I2 Svrrp_instance VI_1 {
    4 ~9 F  i9 z/ H, ]
    5 a8 H+ n( F7 B: o% B  E+ s
  • 3 g  E3 V+ M! k- s. @! R8 x0 Q5 B! L

    ; s5 H0 Q5 L# O  k    state MASTER1 b; f2 }# n/ w; J2 G& q) J0 A; P  K
    6 A3 t" L0 K' z& v! b, ~

  • 5 ]/ |( J% q- f! ~# y! }6 C

    1 O: R# _) R( C+ R    interface em1
    " m7 p" G% {3 p7 ~  J( ?
    & T2 n" v) _* W/ n, z1 t
  • $ b# ~# {& }( t  I8 V# ]& W6 t
    6 u) R1 l4 N9 Z. [8 I) ]. V
        virtual_router_id 100
    2 F4 J6 I+ }( u; g
    ; ?# v1 [- F9 X" k+ p3 ]/ n

  • : B" e! e" \4 s5 p  y7 n' g
    ! t0 i: `; m! K+ a
        priority 1009 X; e! K% M. H1 \
    , Y2 k: L6 [" [  R, i
  • " g: R* T" _: ]

    , A5 w9 J9 {+ Y4 V  @    advert_int 18 w. _- r% e8 D( Y

    5 C+ G( i& c- J" W! E
  •   M: |' y& B/ R# D+ \  a
    - Q% ?- o; L. i# c( G
        authentication {2 t( H" r8 Z7 d) M. n6 E( ^

    8 ?1 ^, P1 a: J# ]4 x, E  y
  • + w7 M9 i, f* U0 P
    $ w: O" f- e* M" m+ C- Q4 ^& m
            auth_type PASS
    7 B7 [- j5 ]5 y* X

    4 j- P* c4 O' C( q) w1 d/ `
  • 4 F& z$ \4 k/ E' I$ K8 u" n

    2 n+ B1 x2 X) K3 i, b        auth_pass 11115 J! _8 W  ]) K; m( l- K

    3 Q4 M6 @5 E9 R+ A

  • * K9 U  R! k. b+ x, H# U1 x: T

    ' Z2 c5 n+ K9 {  Q; Z2 q7 X    }. R1 Y4 u$ D/ V" p+ r& f0 Z

    % Z, W$ h# g" f! u3 c8 }

  • 5 ~. L& V0 R# I3 Z+ |" Q- Q5 p
    ! `& ?* x: i$ d% p( ^7 S& G5 f
        virtual_ipaddress {* u  ^) D1 C& [( y5 A/ m

    : G. j8 B. F- G! ]9 t% B; `
  • : W  B5 X8 z2 Q' `
    8 [2 E0 z& G1 H
            192.168.32.5/24
    ; t* s* H1 c- V8 }. D
    3 r; Y+ H0 A8 t3 i; E& s7 W
  • 2 u. V% `7 f) R, p6 Z

    ! z8 h3 Y& t% |/ U    }
    4 l9 q! @  d5 L$ T8 z* `
    + J0 \/ a- \% M: q6 x5 G

  • 5 T$ @4 T; V# x# {1 T2 U3 }
    , p# ]$ C0 p9 y2 c
    }
    5 n4 L+ n% n# A/ P

    ! i9 n! s% w8 a# r$ l, A9 k" _2 _0 R/ n: Q

osd2的配置如下:

  • 0 q0 @, |( g! l/ d- O
    4 w. m* l" N( [. m6 e5 c8 m
    [root@osd2 keepalived]# cat keepalived.conf
    : P$ H2 s) v' i8 _* Y! d% n4 U

    ! b: |$ ^0 y7 a1 q
  • + u6 x0 L$ c! g; K2 c
    $ P- ^: ]4 v3 d2 s- i1 S$ A' B6 `& ^
    global_defs. b, W/ l6 j3 ^# w$ ?$ A- g$ X
    # x% ?) i; o% `! n8 f. n  Y
  • & @/ Q! J7 f) U
    5 o8 e, ^8 k' x" W; d. W/ r2 B
    {
    + v. g) G8 E4 u2 x+ j( `; M

    & D! c: m* ]8 a2 m8 T

  • 0 R" |1 N1 m5 H4 F

    : l$ g; I* q# d' Q' Y    notification_email
    1 `5 _6 [2 H* _% _& G7 |

    9 R/ p, D: h0 W% U/ f
  • 5 C' H" l( s+ w4 c6 V6 q( U. ~

    $ W+ j/ M6 b& l' ~' T. [2 i    {
    9 f: a6 j6 W2 j* e" O
    4 Z0 ?9 r, f  p  U/ ]* k8 @3 M) n5 |

  • . A4 u6 o7 ~" ^+ V7 k7 k
    # g/ j; ~1 B0 `( J! d
        #    admin@example.com
    - L; s( k! v* s* r! b% Q! N4 o
    ' `- A' x9 r) p" u$ L2 x  y

  • 6 p( P: a( J. {, P, c3 k; ^

    5 @1 P3 j" G; b+ }& I: g3 L  t3 J    }
    # m6 C0 @/ k7 O2 a
    . w4 V/ H9 q* x, U, E6 k: B
  • 4 B, {* u9 u% \$ T. U

    " t' i' m+ F4 M, I8 }: F0 h" n    #notification_email_from admin@example.com1 \" {) g& B. d+ f- p3 q+ M" b1 q9 ]/ x

    0 M" X+ ~! b" J- v; z. J; k/ i) K

  • ; G$ A( |& |( \4 a; B% w
    ; P  g  k) O; l0 B) D3 p
        #smtp_server 127.0.0.1. O$ {( A  \2 [- R

    # P" G7 C* y/ i, U& n, ]
  • " |6 T$ w1 T9 p# Z" }/ M
    7 B: m' p2 ^% d, V" D& C, Q
        #stmp_connect_timeout 30
    . V3 \' }7 F% g6 k: x' f
    9 U: ]- H, f7 U* I
  • 2 e+ J9 H6 J* k! [! R2 V

    9 r5 M/ ^6 J4 m3 C4 w. |    router_id osd2
    1 k7 {; w6 z" p2 c( T

    . w1 h  W4 X1 A; [8 T. X8 _
  • 2 Q( S9 P4 b* w; w- G
    7 \2 L+ \5 w0 @2 N
    }# U( b7 ^" A; y6 {

    2 g" D  Y5 n" I0 A

  • 4 d! b  U) q9 U- C

    , r# U3 q  ]0 N' b( `* e
    * u6 j( ~  b6 Q3 k; n7 D

    $ m& h& X+ m3 w3 a' _4 D

  • 1 g* N0 A6 ^$ c; {

      n9 k5 I& X2 s2 A5 p9 v+ J9 Y. @) lvrrp_instance VI_1 {! j3 ]. B0 H8 J' h' k6 z# H2 D7 D
    5 i1 E/ `$ U; E" U  i; D

  • 2 h$ q- J- ]$ C) S* Y# |
    1 i1 x% q+ t9 \3 \. o! ]
        state BACKUP
    ' s/ ^5 |4 y" q9 X7 b( w

    ) Z' c3 @! q& Y/ `! X8 T$ w

  • 6 y# n- V( b9 K6 j3 s

    & Z0 u' K# N$ Y+ }" ~! x( A# Z7 P# g3 `    interface em1
    6 L& {; I9 ?" o& J) C3 r/ Z

    ) Z1 T  a6 G* `& x

  • * s( j/ o7 u. \+ O) W

    # A) _8 N% W1 a, Z! _; C2 h9 C    virtual_router_id 100+ u# R' J( M, b: X6 ^
    ; O2 d: M) Q9 G' Z: _$ J

  • 6 ?6 [# k+ Q6 V

    ' ?% T; O* Q1 z7 |5 |6 j* f& F    priority 99
    2 X! m6 P* x5 y% g3 {

    , p& H$ h2 k" G- N% R. z
  • 2 ~% x  |+ ]; r# j' B
    - Z% w) f/ l: u9 j: ~9 c
        advert_int 1
    & [6 J; K& p: a7 S0 N

    / W4 k7 q# W, f9 \

  •   {) D7 n% {% {8 l
    ) R* k" x" t) J
        authentication {
    3 l0 L- R5 ]" ]0 M$ L4 v: g$ e
    " H! k8 u$ t$ S; E

  • 1 n) k# U, @1 R. s

    ; S0 K& f. a9 ^0 q3 I" R  a* F( \        auth_type PASS
    6 }5 v1 w% X* c8 R: L
    2 ?+ a# D) U$ P! b

  • + p% ^. y8 p$ ^1 z6 T# M

    6 J6 s3 P+ }2 o+ {7 f0 s( j        auth_pass 1111
    , G9 @: U& X2 B- A+ {/ K

    ) u" I/ E, P# }- \7 g7 p
  • " d% r2 P7 j! [5 U: x8 A: C6 d1 q7 _! {

    / x) |2 k# v5 o1 d, \: E" ?8 [/ Y$ x4 @    }
    $ b- L* X" C% |, s" b

      x# b+ u5 _( _* k/ D

  • 7 }1 w# Q4 \4 J: |6 I
    + x6 w, B+ g- u# X" g3 @
        notify_master "/etc/keepalived/ChangeToMaster.sh"
    8 w& [4 ^0 C7 V; f- k7 T/ O
    ! t3 E3 P& Y+ q) j+ @+ C) q" \# s: p- g
  • 6 C/ A6 }7 d( A' w$ B; }
    9 K. Z% `4 L8 Y) e" E
        notify_backup "/etc/keepalived/ChangeToBackup.sh"
    1 {+ u* c1 u* J/ m& E6 Z

    9 H  K. y) m( t  N6 _  P
  • 9 ?( ~) z5 w$ t8 w/ a  g

    / t9 W" q/ Q- ]9 }    virtual_ipaddress {
    " G' O, |+ A9 C4 ?# J  Y" K$ @

    * w6 C+ Z+ U! A& y0 ~3 s
  • ! i, T: K+ R' U+ c6 Y

    * |* u4 @. U! p2 M- Q        192.168.32.5/24# R; Z3 O6 I' S

    4 a2 X  Z4 a) B

  • : ^9 r# x" g3 d7 w1 P

    9 G8 b& e3 c  _7 w( g- i) {    }- h2 t" S3 C9 l: ^( r
    3 L6 a' A( J; ]1 t3 t2 P# C

  • . p. Q* z" ?# _

    4 N/ Y0 U6 W$ B8 v2 t9 e}
    ' ^( V3 Y9 x6 C; z3 ~0 m

    / T2 [7 r- W. @* W$ K% F! z
    ( d7 _8 i4 d6 u, `) t1 [

在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) c: T) [* g# r1 ^. U

在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. 测试* x+ r6 r, d. g( w  M7 O

关闭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 forever

vip已经漂移到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 forever

osd2的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,后面会进行记录。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:06 , Processed in 0.024846 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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