找回密码
 注册
查看: 6401|回复: 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) a

    ) w4 l) R. S# Y$ g, d[root@osd1 keepalived]# rbd ls test
    ( `5 Y6 T0 b5 A) @5 R7 C1 {' ^

    $ b( l: f. \5 I/ Y

  • % b% E. `+ h" P' f

    * [! |, f8 Y$ J0 S* qtest.img
    8 U2 w; q% t# n

    5 d: S5 Y' ]7 [% w

  • 7 ?1 M$ h# U  j  G$ h7 f8 A

    + ^4 i. ?4 T' z7 e* j2 X[root@osd1 keepalived]# rbd showmapped1 Y( U3 H- A, n* W. L' K

    $ P; f! }7 w, I' a6 @8 E
  • ' ]% `& d& c# S  J5 j5 y
    $ H, N7 s8 t" M
    id pool image    snap device
    6 i$ K9 g8 H9 ?6 I( m8 r; h% W
    / h3 I0 |& [8 I
  • - B% }5 J, G7 `& B, }

    6 H! W( b% A, B0  test test.img -    /dev/rbd0
      H) I' D+ \) c  I

    : Y8 i% t/ w: ~, v( e* }

  • ' H$ h+ X; Z, I# f: r

    1 @0 w3 p* q: y! f[root@osd2 keepalived]# rbd showmapped
    ! ^& b9 A  Y1 Z9 }3 s" ?
    , z7 w; |! `1 y% T0 R( s
  • 4 O9 r% W9 g! W4 U1 H+ h

    , [  Y" k9 w; c" |& S$ R! \. t: n5 did pool image    snap device
    # R: {2 b& s6 Q+ Q1 S
    4 v! O2 r: |3 n

  • . ]; u1 z" z8 ]. `7 x

    8 ]# u2 X* G+ j/ l+ Z0  test test.img -    /dev/rbd0
    # I# @3 j$ a8 F) h8 b2 ]; b
    % |! N/ S7 {# x0 R% r; N

    : w- v2 N$ ~6 K! Q7 g

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

2. 配置keepalived
# j4 [7 S0 m- p. s' Y' ?! m% ]# \

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


  • 9 z- G2 e, z% D( D# o, Y1 F. u& ?

    - ]. ?" J; _/ i' \% y1 ][root@osd1 keepalived]# cat keepalived.conf& ~! F; w2 R( \1 L! e# U
    ! z+ A. w3 z& Q( j* `+ N' W- l! v

  • $ h3 u: p$ R7 Z6 g
    , D8 D# i) P. q% T( ~9 J4 ^; U
    global_defs% c% L# u% B9 Z! w; ~& N# [. _

    3 {/ m/ p- L7 {. J
  • ! k; p7 }7 ~, V0 E. w
    % ]# s- d& H0 Y/ H% O/ E6 }7 q; g
    {
    , p* G/ ~& a/ w+ U7 c
    . Z2 v4 _7 w' w  p- ^

  • ; S" U+ g3 x. @6 Z: N9 \

    2 u2 T- ?* K0 E5 y# n    notification_email8 V4 G  X1 v% X& L4 l: {

    ( o# U' e- ^. I+ g2 \, m
  • & G- }4 }' \7 L+ U6 C

    3 Q% r- n5 {9 O* k2 {. Q3 D    {; e- {5 ~& N  `9 v' a

    $ s: _: a% F  c" _/ g/ ^. n& a& P
  • & P/ J* ?) v' s+ ]

    9 A( k; S# D" a+ X" Y" N/ ?    }
    8 J, Y# O( ]+ [6 Z% v! K
    2 g3 _4 s, C; o% q) T6 b

  • , J1 M( q. d( Z. q! `  p4 k

    % `" ^' F2 X; j; _2 v% T5 C/ C    router_id osd1
    2 j5 q! k& F) H5 z

    ) J8 a. u6 P# k% p/ ~, P

  • ) v7 @4 O* a/ V* R) I# v4 @7 k8 b

    , H6 I2 C) \4 d" _) Q9 L}
    1 W8 l3 ]$ W% U; G3 d6 {% Q

    0 j; Z) p# G3 V* `8 y

  • - M- E- C' H, T/ e

    ' N7 k8 A; l( X/ O1 X& h" b, X- z: I4 G

    4 f0 e! Z" E$ C" C& \

  • 0 q5 X( S) l/ n: M& u" ^

    - Z( ?4 U9 Q* T0 W8 J* wvrrp_instance VI_1 {
    0 @$ ^) t. W1 F  |) M  [2 w
      F( m  m  i3 }' u
  • ; `/ m) r! B' Y% u* j% b
    & q' }2 F1 }7 H  q4 x0 N; `5 i+ |
        state MASTER: ^4 Q2 w. k+ {3 b
    % I9 H& ?1 m) a5 X

  • : X+ ~; {8 Y+ {% E2 O2 K4 ~/ t

    7 J; ^; N9 `' M  ?    interface em1
    5 L' q) k, Q( H0 X7 h. E
    % o' D8 g/ ~1 y/ r1 H0 ?

  • 0 s; h- }3 p# G$ W; a
    " x3 P4 {0 L4 W
        virtual_router_id 1005 h5 h: G/ ~( H. D" _# ?9 R
    8 G/ P6 _1 w1 B& G2 w2 q# L* f
  • 2 c( Y( y( m7 W1 [

    4 ~% M/ T% R  R    priority 100' \1 f* W' N8 w; z' H. h
    6 S  I7 |7 }. N: c4 q# c& H

  • ! D$ Q8 _: w6 E( E5 f: n0 f
    0 \- A' s* w9 ?- j2 w: M
        advert_int 1
    ( v; R* W# J1 G& j' K

    ) w- h0 R* }( F. d% o& J. `

  • 0 I3 {+ w9 H# c9 @

    4 [4 i3 c; ~  f! M    authentication {
    8 X4 R. F% ]" D
    ; V2 X" }4 z6 G

  • & E# b+ D' Z. A& m) C

    ' G" h  N1 B! [        auth_type PASS5 q. G$ p/ r/ z. d
    5 O6 Y. |6 d6 o5 H8 B. W- H" _* u
  • & H( A( W1 s/ o# P/ n) \" l3 r
    8 t) S/ K# y6 R' f5 e5 N) f
            auth_pass 11117 y" T8 v- v9 k7 l) @% t  k
    ! ?% J) D& F+ q7 @& \6 b- r+ h* l
  • & I6 d* E7 D8 f- z) e! d. n% y& @! M
    ( o5 m. c  b% n9 M5 \4 h$ t
        }1 ?/ d! A' W/ D" U8 w0 Z
    ' w) c2 |( o" Q9 n6 [
  • ' H/ e$ v5 Q& S0 I% f
    ! F' Z5 q$ b* f9 _9 \) l
        virtual_ipaddress {
    " G7 q( M: O- J, C( [

    7 B% u( B& U( I
  • 6 x" q5 O& ]: @; b! ^  T5 h
    $ k  F, E9 N5 a2 z% e) W
            192.168.32.5/24) f- W$ X  }0 y3 Q3 T" J1 s2 C

    5 s# ]% A& |0 P  ~
  • 9 [& f4 d/ J9 s6 }9 e* ~

    & j5 q' n# p& Q- y. D% I) M    }  c3 ]/ b/ t. O1 D8 d

    5 z( z* \3 s/ ~) _& \+ c6 {
  • ! G  e. h4 N- V0 o$ n  ]8 b

    * Y1 M6 |7 a  K% J}
    7 H- G0 ]2 e2 C7 P* t

    0 X8 x3 `: u2 `3 p6 y# [* h9 Q0 y

osd2的配置如下:


  • ! g  c# S( A) d7 ?; ?7 U2 b/ t) A

    6 Q$ C$ A1 H, A" F  g( q& U0 z[root@osd2 keepalived]# cat keepalived.conf- b( [' r) @% I- G
    3 `" t, u- Q' t7 s4 q
  • 5 F; |; R9 a6 ?' P) u
    7 a: ]0 o2 |, Z! s7 e
    global_defs: V  }2 ]: h& l% ]6 N9 U* S( Q
    ( g( j7 Z" m5 \- Q% v$ J% R, y, c

  • 1 C' s( m8 [5 f/ S( ?9 o  c+ U

    # I4 Q& n  E9 f0 X7 B{
    7 a, W" ]) A6 g) ~- g5 ]
    ! F& H  v. j' U9 J. ~8 C1 D
  • - F, k0 t0 V1 L' G- |  L& u

    & U) X' a3 \# C. Y/ N    notification_email
    - z& K; W) Y. k( B0 W

    , I0 \) t* V: q
  • ' b" G7 ?* d& {# Q+ B! p
    - `; S3 f0 J9 u: J/ P: ?# [* F
        {, O, \2 |0 z1 e6 w8 Q* Y$ p
    / C0 j! f/ [1 |+ p, t, E. a$ E

  • * F& i( f6 X$ N. s  J+ H( Y# W

    7 d0 G, w4 s! [- ~* V. ~    #    admin@example.com% {; `: Q2 |. N
    ) X3 I9 e7 @4 v

  • & U: S) @3 {0 [1 k0 m) i2 P
    % m! L' z# q! x
        }2 P1 A) W+ ~1 r2 e3 s
    ! E' Y* `  N0 ]7 E' w

  • : l; N- _/ o6 F& V: E- w

    ! \( a% j" J' ?5 M1 B1 f    #notification_email_from admin@example.com
    % y$ W2 c) Q9 R8 y

      s% `/ y& h% l. O
  • $ _9 Q) G$ C6 G" e, S4 I

    ) ]. c8 p" h2 O6 E' ~    #smtp_server 127.0.0.13 z1 B4 B- h6 s, k9 c! ]: K+ n
    . p6 R! L: {) G7 R& i

  • ' U! W" m4 q: w& i8 v# y4 C" @( d' D
    ; \* E9 j, L0 O3 {- }" _
        #stmp_connect_timeout 302 M5 E/ H" I" X, M! ]
    3 r6 j/ I9 m: Z  z5 z5 y; J% {1 \

  • $ `& V4 X5 }% T" j; }

    : H. _' d1 F# B/ j    router_id osd2( ~( m% ]4 D" U$ E

    1 r: v) g! k1 l8 }2 ~9 G

  • 9 g0 D- x4 Z9 ^* ~1 I* @: {' y$ i

    8 k3 X0 q5 _  `% ~3 c) h6 x0 ^}5 v. `. z& g- A0 [8 _# R
    5 s; x5 L) q% y! P6 {4 a6 o; Y
  • ! i" ^5 p- O7 n  C% y& |+ `! h
    ! Q( o" w% y3 q: h9 ]1 i

    1 [4 o! \4 H% O

    $ F4 x8 y( Z- v! y

  • & p8 W4 s) g, v% B" P
    9 n8 h' m; q5 Q0 `
    vrrp_instance VI_1 {# V8 `  h- y8 U; {8 L9 |  k& M  x
    ) i( c6 ]2 t0 _- x

  • ' ?6 g8 R& h" K/ [7 `

    % Z7 I" u- A* j    state BACKUP
    ) A4 `2 w% a- S( x( e; V9 C3 C$ u

    * V- q. S, S" @! n5 ]+ d* P2 N

  •   ?/ P$ `( n) A
      `5 Q8 ]1 g1 M5 l
        interface em1; D- G  l) w) S  s/ x7 w

    3 p$ N; `$ E8 W
  • $ t8 ~4 _) [- R6 j; g( W3 P
    , Q: d: C- k; ]
        virtual_router_id 100
    - T* B& }" H2 V. r! T6 Y$ D
    ( y" |, P( ~9 L3 ^: e

  • * V# O  C9 s0 Y9 Y2 V

    $ }) s  B" \5 C; j    priority 99
    " v' Y# ]! k: Q+ E2 u
    " P, N  `# S! t( T
  • , X+ {0 D4 k, y" M, l* o
    , w( I+ O& Y. l4 I3 g
        advert_int 1" Q( ]7 R. ~5 W9 z1 [+ t

    * ]: G4 z' a: U" f3 k1 h" E5 V

  • 4 S3 Q1 s( Q& Y0 }3 M7 P  T0 Z

    " y4 H! @- m4 ]4 S7 d& V    authentication {
    * J: |/ I  _; f7 }, T1 b
    3 |3 x$ j) a) W# b

  • - d! t( N7 N8 F+ T5 q1 Q3 [/ _

    8 k  U! A& Q, B' E# t) p$ z        auth_type PASS; E3 v! D# a' t9 {' x6 I1 A  D

    / v% T3 T! L( e
  • / o" [" y( z" I4 c# b

    3 Q" B* A, Q: z3 x* n        auth_pass 1111
    1 @( D  _+ C3 w
    ( U7 W, r  y; f8 _
  • 8 K! B1 J7 s8 [! I+ R" r2 q

    + S- c& g# c6 w' D( X% @. V$ c    }
    4 m* Z* b$ \7 M8 g& K4 x. [! `- B
    3 O' D! m6 f$ P' C0 E
  • 3 a  b& a0 [5 m7 _6 h: n& f; x' Z
    ; [& G  P$ Z5 S8 B# `1 h5 {; `: H
        notify_master "/etc/keepalived/ChangeToMaster.sh"
    " [7 _+ \- W2 F
    & U6 f" G6 j# S, g

  • # H/ ]0 E( G2 M

    / z# V( V3 b. M( `, _/ J% K5 n    notify_backup "/etc/keepalived/ChangeToBackup.sh"
    ( S$ m. ~5 Y$ ]$ q& L! b

    . e2 }8 p# I8 `. W# Q% O
  • / C% K3 W' W# i/ p3 b' O8 o) g

    ( t4 N( c: C) J2 ~# m0 N    virtual_ipaddress {4 {7 i, b  y' ^! t
    ! v: B- O5 ~3 S# M8 v- S! s. K
  • : D; c, {# x! N8 X, a

    ' L" K% M  j+ M3 ^, ~' r        192.168.32.5/249 ^/ k( h3 B4 K6 u2 ^

    , x4 e! M( D/ U9 h
  • 8 Y  j; Z- c% n9 P! ~3 x
    . {5 P6 J& s: N. t/ K
        }
    ; c/ f0 L. T6 b& S& H

    5 }6 N; H. `& q$ f6 G/ P! U

  • ; T6 D2 s5 j0 r: C

    8 i. c) |3 N% V}: r, f+ M* @4 \; k( c

    ) c! c6 d# D# p6 v0 X3 b, e2 J& c" `* Q1 a

在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
, q% b9 c  ?- t0 k

在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. 测试# ]& F. c) M  y

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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