设为首页 收藏本站
查看: 988|回复: 0

[经验分享] 2 NFS高可用解决方案之NFS的搭建

[复制链接]

尚未签到

发表于 2017-6-23 10:26:07 | 显示全部楼层 |阅读模式
preface
  我们紧接着上一篇博文的基础(drbd+heartbeat的正常工作,http://www.cnblogs.com/liaojiafa/p/6129499.html)来搭建NFS的服务。

NFS主备服务器都安装NFS
  安装NFS
  我这里使用的CentOs6.6默认是安装了NFS的,如果你的没有安装,请使用下面的yum命令安装:
  

[iyunv@nfsmaster ~]# yum -y install  nfs-utils nfs-utils-lib nfs4-acl-tools  
[iyunv@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并配置它
  

[iyunv@nfsmaster ~]#  service rpcbind restart  
[iyunv@nfsmaster ~]# service nfs start
  

  
[iyunv@nfsmaster nfs]# cat /etc/exports
  
/nfs  192.168.1.0/255.255.255.0(rw,sync,no_root_squash)
  # 共享哪个目录 ,允许哪些client连接,具有什么属性对这个目录。
  

  
[iyunv@nfsmaster ~]# showmount -e 192.168.1.100   # 查看是否有共享目录
  
Export list for 192.168.1.7:
  
/nfs 192.168.1.*
  

  NFS的exports配置文件需要copy到backup 服务器上。
  客户端挂载它
  
客户端需要安装nfs库,不然会提示下面这样的报错:
  

[iyunv@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
  

[iyunv@nfsclient ~]# yum -y install nfs-utils  

  安装完之后挂载nfs,使用vip
  

[iyunv@nfsclient ~]# showmount -e 192.168.1.100  
clnt_create: RPC: Program not registered    #出现这个错误的话,去nfs服务器上确认是否NFS服务正常启动,重启下即可
  
[iyunv@nfsclient ~]# showmount -e 192.168.1.100
  
Export list for 192.168.1.100:
  
/nfs 192.168.1.0/255.255.255.0
  

  
[iyunv@localhost ~]# mount -t nfs 192.168.1.100:/nfs /database/
  
[iyunv@localhost ~]# df -hT

  
Filesystem         Type  >  
/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里面删除最后一行:
  

[iyunv@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来申明要共享的目录。
  

[iyunv@nfsmaster ~]# > /etc/exports  
[iyunv@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。下面就看看这个脚本的内容:
  

[iyunv@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添加上这个脚本
  

[iyunv@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共享目录后创建一些文件:
  

[iyunv@nfsclient /]# mount -t nfs 192.168.1.100:/nfs /database    #  
[iyunv@nfsclient /]# cd /database/
  
[iyunv@nfsclient database]# touch {1..10}
  
[iyunv@nfsclient database]# ls
  
1  10  2  3  4  5  6  7  8  9  lost+found  readme
  

  关闭nfsmaster的电源,模拟宕机。此时等待VIP漂移到nfsbackup上面。待漂移到位后,我们继续在nfsclient上操作:
  

[iyunv@nfsclient database]# ls    # 可以查看目录下的文件  
1  10  2  3  4  5  6  7  8  9  lost+found  readme
  
[iyunv@nfsclient database]# rm -f {1..5}     # 也可以删除文件。
  
[iyunv@nfsclient database]# ls
  
10  6  7  8  9  lost+found  readme
  

到此NFS高可用就做完了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387210-1-1.html 上篇帖子: Harbor实现容器镜像仓库的管理和运维 下篇帖子: 使用SecureCRT / win7远程桌面连接ubuntu配置记录(有更新)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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