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

  • * K+ |6 f9 }6 g; @
    " f. E0 O2 R* C
    [root@osd1 keepalived]# rbd ls test
    4 z, p% O3 o- H* z* D, e
    0 [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( G
    6 Q" }  k9 L, C" V$ C
    {
    8 X" W; r- ]' u8 E
    4 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: T
    7 ]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% g
    1 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  Z
    0 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 j
    2 {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" i
    9 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 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 00:04 , Processed in 0.047582 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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