文档章节

keepalived+ceph rbd配置nfs的高可用

加油2018
 加油2018
发布于 2014/12/31 11:12
字数 1204
阅读 1.8K
收藏 1

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

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

[root@osd1 keepalived]# rbd ls test
test.img
[root@osd1 keepalived]# rbd showmapped
id pool image    snap device    
0  test test.img -    /dev/rbd0 
[root@osd2 keepalived]# rbd showmapped
id pool image    snap device    
0  test test.img -    /dev/rbd0

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

2. 配置keepalived

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/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig keepalived on
chkconfig --list keepalived
配置/etc/keepalived.conf。osd1的配置如下:
[root@osd1 keepalived]# cat keepalived.conf
global_defs
{
    notification_email
    {
    }
    router_id osd1
}

vrrp_instance VI_1 {
    state MASTER
    interface em1
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.32.5/24
    }
}
osd2的配置如下:
[root@osd2 keepalived]# cat keepalived.conf 
global_defs
{
    notification_email
    {
    #    admin@example.com
    }
    #notification_email_from admin@example.com
    #smtp_server 127.0.0.1
    #stmp_connect_timeout 30
    router_id osd2
}

vrrp_instance VI_1 {
    state BACKUP
    interface em1
    virtual_router_id 100
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    notify_master "/etc/keepalived/ChangeToMaster.sh"
    notify_backup "/etc/keepalived/ChangeToBackup.sh"
    virtual_ipaddress {
        192.168.32.5/24
    }
}
在osd2写了两个控制脚本,用于osd2的keepalived状态改变时执行。ChangeToMaster.sh:
[root@osd2 keepalived]# cat ChangeToMaster.sh 
#!/bin/bash
service nfs start
ssh lm "umount -f /mnt"
ssh lm "mount -t nfs 192.168.32.5:/mnt /mnt"
ChangeToBackup.sh:
[root@osd2 keepalived]# cat ChangeToBackup.sh 
#!/bin/bash
ssh 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 stop
umount /mnt
rbd unmap /dev/rbd0
rbd map test/test.img
mount /dev/rbd0

3. 配置nfs

在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 start
chkconfig nfs on
exportfs -r

客户端查看一下:

showmount -e mon0
Export 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. 测试

关闭osd1的网卡em1查看结果:

[root@osd1 keepalived]# ifdown em1
[root@osd1 keepalived]# ip a
1: 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 forever
2: 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 a
1: 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 forever
2: 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 -hT
Filesystem        Type   Size  Used Avail Use% Mounted on
/dev/sda1         ext4   454G   79G  353G  19% /
tmpfs             tmpfs  1.7G  4.6M  1.7G   1% /dev/shm
192.168.32.5:/mnt nfs    100G   21G   80G  21% /mnt
打开osd1的网卡em1:
[root@osd1 keepalived]# ifup em1
Determining if ip address 192.168.32.3 is already in use for device em1...
[root@osd1 keepalived]# ip a
1: 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 forever
2: 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 a
1: 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 forever
2: 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 -hT
Filesystem        Type   Size  Used Avail Use% Mounted on
/dev/sda1         ext4   454G   79G  353G  19% /
tmpfs             tmpfs  1.7G  4.6M  1.7G   1% /dev/shm
192.168.32.5:/mnt nfs    100G   21G   80G  21% /mnt
[root@lm /]# ls /mnt
31.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,后面会进行记录。

加油2018
粉丝 150
博文 276
码字总数 246145
作品 0
海淀
架构师
私信 提问
加载中
此博客有 1 条评论,请先登录后再查看。
基于rbd+iscsi+corosync+pacemaker高可用nfs

一、软件安装 1.1一键安装包地址 1.2配置ntp(略) 1.3配置hosts(略) 1.4配置双机互信(略) 二、配置corosync 2.1 corosync配置文件(两台) # mv /etc/corosync/corosync.conf.example /etc/co...

安静美男子
2015/07/06
738
2
基于cman+rgmanage+gfs2+iscsi+rbd 高可用文件共享环境搭建

一、 架构图 说明:rbd以iscsi方式导出作为共享存储。Iscsi target为10.20.18.111 iscsi intinator为10.20.15.163和10.20.15.164。cman+rgmanager管理nfs-server集群,gfs2为集群文件系统,管...

安静美男子
2015/07/04
219
0
基于ceph-rbd的文件共享

Ceph rbd可以为主机提供块设备,利用块设备我们可以自己实现一套简单的文件共享服务。本文介绍基于rbd的文件共享环境搭建,原理很简单,将ceph client主机作为NFS服务器(类似NAS机头),将r...

安静美男子
2015/07/02
358
0
基于ceph rbd+corosync+pacemaker HA-NFS文件共享

1、 架构图 2、 环境准备 1.1 IP规划 两台支持rbd的nfs-server主机:10.20.18.97 10.20.18.11 Vip:10.20.18.123 设置在同一网段 1.2 软件安装 # yum install pacemaker corosync cluster-glu...

安静美男子
2015/07/03
897
3
iscsi、nfs与ceph

一、iscsi设置 服务器端 [1] Install administration tools.[root@dlp ~]# yum -y install scsi-target-utils [2] Configure iSCSI Target . For example, create a disk image under the [/......

加油2018
2014/11/04
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Day 4 掌握pip命令,管理好你的Python资源包

在文章底部你的每一次随手 → 分享、点赞、在看都很重要,感谢!!! 精华推荐:精选20篇满足你对前沿理论、技术和经验总结 开源优测专辑集合: 1. 前沿理论、工具和趋势总结 2. 快学Python3...

苦叶子
07/02
0
0
Motan中使用异步RPC接口

这周六参加了一个美团点评的技术沙龙,其中一位老师在介绍他们自研的 RPC 框架时提到一点:RPC 请求分为 sync,future,callback,oneway,并且需要遵循一个原则:能够异步的地方就不要使用同...

Java公众号_Kirito的技术分享
2017/12/27
3
0
JS逆向 | 防脱发的秘诀

作者:Jerryning 公众号:Python编程与实战 hello,大jia好,又到了练手时间了,这是我给大伙分享的第…篇逆向文章。前面的几篇猛戳下面: Python爬虫之JS逆向入门篇 JS逆向之新榜登录 JS逆向...

州的先生
2019/08/27
0
0
python练习-001

从今天起,我们进入python的学习,会根据每天一个案例的方法,由浅入深的学习python。 python学习对于初学者来说,最大的问题在于不知道自己学了能做啥,每天敲这些无聊的代码很枯燥,所以学...

致码高胜寒
2019/01/16
11
0
yolov5 简单教程

该库代表Ultralytics对未来对象检测方法的开源研究,并结合了以前的YOLO库https://github.com/ultralytics/yolov3在自定义数据集上训练了数千个模型而得到的最佳实践。**所有代码和模型都在积...

人工智能遇见磐创
50分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部