什么是pNFS?(相关文章:什么是pNFS(并行NFS))
pNFS是并行网络文件系统,即NFSv4.1,与NFSv3不同的是,它将元数据与数据进行分离,允许客户端直接与数据服务器进行交互。这种机制解决了传统NFS的性能瓶颈问题,从而使得系统获得高性能和高扩展性的特性。pNFS支持多种协议(Block[FC], Object[OSD], Files[NFS])直接访问数据,需要对客户端功能进行扩展以支持不同的layout(LAYOUT4_FILE, LAYOUT4_BLOCK_VOLUME, LAYOUT4_OSD2_OBJECTS)。NFSv41和pNFS主要由RFC5661(NFSv4.1)、RFC5662(NFSv4.1 XDR)、RFC5663(pNFS Block/Volume Layout)、RFC5664(Object-Based pNFS Operations)描述,这些标准已经于2010.01正式发布。目前,pNFS商业和开源产品都比较少,而且实现方面还不成熟。Linux kernel从2.6.30版本加入了pNFS支持,目前最新版本为2.6.38,pNFS仍处于Expermental,包括Server和Client。对于pNFS感兴趣的用户,可以通过安装新内核和nfs-util来安装配置pNFS,进行测试和体验。
什么是spNFS?
spNFS是一个简单的pNFS LAYOUT4_FILE服务器实现,它使用标准的NFS服务器作为数据服务器,主其要逻辑在用户空间实现,最初由NetAPP公司支持开发,主要用于pNFS演示和Client测试。spNFS现在已经不再维护,但是仍然可以工作并用于pNFS演示和测试。目前已经有更好的pNFS服务器实现,比如GFS2、OCFS2、EXOFS(http://wiki.linux-nfs.org/wiki/index.php/PNFS_server_projects),但比spNFS要复杂些。
pNFS实验环境
整个pNFS测试环境由4台服务器组成,其中2台数据服务器,1台元数据服务器和1台客户端,操作系统为CentOS 5.4 X86_64。这里是使用虚拟机来搭建测试环境,主要是为了验证pNFS的功能。如果想测试pNFS性能,建议采用物理服务器来部署测试环境。pNFS实验环境配置如下:
MDS:192.168.233.130
DS1: 192.168.233.131
DS2: 192.168.233.132
Client: 192.168.233.134
4台服务器(DS、MDS和Client)均需要安装配置pNFS kernel和nfs-utils软件。
从RPM安装
对于使用Redhat/CentOS/Fedora的用户来说,pNFS社区已经有人制作了RPM安装包供大家测试,从如下URL下载:
http://fedorapeople.org/~steved/repos/pnfs/
根据OS版本和体系结构选择下载合适的RPMs,其中kernel和nfs-utils安装包是必需的。RPM安装过程中根据提示使用yum或apt-get安装相关的依赖包。kernel安装成功后,需要验证一下/boot和Grub相关信息是否正确,然后reboot机器即可。
从源码安装
源码安装相对要比RPM安装复杂许多,但这是很不错的体验,建议搞开发的用户采用这种方式进行安装。Kernel和nfs-utils最新源码可以从如下Git库下载:
- git clone git://git.linux-nfs.org/projects/bhalevy/linux-pnfs.git (这个比较大,约1GB)
- git clone git://linux-nfs.org/~bhalevy/pnfs-nfs-utils.git
根据内核源码中的Documents/fs/spnfs.txt配置kernel编译选项,make menuconfig时把NFSv41/spnfs的相关选项选中。配置完成后,.config中应该包含以下诸项:
- CONFIG_NETWORK_FILESYSTEMS=y
- CONFIG_NFS_FS=m
- CONFIG_NFS_V4=y
- CONFIG_NFS_V4_1=y
- CONFIG_PNFS=y
- CONFIG_NFSD=m
- # CONFIG_PNFSD_LOCAL_EXPORT is not set
- CONFIG_SPNFS=y
- CONFIG_SPNFS_LAYOUTSEGMENTS=y
接下来就可以编译和安装内核了
- make
- make modules
- make modules_install
- make install
如果没有生成initramfs,mdinitrd /boot/initramfs-2.6.38-pnfs 2.6.38-pnfs生成。
与RPM安装一样,成功安装kernel后,验证相关信息正确配置后,即可reboot机器。
nfs-utils依赖许多开发库,编译前需要进行安装解决依赖问题。
- yum install libtirpc{,-devel} tcp_wrappers{,-devel} libevent{,-devel} nfs-utils-lib{,-devel} libgssglue{,-devel} libnfsidmap{,-devel} libblkid{,-devel} libcap{,-devel} device-mapper-devel
- sh autogen.sh
- ./configure --prefix=/usr
- make
- make install
配置Data Server
- mkdir /export
- mkdir /export/pnfs
- vi /etc/export,编辑如下内容:
- /export/pnfs *(rw,sync,fsid=0,insecure,no_subtree_check,no_root_squash, pnfs)
- /etc/init.d/nfs start,启动nfs server。
每个Data Server均进行如上配置,DS是常规的NFSv4.1服务器。
配置Metadata Server
- mkdir /export
- mkdir /export/spnfs
- mkdir /spnfs
- mkdir /spnfs/192.168.233.131 (第一个DS mount点)
- mkdir /spnfs/192.168.233.132 (第二个DS mount点)
vi /etc/export,编辑如下内容:
- /export/spnfs *(rw,sync,fsid=0,insecure,no_subtree_check,no_root_squash, pnfs)
vi /etc/spnfsd.conf,编辑如下内容:(可以从nfs-util源码中util/spnfsd/spnfsd.conf复制并修改)
- [General]
- Verbosity = 1
- Stripe-size = 8192
- Dense-striping = 0
- Pipefs-Directory = /var/lib/nfs/rpc_pipefs
- DS-Mount-Directory = /spnfs
- [DataServers]
- NumDS = 2
- DS1_IP = 192.168.233.131
- DS1_PORT = 2049
- DS1_ROOT = /pnfs
- DS1_ID = 1
- DS2_IP = 192.168.233.132
- DS2_PORT = 2049
- DS2_ROOT = /pnfs
- DS2_ID = 2
然后将DS服务器输出目录mount至元MDS上,启动nfs server和spnfs server:
- mount -t nfs4 -o minorversion=1 192.168.233.131:/pnfs /spnfs/192.168.233.131
- mount -t nfs4 -o minorversion=1 192.168.233.132:/pnfs /spnfs/192.168.233.132
- /etc/init.d/nfs start
- spnfs
配置Client
pNFS支持Block, Object, Files协议,我们这里使用Files协议访问,需要加载nfs_layout_nfsv41_files。
- modprobe nfs_layout_nfsv41_files
- mount -t nfs4 -o minorversion=1 192.168.233.130:/ /mnt/pnfs
pNFS测试
cd /mnt/pnfs
dd if=/dev/zero of=f8g bs=4M count=2K
dd中使用top监控DS和MDS系统负载情况,看看IO是不是发生在DS与Client之间。如果MDS I/O负载很高,接近与DS,则安装配置可能有问题。
分别在MDS和DS使用stat查看f8g的属性:
stat /export/spnfs/f8g (MDS上f8g的block数量应该为0,只表现名字空间)
stat /export/pnfs/* (DS1和DS2上f8g对应对象的block数量应该>0,实际存储文件数据)
参考资料
http://www.pnfs.com
http://wiki.linux-nfs.org/
http://wiki.linux-nfs.org/wiki/index.php/Configuring_pNFS/spnfsd
kernel Documents/fs/spnfs.txt
http://fedorapeople.org/~steved/repos/pnfs/
本文作者刘爱贵,原文地址:http://blog.csdn.net/liuaigui/article/details/6554866