2 NFS高可用解决方案之NFS的搭建
preface
我们紧接着上一篇博文的基础(drbd+heartbeat的正常工作,http://www.cnblogs.com/liaojiafa/p/6129499.html)来搭建NFS的服务。
NFS主备服务器都安装NFS
安装NFS
我这里使用的CentOs6.6默认是安装了NFS的,如果你的没有安装,请使用下面的yum命令安装:
[root@nfsmaster ~]# yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools
[root@nfsmaster ~]# rpm -qa nfs*
nfs-utils-lib-1.1.5-11.el6.x86_64
nfs-utils-1.2.3-70.el6_8.2.x86_64
nfs4-acl-tools-0.3.3-8.el6.x86_64
启动NFS并配置它
[root@nfsmaster ~]# service rpcbind restart
[root@nfsmaster ~]# service nfs start
[root@nfsmaster nfs]# cat /etc/exports
/nfs 192.168.1.0/255.255.255.0(rw,sync,no_root_squash)
# 共享哪个目录 ,允许哪些client连接,具有什么属性对这个目录。
[root@nfsmaster ~]# showmount -e 192.168.1.100 # 查看是否有共享目录
Export list for 192.168.1.7:
/nfs 192.168.1.*
NFS的exports配置文件需要copy到backup 服务器上。
客户端挂载它
客户端需要安装nfs库,不然会提示下面这样的报错:
[root@nfsclient ~]# mount -t nfs 192.168.1.7:/nfs /database/
mount: wrong fs type, bad option, bad superblock on 192.168.1.7:/nfs,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
出现上面的报错后,安装nfs-utils
[root@nfsclient ~]# yum -y install nfs-utils
安装完之后挂载nfs,使用vip
[root@nfsclient ~]# showmount -e 192.168.1.100
clnt_create: RPC: Program not registered #出现这个错误的话,去nfs服务器上确认是否NFS服务正常启动,重启下即可
[root@nfsclient ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/nfs 192.168.1.0/255.255.255.0
[root@localhost ~]# mount -t nfs 192.168.1.100:/nfs /database/
[root@localhost ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 28G 2.9G 24G 11% /
tmpfs tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 ext4 283M 28M 240M 11% /boot
192.168.1.100:/nfs nfs 9.8G 23M 9.2G 1% /database
# 挂载成功。
模拟Nfs-server故障
我们把NFSmaster关机,此时客户端不管是df ,还是进入到/database下面,都是卡死的。解决办法是在/etc/mtab里面删除最后一行:
[root@nfsclient ~]# cat /etc/mtab
/dev/sda2 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/sda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
vmware-vmblock /var/run/vmblock-fuse fuse.vmware-vmblock rw,nosuid,nodev,default_permissions,allow_other 0 0
nfsd /proc/fs/nfsd nfsd rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
192.168.1.100:/nfs /database nfs rw,addr=192.168.1.100 0 0 #删除这一行即可。
由此可见,这个heartbeat虽然会让VIP进行漂移,但是呢nfs客户端依然是不可用的。所以我们需要采用另外一种方法来来export共享目录。
删除export里面的内容,使用命令exporfs申明要共享的目录
我们删除/etc/exports里面的内容,然后通过exportfs来申明要共享的目录。
[root@nfsmaster ~]# > /etc/exports
[root@nfsmaster ~]# exportfs -o rw,sync,all_squash,mp,fsid=2 192.168.1.0/24:/nfs/
上面这种exportfs的方法同样可以申明共享目录,nfsclient也同样正常使用。
高可用方案
经过dbrd+heartbeat+NFS的搭建,以及exportfs的简单使用,下面我们就开始做高可用了。
说道高可用,不得不说exportfs这个命令,如果我们使用exportfs这个命令来申明需要共享目录的话,那么我们就不需要到/etc/exports里面再次添加这个要申明的目录了。
对于NFS高可用,我们需要使用exportfs来关闭共享的目录和打开共享的目录,这样做的好处就需要修改/etc/exports文件了,大大提高了方便性。对此,我们通过exportfs命令写了一个脚本,由heartbeat来接管这个脚本,当nfsmaster服务器宕机时,nfsbackup的heartbeat开始就执行脚本,脚本通过exportfs来共享目录,此时VIP也已经飘过去了,所以nfsclient受影响很小。达到了高可用的目的。更多关于exportfs的资料,可以参考man exportfs。下面就看看这个脚本的内容:
[root@nfsbackup ~]# cat /etc/ha.d/resource.d/rsdata1.sh #必须放在/etc/ha.d/resource.d下面
#!/bin/bash
FSID="1"
EXPORT_DIR="/nfs"
EXPORT_OPTIONS="-o rw,sync,all_squash,mp,fsid=2"
EXPORT_CLIENT="192.168.1.0/24"
exportfs_usage() {
cat <<EOF
USEAGE: $0 {start|stop}
EOF
}
exportfs_start()
{
fn="/nfs"
service rpcbind stop &>/dev/null
service rpcbind start &>/dev/null
service nfs restart &>/dev/null
echo "=======nfs restart========"
exportfs ${EXPORT_OPTIONS} ${EXPORT_CLIENT}:${EXPORT_DIR} 2>1& #通过exportfs来申明共享目录
rc=$?
if [ $rc -ne 0 ];then
echo "export resource ${EXPORT_DIR} error"
exit $rc
else
echo "export resource ok"
exit 0
fi
}
exportfs_stop()
{
fn="/nfs"
service rpcbind stop &>/dev/null
service rpcbind start &>/dev/null
service nfs restart &>/dev/null
echo "=======nfs restart========"
exportfs -u ${EXPORT_CLIENT}:${EXPORT_DIT} 2>1& 通过exportfs来取消共享目录
rc=$?
if [ $rc -ne 0 ];then
echo "export resource ${EXPORT_DIR} error"
exit $rc
else
echo "umount resource ok"
exit 0
fi
}
if [ $# -lt 1 ];then
exportfs_usage
exit 1
fi
case $1 in
start)
exportfs_start
;;
stop)
exportfs_stop
;;
*)
exit 1
;;
esac
这个脚本必须赋予可执行权限,且必须是LSB规范。同时在/etc/ha.d/haresources添加上这个脚本
[root@nfsmaster ~]# cat /etc/ha.d/haresources
nfsbackup IPaddr::192.168.1.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4 rsdata1.sh #尾部添加rsdata1.sh这个脚本名
上面的操作主备都需要操作。脚本主备都要有。
测试高可用性
此时VIP在nfsmaster上面,我们在nfsclient端首先挂载NFS共享目录后创建一些文件:
[root@nfsclient /]# mount -t nfs 192.168.1.100:/nfs /database #
[root@nfsclient /]# cd /database/
[root@nfsclient database]# touch {1..10}
[root@nfsclient database]# ls
1 10 2 3 4 5 6 7 8 9 lost+found readme
关闭nfsmaster的电源,模拟宕机。此时等待VIP漂移到nfsbackup上面。待漂移到位后,我们继续在nfsclient上操作:
[root@nfsclient database]# ls # 可以查看目录下的文件
1 10 2 3 4 5 6 7 8 9 lost+found readme
[root@nfsclient database]# rm -f {1..5} # 也可以删除文件。
[root@nfsclient database]# ls
10 6 7 8 9 lost+found readme
到此NFS高可用就做完了。
2 NFS高可用解决方案之NFS的搭建的更多相关文章
- 1 NFS高可用解决方案之DRBD+heartbeat搭建
preface NFS作为业界常用的共享存储方案,被众多公司采用.我司也不列外,使用NFS作为共享存储,为前端WEB server提供服务,主要存储网页代码以及其他文件. 高可用方案 说道NFS,不得 ...
- (转)Heartbeat+DRBD+NFS高可用案例
原文:http://9861015.blog.51cto.com/9851015/1939521--------------------------------Heartbeat+DRBD+NFS高可 ...
- 常见的MYSQL高可用解决方案
MySQL 是一种关系数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL 软件采用了双授权政策(本词条"授权政策& ...
- MySQL高可用解决方案(MySQL HA Solution)
http://blog.sina.com.cn/s/blog_7e89c3f501012vtr.html 什么是高可用性?很多公司的服务都是24小时*365天不间断的.比如Call Center.这就 ...
- 浅谈mysql主从复制的高可用解决方案
1.熟悉几个组件(部分摘自网络)1.1.drbd —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID" ...
- (转)MySQL高可用解决方案
MySQL高可用解决方案 原文:http://www.ywnds.com/?p=5565 有这么两个概念,数据库的可靠性和数据库的可用性,可靠性指的是数据可靠,而可用性指的是服务可用.但是不管是可靠性 ...
- Mycat高可用解决方案三(读写分离)
Mycat高可用解决方案三(读写分离) 一.系统部署规划 名称 IP 主机名称 配置 192.168.199.112 mycat01 2核/2G Mysql主节点 192.168.199.110 my ...
- Mycat高可用解决方案二(主从复制)
Mycat高可用解决方案二(主从复制) 系统部署规划 名称 IP 主机名称 用户名/密码 配置 mysql主节点 192.168.199.110 mysql-01 root/hadoop 2核/2G ...
- Mycat高可用解决方案一(mysql安装)
Mycat高可用解决方案一(mysql安装) Mycat关键特性 关键特性 支持SQL92标准 支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法 ...
随机推荐
- Realm Java的学习、应用、总结
从React Native珠三角沙龙会议了解到Realm这个开源库,然后开始学习.理解和使用Realm.Realm是跨平台.支持多种主流语言,这里主要是对Realm Java结合实际项目的一些情况进行 ...
- KM模板
var n,m,i,j:longint; ans:int64; sel,lx,ly,slack:..] of int64; a:..,..] of int64; visx,visy:..] of bo ...
- Who Says What to Whom on Twitter-www2011-20160512
分析性论文 what: who? 本文将Twitter中的用户分为了两大类--普通用户和精英用户,精英用户又被分为四类,分别为媒体(media).名人(celebrities).博主(bloggers ...
- mysql 定义自增
The database returned no natively generated identity value问题 alter table user_table MODIFY user_id I ...
- Code.R团队展示
团队成员: 031302620马凛凛(队长) 031302619吕昆明 031302319汪毓顺 031302404陈俊达 团队名称: Code.R 团队项目: 基于web的教师报课系统 团队成员风采 ...
- Bete冲刺第七阶段
Bete冲刺第七阶段 今日工作: web: 新增通知处理接口 ios: 重写登录逻辑,添加创建行程填写.注册 POP界面 目前所遇问题: web: web目前进展顺利,暂时还没有遇到编码的问题. iO ...
- model 的验证
Ext.onReady(function(){ Ext.define('User', { extend: 'Ext.data.Model', fields: [ { name: 'name', typ ...
- 一个简单的网页布局HTML+CSS
<!doctype html> <html> <head> <meta charset="utf-8"/> <title> ...
- Java对象的访问
对象访问在Java语言中无处不在,即使最简单的访问也涉及Java栈.Java堆.方法区这三个重要的内存区域中. 例:Object obj = new Object(); Object obj ...
- userAgent收集
UserAgent AppleWebKit,Gecko,Trident,Presto http://www.httpuseragent.org/list/ 谷歌:360? Mozilla/5.0 (W ...