/ 中存储网

pNFS系统部署实战过程

2016-04-18 22:32:17 来源:中存储网

什么是pNFS?这个我们之前介绍了,同时也在另一篇里介绍了pNFS,NFS,CIFS三者特点及信息流区别比较,大家看完后应该对pNFS有了较清晰的概念理解。本文来自51CTO的一篇博客,介绍了pNFS系统部署实战过程,很详细:

目录

网络拓扑结构

编译内核代码

搭建iSCSI Target端

搭建iSCSI initiator端

搭建pNFS

挂载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

[html] view plain copy
 
 print?
  1. <span style="font-family: SimSun; "><span style="font-size:12px;"><?xml version="1.0"?>  
  2. <cluster name="gfscluster" config_version="1">  
  3.         <clusternodes>  
  4.                 <clusternode name="gfs1" votes="1" nodeid="1">  
  5.                         <fence>  
  6.                                 <method name="single">  
  7.                                         <device name="node1" nodename="gfs1"/>  
  8.                                 </method>  
  9.                         </fence>  
  10.                 </clusternode>  
  11.                 <clusternode name="gfs2" votes="1" nodeid="2">  
  12.                         <fence>  
  13.                                 <method name="single">  
  14.                                         <device name="node2" nodename="gfs2"/>  
  15.                                 </method>  
  16.                         </fence>  
  17.                 </clusternode>  
  18.         </clusternodes>  
  19.         <fencedevices>  
  20.                 <fencedevice name="node1" agent="fence_manual"/>  
  21.                 <fencedevice name="node2" agent="fence_manual"/>  
  22.         </fencedevices>  
  23.         <rm>  
  24.                 <failoverdomains/>  
  25.                 <resources/>  
  26.         </rm>  
  27. </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端)过程完成。