linux nfs drbd mount,基于DRBD的高可用NFS解决方案分析

之前对DRBD分析比较多,但是一直没有找到该怎么用他。最近又在看NFS协议()。分析了NFS4对于的迁移、复制和服务端重启等场景的定义。DRBD提供块设备,其上是文件系统,而NFS在文件系统上层,二者结合可以构建一个高可用的文件共享解决方案。关于DRBD,在之前的博客中有一些分析(tag:)。对于NFS,从如下示意图可以看出其在系统中的位置:

传统的DAS存储模型:主机直接连接存储设备,使用总线接口进行访问。

uid-20448327-id-4626049.html

而对于NAS,同时又客户端和服务端,二者使用以太网进行连接,最新的NFS4版本基于TCP/IP协议。

uid-20448327-id-4626049.html

NFS在网络分层模型中的位置:

uid-20448327-id-4626049.html

这样DRBD相当于提供了底层的存储设备,虚拟出块设备来,在该块设备上面建立文件系统,再将该文件系统上的目录共享为NFS服务,这样客户端就可以通过NFS来访问一个DRBD提供的网络镜像硬盘,当一端故障时,倒换,另一端还能继续访问。

我们知道,对于本地文件系统,只要知道文件的FID就可以访问文件的inode结构,进而操作文件。但是NFS则不一样,NFS的文件系统是虚拟出

来的,在服务端,可能有多个文件系统中存在相同的FID,因此必须用一个唯一标识一个文件的句柄,这个句柄就是由FSID和FID来组成。

再来看这里的高可用解决方案,DRBD是对整个块设备进行了实时复制,那么文件系统在双机的两端应该也是完全一致的。如果两台主机共用一个浮动

IP,由DRBD的主端来决定浮动IP绑定到哪一端。当发生倒换时,原主端的DRBD镜像出来的共享硬盘设备切换到对端,在对端重新挂载,然后再启动

NFS服务,这样其实就相当于是NFS服务进程在本端重启了一次,对于重启,协议有明确的grace

time定义,只要服务端和客户端按此实现,那么对于客户端的上层应用这个倒换是不感知的。当客户端重新以其持有的NAS

FH访问文件时,在对端仍然能解析出FSID和FID,同样找到具体的文件来访问。

整个想法理论上面来说应该是没有问题。开始搭建这样一个验证环境。按照:文章介绍的步骤配置DRBD,挂载到本地/drbd目录,然后在NFS的配置文件中配置导出该目录。另起一个虚拟机,作为客户端,通过浮动IP挂载该共享目录,并开启复制一个大文件到该目录的过程,这样模拟业务在线。

在此过程中,进行DRBD、NFS和浮动IP的倒换。倒换流程:

1、停止主端NFS

2、倒换DRBD到对端

3、对端启动NFS服务

4、切换浮动IP地址到到对端

预期在经过了NFS服务的静默期后,原来的大文件操作仍然能继续。客户端不会提示任何错误。

实际的结果是,客户端提示NFS句柄无效。

本来还想找更高版本的Linux系统,验证NFS4版本是否能支持,但是由于Linux高版本中DRBD配置一直没有搞定,没能成功。但是一想,其实都是

RPC,都是基于NAS

FH,并不是协议的问题。DRBD设备上面的文件系统是挂载在系统宿主文件系统上面的,有一个块设备文件到文件系统的转换过程,对于NFS服务,根本看不

到原来的DRBD设备上面的文件系统,看到的还是根文件系统。虽然DRBD是保证了文件系统的完全镜像,但是挂载之后,二者的inode分配并不一致,因

此在解析客户端传过来的FH时,也是无法找到具体的文件的。以后有空可以分析一下NFS的源码,看能否通过其他方式实现直接共享DRBD设备上面的文件系

统的内容,而不是通过挂载到宿主文件系统再共享的方式。

补充:还是把NFS4和DRBD的双机方案给配置出来了,并且找到了文件系统ID与客户端FH之间的依赖的问题的解决方案。

关于drbd提供的块设备挂载到宿主文件系统后,服务端不能识别的FH的问题,NFS服务端在导出文件本地文件系统时,可以为导出的目录指定

fsid,如果没有指定,则使用一个UUID,这样修改exports文件后问题解决,能正确观察到DRBD和NFS倒换后,NFS客户端业务不中断的过

程,甚至还可以看到客户端重传RPC命令字的过程,首次执行读写文件客户端挂载的nfs目录时,有较长时间的延时。

修改后的exports文件为:

[root@f2 nfs]# cat /etc/exports

/drbd *(fsid=1047,rw,sync,root_squash)

实验过程中用到的脚本为:

1、启动NFS服务

[root@f2 tools]# cat startnfs

systemctl start rpcbind.service nfs-idmap.service nfs-server.service

2、停止NFS服务

[root@f2 tools]# cat stopnfs

systemctl stop rpcbind.service nfs-idmap.service nfs-server.service

3、启动drbd

[root@f2 tools]# cat startdrbd

modprobe -s drbd

sleep 10

drbdadm adjust-with-progress all

sleep 15

drbdadm wait-con-int

drbdadm sh-b-pri all

cat /proc/drbd

4、将本端置为主,或者倒换NFS和DRBD

[root@f2 tools]# cat pridrbd

hn=`hostname`

dsthn="f1" if [ $hn = "f1" ] then dsthn="f2" fi

ssh $dsthn "ifconfig ens33:0 down" ssh $dsthn "sh /root/tools/stopnfs;" ssh $dsthn "umount /dev/drbd0; drbdsetup /dev/drbd0 secondary; sleep 2;" drbdsetup /dev/drbd0 primary

sleep 2; mount /dev/drbd0 /drbd sh /root/tools/startnfs

/sbin/exportfs -rv

ifconfig ens33:0 192.168.1.120

5、客户端挂载NFS目录

mount -t nfs4 192.168.1.120:/drbd /nfs

参考页面:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值