什么是pNFS?这个我们之前介绍了,同时也在另一篇里介绍了pNFS,NFS,CIFS三者特点及信息流区别比较,大家看完后应该对pNFS有了较清晰的概念理解。本文来自51CTO的一篇博客,介绍了pNFS系统部署实战过程,很详细:
目录
1.网络拓扑结构
本次pNFS部署过程采用的是iSCSI+GFS+pNFS技术,其中pNFS选取的是file layout。系统由四台机器构成,拓扑结构如下图所示:
192.168.6.145:这台机器作为iSCSI的Target端,对内核版本没有要求,只要能支持iSCSI就可以了。
192.168.6.180:这台机器作为iSCSI的一个initiator端,同时作为pNFS中的MDS。由于pNFS服务器端程序还没有整合进Linus的代码库中,因此需要选用Benny的代码库,这里选择的版本是linux-3.7.0-rc6-pnfs。
192.168.6.182:这台机器作为iSCSI另一个initiator端,同时作为pNFS中的DS。这台机器也必须支持pNFS,因此选择的内核版本是linux-3.7.0-rc6-pnfs。
192.168.6.144:这台机器作为pNFS的客户端。由于pNFS客户端的程序已经整合进Linus的代码库中了,因此这里选择的版本是linux-3.6.0-rc2。
iSCSI搭建过程参考了下列链接:
[1] http://tech110.blog.51cto.com/438717/485534
[2] http://blog.csdn.net/vah101/article/details/6300197
[3] Linux安装管理ISCSI卷(initiator端)
pNFS搭建过程参考了下列链接
[4] http://www.linux-nfs.org/wiki/index.php/PNFS_Setup_Instructions
2.编译内核代码
在192.168.6.180和192.168.6.182中执行下列步骤
步骤(1)下载kernel源代码
由于pNFS服务器端程序还没有整合进Linus的代码库中,因此一定要从Benny的代码库中下载代码,地址如下:git://git.linux-nfs.org/projects/bhalevy/linux-pnfs.git。
步骤(2)编译内核源代码
编译内核代码时要选中NFS相关的所有选项,尤其要选中pNFS选项,目前这个选项的状态是DEVELOPER ONLY。
我部署这套环境时最新的内核代码是linux-3.7.0-rc6-pnfs,当你部署系统时可能已经不是这个版本了。编译完成后重启系统,加载支持pNFS的内核。
在192.168.6.144上编译内核
192.168.6.144上不必使用最新的内核,我看了一下kernel.org中提供的内核,3.4.26已经支持pNFS客户端了,因此只需要使用高于3.4.26的内核版本就可以了。编译内核时选中NFS相关的所有选项。编译完成后重启系统,加载支持pNFS的内核。
3.搭建iSCSI Target端
步骤(1)安装iSCSI相关的软件包
[root@145 ~]# yum install scsi-target-utils libibverbs-devel libibverbs librdmacm librdmacm-devel
步骤(2)创建磁盘
我的机器上没有空闲的硬盘分区了,因此采用dd创建了一个块设备。
[root@145 ~]# dd if=/dev/zero of=/home/test/gfs.img bs=1024 count=100000
步骤(3)启动iSCSI服务
[root@145 ~]# /etc/init.d/tgtd start
步骤(4)创建新的target device
[root@145 ~]# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2013-01.com.chinaitv:rhcs-storage
[root@145 ~]# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /home/test/gfs.img
[root@145 ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
查看加入target device后的输出内容
[root@145 ~]# tgtadm --lld iscsi --op show --mode target
4.搭建iSCSI initiator端
192.168.6.180和192.168.6.182两台机器上都需要执行下列操作
步骤(1)安装软件包
[root@180 ~]# yum install iscsi-initiator-utils cman gfs2-utils cluster-snmp lvm2-cluster rgmanager
步骤(2)指定initiator alias name
[root@180 ~]# echo "InitiatorAlias=gfs1" >> /etc/iscsi/initiatorname.iscsi
192.168.6.182中名称为gfs2
步骤(3)创建配置文件cluster.conf
[root@180 ~]# cat /etc/cluster/cluster.conf
- <span style="font-family: SimSun; "><span style="font-size:12px;"><?xml version="1.0"?>
- <cluster name="gfscluster" config_version="1">
- <clusternodes>
- <clusternode name="gfs1" votes="1" nodeid="1">
- <fence>
- <method name="single">
- <device name="node1" nodename="gfs1"/>
- </method>
- </fence>
- </clusternode>
- <clusternode name="gfs2" votes="1" nodeid="2">
- <fence>
- <method name="single">
- <device name="node2" nodename="gfs2"/>
- </method>
- </fence>
- </clusternode>
- </clusternodes>
- <fencedevices>
- <fencedevice name="node1" agent="fence_manual"/>
- <fencedevice name="node2" agent="fence_manual"/>
- </fencedevices>
- <rm>
- <failoverdomains/>
- <resources/>
- </rm>
- </cluster></span></span>
步骤(4)启动iSCSI服务
[root@180 ~]# /etc/init.d/iscsi start
步骤(5)启动cman服务
[root@180 ~]# /etc/init.d/cman start
步骤(6)探测 iscsi device
[root@180 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.6.145:3260
192.168.6.145:3260,1 iqn.2013-01.com.chinaitv:rhcs-storage
[root@180 ~]#
步骤(7)登录 iscsi target
[root@180 ~]# iscsiadm -m node --targetname iqn.2013-01.com.chinaitv:rhcs-storage --login
上述步骤执行完毕后,iscsi initiator端就设置好了。在192.168.6.180和192.168.6.182中查看是否多出了一个块设备。我的机器中被识别成了/dev/sdb。
步骤(8)格式化磁盘 (只需要在一台机器中执行就可以了)
[root@180 ~]# mkfs.gfs2 -p lock_dlm -t gfscluster:gfs -j 3 /dev/sdb
5.搭建pNFS
在192.168.6.180和192.168.6.182中执行下列步骤
步骤(1)挂载GFS文件系统
[root@180 ~]# mkdir /export/
[root@180 ~]# mount -t gfs2 /dev/sdb /exports/
步骤(2)导出GFS文件系统
[root@180 ~]# cat /etc/exports
/export *(rw,sync,fsid=0,insecure,no_subtree_check,pnfs)
步骤(3)编译nfs-utils源代码
目前各发行版中自带的nfs-utils暂时不支持pNFS,因此需要从代码库中下载最新的代码进行编译,下载地址是:git://git.linux-nfs.org/projects/bhalevy/pnfs-nfs-utils.git。编译过程中可能会出现一堆依赖库,可以从密歇根大学的网站上下载,下载地址如下:http://www.citi.umich.edu/projects/nfsv4/linux/。密歇根大学也是NFSv4的主要推动者之一。
将exportfs、mountd、nfsd拷贝到/usr/sbin/中
[root@180 pnfs-nfs-utils]# cp utils/exportfs/exportfs /usr/sbin/exportfs
[root@180 pnfs-nfs-utils]# cp utils/mountd/mountd /usr/sbin/mountd
[root@180 pnfs-nfs-utils]# cp utils/mountd/nfsd /usr/sbin/nfsd
步骤(4)开启NFS服务
[root@180 ~]# /usr/sbin/exportfs -rv
[root@180 ~]# /usr/sbin/mountd
[root@180 ~]# /usr/sbin/nfsd 8
步骤(5)设置DS地址 (这个步骤只在192.168.6.180上执行)
[root@180 ~]# echo "sdb:192.168.6.182" >/proc/fs/nfsd/pnfs_dlm_device
注意:
1)这里192.168.6.182是DS的地址,sdb是MDS(192.168.6.180)中NFS文件系统所在的磁盘,不是DS中NFS文件系统所在的磁盘。假如设置好iSCSI后192.168.6.180将设备识别成了/dev/sdb,192.168.6.182将设备识别成了/dev/sdc,那么这里仍然需要设置成sdb:192.168.6.182。
2)这里的设备名是sdb,而不是/dev/sdb,参考文献[4]中讲解有误,或者是笔误,或者是代码更新了但是文档更新不及时,我没有分析以前的代码。
6.挂载pNFS文件系统
在192.168.6.144中挂载pNFS文件系统,执行下列步骤:
步骤(1)加载file layout模块
[root@144 ~]# modprobe nfs_layout_nfsv41_files
步骤(2)挂载pNFS文件系统
[root@144 ~]# mount -t nfs4 -o minorversion=1 192.168.6.180:/ /mnt/
这样,pNFS环境就部署好了,可以打开wireshark,执行几次读操作,看看是否能找到pNFS中的报文,如LAYOUTGET、GETDEVICEINFO。
7.测试
由于pNFS支持并行IO,因此pNFS的IO速率应该大于没有使用pNFS时的速率。但是我们部署的这套系统中只有一台DS,因此无法体现出pNFS的优势。pNFS中MDS和DS可以部署在同一台机器中,我们将上述环境稍做改变,让192.168.6.180既做MDS又做DS,这样就能够测试了。修改192.168.6.180中的配置信息
[root@180 ~]# echo "sdb:192.168.6.182" >/proc/fs/nfsd/pnfs_dlm_device
改成
[root@180 ~]# echo "sdb:192.168.6.180,192.168.6.182" >/proc/fs/nfsd/pnfs_dlm_device
至此,Linux安装管理ISCSI卷(initiator端)过程完成。