找回密码
 注册
查看: 6400|回复: 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块设备,然后在两台机器上导出此相同的块:

  • # i/ J; Q* d0 p7 ^
    9 r2 s9 S; s- A. }/ d" Q. Q% s. k
    [root@osd1 keepalived]# rbd ls test
    " X' K. ?/ ?! o9 U# Q
    0 m* u& K( M/ s- e# I: ~7 l
  • " n8 h1 _2 {1 ]- {+ Q

    9 |4 Z4 \1 e9 t- ^7 {test.img' j1 w7 g* G8 i# M( g* I0 \* ~

    - B- v' ?9 Y/ R& E2 J. Z

  • 0 y+ ~/ C; _" [( w% c

    : ~( ^* U. x% i# u) ~$ t[root@osd1 keepalived]# rbd showmapped
    0 u( H5 B; d5 A9 `! \

    ' q/ Q% t; t- N; k% o- }! b4 b) q2 q/ T: k
  • , f% c/ e# A/ B: O( [% l& G. {

    # ?5 `& o' M+ B% e/ vid pool image    snap device
    / j* r& p  p/ ^$ |
      o0 u) r1 W8 f7 R- H  h3 H) \8 A

  • 3 |1 b# P2 f! z. Z7 j

    3 ~& Z2 ?, c9 O+ B% `0  test test.img -    /dev/rbd0
    " i  y4 V6 ]. {8 n$ J& \

    7 W5 S# S; i1 E! T  f$ A+ i  m
  • ' `8 \2 {9 A1 c* t: P: F. i5 Y) K  b

    0 N, N0 u1 |9 ][root@osd2 keepalived]# rbd showmapped  z  O: D/ _" ?& n) n' V9 x
    , Q' Z1 k. B( t* l0 K9 b1 ?" T& j

  • 2 K, ^* ^" E0 u4 \0 P+ C9 S4 e9 Q

    " B, ]" N6 X4 y. l8 A+ |. R! ^( A# ?' y6 qid pool image    snap device1 a$ K4 N5 f% W1 Z6 S5 Q# [

    % _" V# n  g4 V: F6 x0 K2 n( U  c

  • 8 c) q/ a0 L# @; v6 z
    ' W# ?/ [1 v3 u, z0 v
    0  test test.img -    /dev/rbd0
    6 z1 |3 q- S# M2 e! y+ c

    7 \, B7 Z- a  I3 A; {3 z% T" c: s' s+ \+ W

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

2. 配置keepalived7 M3 v1 u' z. ~1 z" M& a

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


  • 8 {& V! e, t1 c# [; ~3 t
    ! s5 k: h% q9 I7 B3 K. d1 p
    [root@osd1 keepalived]# cat keepalived.conf
    ' B* p# L) i0 V
    ; x6 Q) f3 t" Z; o
  • 9 ^- G5 p1 F* F* K$ Z( O6 d

    ) W# I; S* s% \global_defs
    $ ^9 ]2 F0 G) k1 g% d2 y6 r

    - H& j: n+ ~; c& \5 i

  • ' b" g% P+ Z. {4 P/ o9 }- Z% V1 ^; k, u

    + ~( Z$ n, a# }" _: F{
      ], g% C% b) u5 `# U9 [; F' B8 z8 }8 b% w

    % c, E' q0 Q/ H- r1 o- V: v
  • # m: @% J1 z+ D
    8 ?/ g5 R1 M' Q  S
        notification_email
    . Q* e* d9 b3 e! e; E

    0 Z+ Y: q4 Q7 A8 h) y6 t& |* u' w
  • " b, ]6 m( V' g7 C0 s* E
    1 W! K& \  J& [4 ~' W$ O: @
        {
    : \) o- A7 Z1 s* s3 P

    8 k. e- K2 \. v; }
  • ; A, S& p( d" M: q7 ]4 j$ K

    ( m. k; c& e6 X0 i; n    }5 L7 I1 A0 C- C; `/ i, V. }
    # o6 D1 [) r. L$ |0 Y
  • % ~3 N3 s+ W5 v# _0 N" O7 \1 ~4 b
    5 \$ k' Y. r% H# C5 a5 ?
        router_id osd1
    * F' k( x* F  v. X
    - R: N0 s. ]$ n, m

  • 2 \3 `" I, N- x# m
    ) v4 _9 @8 w( z' I: K. a$ {8 ]3 e
    }' O9 \0 z( k: m- c

    / K1 Y" q4 q: o5 h3 C) G6 A* c
  • + x' _  h& W0 _8 M2 X

    5 U; G  v3 W6 \' Y5 e7 W3 c
      G* E0 H. @5 ~5 w+ B8 k

    5 f) \4 `+ j% @3 S* k
  • , f4 K7 Y2 l# p! Z9 T- ], c  n! J
    7 r+ _$ q/ v1 b3 m
    vrrp_instance VI_1 {
    & V+ U& e) ]6 \' `# `- u) B. @

    - x6 k0 r' Z$ a* K" s+ y$ f+ l( _

  • ' E2 V. d/ a" l; T
    " \( k2 s4 x$ p# A+ [5 J* t
        state MASTER
    - H, x+ V: R( f# v
    ) }  B1 h8 |0 m7 N% F6 s, V

  • 7 Y3 W+ H! Z  i3 e  a
    * s5 r+ U% J, y0 T8 g5 {
        interface em1- i) t; K% P; \9 G- |
    9 m/ y* D! i$ U- E  A8 M
  • , c' I6 @# Z7 ]# L* S' ?4 z/ i
    & g# P! L1 \9 ]. D" F% K# D% R0 T" g
        virtual_router_id 100
    6 Q# Y# o$ f3 R# z

    % s+ B6 b6 ~1 S6 l
  • 9 r2 \% H# X1 l6 X9 e$ m2 J
    ! H, l" ^- B' F$ F
        priority 100: I5 ~" ]2 J  F. q+ g

    6 \0 M/ A- q& R$ i, Q% X. l

  • ; [# O( l/ N9 ?2 q1 R: k) I  b2 ~
    . q  k1 z1 i2 H8 @) N
        advert_int 1$ W: \5 ]2 @5 a) I+ A
    0 b( F# w5 J9 Q5 s
  • . e: ?% U+ a  {$ e8 g- m* _5 \
    . [! B: @: X9 e" J6 ^
        authentication {, ]" U) ~% H- r6 V1 p3 Q! ~; P

      j# s' X' k5 w8 C4 q6 V

  • , O: d, S6 G" Y7 r" v9 H

    3 {- X3 E/ S! L7 W9 {        auth_type PASS" p; k; E9 e! \: h' J. V; L
    ! T' ?% w1 D# \- Z  y. y3 g; l( a  E
  • : l$ m, }4 s& b1 q

    2 d4 C+ @2 B' O" _; S* B        auth_pass 11113 h- H' S5 K1 h

    , g0 H, J: g& f0 F+ u* _( P, ?$ k
  • ! L, h6 c5 w; b, l4 f. W! D" |. u" Z3 E$ A
    / l( ^! {4 s; V+ Y( e2 W
        }
    " a1 c7 W) h7 W5 d8 e/ h; {

    0 g, v2 A7 x- ?, S6 {

  • 6 `# w3 J1 q% r) }& ^

    3 }! p# d$ h2 N- J7 X2 j1 u% s1 J    virtual_ipaddress {6 M4 d/ S6 k9 V* G* {

    5 w) ?! X3 q8 [; X( w

  • # m1 G7 \5 U; Q: i+ ~0 G6 S. S' T
    : Z: c' w# \6 P; `, l; `
            192.168.32.5/24
    5 l* B  i( Q$ [" }$ T
    * W6 E. h, |( I( u8 i

  • - S0 i) a. G- |. \

    4 O' t6 J1 `) ^5 K+ u2 W6 a    }
    & `9 a& L2 _$ N  }2 X
    # H$ X1 y" h6 q* |

  • $ c+ m& o7 z* L2 D7 \

    ) C  X! ]; f  Y& i# f}  g& X4 y" b. A( g: K
    . p" s9 X, L& F" E5 z- S
    3 i& o; F% {  o* N- Z5 U/ n0 L

osd2的配置如下:

  • % i3 X1 f- s3 J
    6 ~( Y, u6 H( P, U: v5 ]6 p, y% S  c/ z
    [root@osd2 keepalived]# cat keepalived.conf( Y, u$ o- l: I
    4 S: ]9 b; r6 G# Y5 e7 J# i

  • 9 c5 w$ v$ i; a

      S& D$ [5 x4 x- `global_defs
    # U. I! l) Y: T+ O

    - G/ v6 `6 Q7 T: a- z$ w% b9 u

  • " R/ M0 h5 |" u& Y3 U! J, Z) K9 ]% H( E
    9 P9 f* M# Y6 A; s$ K
    {
    : s' L( B9 Q: R4 b- F$ j, t
    ) F* E! Q- d$ j8 L9 Z

  • : }$ a. p" A1 b+ {

    0 u6 ~3 e; F# n    notification_email
    4 g$ M4 b9 Q) Q  c. m1 @' S. r
    % n  v5 n6 j7 L6 K: \
  • ; b) C' H* r$ \" ^2 N
    6 k! t1 A* C7 k
        {  l. N+ S: c4 {! x( {2 Q

    , W  @/ c- `9 \+ E- H& I

  • 4 r* B9 w% O9 c6 }) `
    6 ^7 o- _* D" j. ?
        #    admin@example.com6 W! _5 V  s! C9 _0 D$ O
    ( A7 p, Y, {1 U5 c7 C9 D

  • ( K7 ~2 X) N1 F% m+ t- K

    ' m' \& B6 D2 Y  E5 X" Q& G    }
    0 w# T# A7 I& D$ e) a, W2 P# s
    . U  E6 @* N4 A, M7 G  H

  • 4 c% T0 ]: E2 T0 p4 C' J; T
    0 `3 ^! A$ S" p2 r
        #notification_email_from admin@example.com5 t: x2 v" \: S' y' v* P

    7 N- r' X, P+ I! g' j1 Z; P

  • 9 |, }* f% a: \: {  J
    7 }: z5 q# m# Q" Q
        #smtp_server 127.0.0.1
    3 y' \0 b! i! m/ l

    * ^: g  P$ A- V. V" Z* L6 ^
  • 8 U6 ?& G# {/ H4 ?
    " r' \; @4 |* y
        #stmp_connect_timeout 308 `0 V% \1 y3 Z0 D
    % d! N1 g7 t% F& A5 b
  • ' q9 j/ I5 n& q2 I8 }' a

    5 ^. F3 m! B4 t0 y4 ^/ g) f1 O" s% B  A    router_id osd2
    ' ~' o' T, p# l% z

    ( ^- R5 i4 T+ P. G
  • 1 u( G6 H6 C1 a! f8 Q& P+ M

    ' i$ m- a0 g& F0 _# b4 Y: ?}) _) l# B5 `# _. M

    ' t( F/ u* Q; I  M4 I, T
  • . D8 Z9 [& k' @; C- b/ V

    ! i7 W# o% F+ K" r, j7 x  c: T/ Y) O8 f" `) H
    , M3 t/ J3 R6 @3 F, v" x0 J
  • ( L: r" Z$ H7 Z7 `) ]9 ?: t
    ' i) p% c% i* Y
    vrrp_instance VI_1 {5 v2 e" O7 w" o2 T5 b) P" B- U

    7 Y8 D( v  S; V. f
  • , H7 j; k# _, m2 ~, e( I

    & V2 r7 Q1 N9 j  g, O  _* y" w    state BACKUP
    # G" ?5 C# V* N' l9 Z1 o/ e% @

    $ U9 B8 r' j; V6 |' s7 `

  • 4 Y9 Y  R( T/ Q/ i0 V7 ]: m

    ; V7 T! J" Q+ B: \    interface em1
    ; D, ~  L" p+ Y/ p) ]0 \
    3 N) I9 [3 ?3 y, d6 M" J; B
  • 4 E! q" Y/ }5 ]- E
    & \# B# @3 H/ f' N$ t8 y
        virtual_router_id 100* u* ~& E5 H: d( E$ ]$ Y1 q5 ]" ]

    0 y8 |3 n, I9 _( F# n3 H
  • : a3 {/ r6 j6 n( ^5 m  y! r

    / v0 R2 [6 b- j7 J* o( |) U    priority 99
    1 k5 U% M1 T. p) l/ d( U

    4 U7 {# X+ k6 G; u. G$ F# i: S
  • 5 O0 [3 _: ?; J2 p

    ! {! H* ~4 `+ Q! t# x3 I& n    advert_int 1
    $ h! Y. n4 z: a! W- W  ]0 ^
      u3 r. K/ g8 B1 A

  • ) ?. c  q, O+ u

    3 F/ y' n% S2 s$ I! o2 S" t( G8 _    authentication {
    4 N& z: g: i) b* j

    7 K1 Z4 g" q( _9 p0 T% _: c0 D
  • ( A/ i& R3 F% J% h0 m  A& Z
      u; {# P* i' z4 K3 C! P* l3 G
            auth_type PASS+ z4 y0 q# w) t% e6 C5 P- a

    2 B6 @! Y3 k+ h! z0 F
  • 4 Q# r7 p7 c" l. y' p
      l, a6 c+ A7 \/ Z0 J
            auth_pass 1111
    ) R- f* r) M6 T- U/ x1 [

      V  W2 b% d  N% s

  • 8 m6 W* z+ z- i1 |' |, {8 t: |0 Q
    ( O" L, X$ t8 _* {
        }9 R$ x& m# Y- R& D( @5 O! W
    4 n  H( A9 k6 ~4 f3 O  ^9 K

  • $ b) ?2 u6 ?  W( S7 I

    8 M) L$ |. S2 P" O' y    notify_master "/etc/keepalived/ChangeToMaster.sh"2 ^& a* W& q) q3 A# I
    ' K7 |3 V$ s" i# ~3 f
  • ! Y6 x- _! ?% E3 ^) s

    & k- I3 W& q6 b; |# S    notify_backup "/etc/keepalived/ChangeToBackup.sh"/ C# X) p( t, i( X

    ' J$ G2 h7 l) f  b6 h$ Z6 e# Q2 D
  • 2 b) X0 M; T8 h0 L/ j& S" U" ^5 z
    : M- h8 v6 n' Q- {- \5 H) S
        virtual_ipaddress {
    & W  }+ T$ t- `( j8 B7 i( {5 }  }/ M0 ^

    & O6 s5 r+ S) t- ^+ u' z1 |# n

  • ( L! m5 T1 r7 X- o6 V7 x$ c3 V
    % @4 E) _& V# Z( f, O3 U) t
            192.168.32.5/246 Y# ^# s* I% j

    & E" S# e2 `9 m& B. G( ?

  • . a. j# {# u( Z8 I" N

    ; E8 i0 \$ Z- t1 g* B    }
    , Q8 V7 y2 K9 v; g. ?
    7 e" ^0 L$ E1 P3 }3 T( ~) V: Y
  • 2 w9 v, G* l+ Y
    + U8 b- g; {9 m% h$ s
    }6 u3 B6 F2 C; s& K0 K) j

    8 Q  H+ h! k+ _' Z% A" N1 l2 V- p5 M/ C

在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
, V( \7 e* ^- A

在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. 测试
/ }- ?* [. C9 R) L4 R' w; [+ z

关闭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:02 , Processed in 0.020201 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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