基于DRBD的高可用NFS解决方案分析

标签: DRBD 分布式存储 drbd NFS4 高可用NFS双机 | 发表时间:2014-03-05 22:15 | 作者:童燕群
出处:http://shentar.me

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

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

  local

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

nfs_stack

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

  nfscomponents

这样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,挂载到本地/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设备上面的文件系统的内容,而不是通过挂载到宿主文件系统再共享的方式。

参考页面:

1、NFS4文件锁机制探秘 http://www.cnblogs.com/zhenjing/archive/2011/05/15/NFS4_lock.html
2、关于NFS http://blog.yikuyiku.com/?tag=nfsv4
3、NFSv4 提供无缝的网络访问 http://www.ibm.com/developerworks/cn/linux/l-nfsv4.html
4、NFS文件句柄 http://blog.csdn.net/ycnian/article/details/8506704

相关 [drbd nfs 分析] 推荐:

基于DRBD的高可用NFS解决方案分析

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

[转]DRBD 介绍

- - 小鸥的博客
Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间 镜像 块设备内容的存储复制解决方案. 数据 镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回). DRBD的核心功能通过Linux的 内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃.

Linux下DRBD配置

- - CSDN博客系统运维推荐文章
一、Drbd 工作原理. DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.(可以比较一下Linux的NFS)当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会 保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.

drbd脑裂处理

- - x-marker的博客
前面写过一篇关于使用drbd+corosync+pacemaker实现postgresql高可用的博客,其实drbd的对等节点如果不在线的话,即主节点的数据更改如果无法及时传送到备节点达到一定时间,会造成数据不一致,即使故障节点在长时间离线后恢复,drbd可能也不能正常同步了. 或者另外一种情况,主备都在线,但心跳网络断了而出现脑裂,两个节点都认为自己是主节点,也会造成两个节点的数据不一致,这样需要人工干预,告诉drbd以哪个节点为主节点,或者在drbd配置脑裂的行为.

NFS 文件系统源代码剖析

- wuyan - IBM developerWorks 中国 : 文档库
NFS 文件系统是目前最为成功的网络文件系统,在文件共享领域有着出色的表现,特别是 pNFS 的出现,使得 NFS 文件系统在性能和规模上有了大幅提升,为其带了更为广阔的应用空间. 同时,NFS 之所以备受关注,还在于它在 NAS 存储领域的关键作用. 本文剖析了 NFSv3 文件系统源代码,使开发工程师,技术支持人员,特别是存储领域从业人员对 NFS 有更为深刻的认识.

NFS-RPC框架优化过程

- EricSheng - BlueDavy之技术blog
NFS-RPC框架从编写之初,到现在为止(应该还会有些提升,不过估计不大),每秒支撑的请求数上升了好几倍,测试结果的演变为:. 以上测试结果为在100并发、100 request byte、100 response byte以及单连接下的背景下得出的,在这篇blog中来分享下这个框架所做的一些优化动作,希望能给编写rpc框架或使用mina/netty/grizzly的同学们一点点帮助,也希望得到高手们更多的指点.

drbd+xfs+heartbeat+mysql实现高可用

- - C1G军火库
DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.

pacemaker+corosync+drbd实现postgresql高可用

- - x-marker的博客
这种防守的优点是配置较为简单,流复制的备库还能提供一些查询服务,但备库提升为主库后,原来的主库需要使用regmgr重新生成主库,还要开启regmgr监控进程,因此故障只能切换一次,然后进行人工干预(虽然此步骤也可以写成脚本实现自动切换,但我感觉最好还是手工提升,避免来回切换造成数据丢失). 这两天实验了下centos6.4 x-64下的pacemaker+corosync+drbd来实现postgresql的高可用.

drbd性能测试及调优

- - x-marker的博客
今天在qq群里,有个哥们说千万不要用drbd做mysql的HA,说对性能影响非常大,drbd对性能有影响是肯定的,把数据通过网络发送给对端备库必定有性能损耗,而我正好有一套drbd,借此测试一把,看看drbd对性能的影响到底有多大,也给网友一个参考. 我测试的是一套两节点的drbd+pacemaker+corosync的mysqlHA高可用集群,主机都是普通的过时的pc机,内存2g,cpu 2核.

(总结)NFS服务常见故障排查和解决方法

- - 服务器运维与网站架构|Linux运维|互联网研究
NFS,全名叫Network File System,中文叫网络文件系统,是Linux、UNIX系统的分布式文件系统的一个组成部分,可实现在不同网络上共享远程文件系统. NFS由Sun公司开发,目前已经成为文件服务的一种标准之一(RFC1904,RFC1813). 其最大的功能就是可以通过网络,让不同操作系统的计算机可以共享数据,所以可以把NFS看做是一个文件服务器.