搭建PC架构的ISCSI存储系统

一、架构图:

需求:把iscsi-target 服务器上的/dev/sdc共享出来,分别从windows和linux客户端来进行挂载使用。

iscsi-target服务器IP:192.168.10.50/24

linux客户端IP:192.168.10.10/24

windows server 2003 IP:192.168.10.201/24


二、iSCSI-Target的安装:

1、获取iscsi-target:

http://sourceforge.net/directory/os:windows/freshness:recently-updated/?q=iscsitarget


2、安装必须的软件包,根据系统的不同,可能会有变化:

[root@Target ~]# yum install gcc

[root@Target ~]# yum install kernel-devel

GCC编译器是编译安装一定要的,kernel-devel如果没有安装的话,就会提示:cc: /lib/modules/2.6.18-164.el5/build/include/linux/version.h: No such file or directory


3、将下载的压缩包解压到某个位置(如:/usr/src/):

     [root@Target ~]# tar zxf iscsitarget-1.4.20.2.tar.gz -C /usr/src/

[root@Target ~]# cd !$

cd /usr/src/

[root@Target src]# cd iscsitarget-1.4.20.2/

[root@Target iscsitarget-1.4.20.2]# ls

ChangeLog  dkms.conf  etc      iscsitarget.spec  Makefile  README             README.mcs     RELEASE_NOTES

COPYING    doc        include  kernel            patches   README.initiators  README.vmware  usr

[root@Target iscsitarget-1.4.20.2]# make

[root@Target iscsitarget-1.4.20.2]# make install


4、将iscsi-target服务设置成开机自启动:

编译安装好了以后,就可以使用service iscsi-target  start|stop|restart来管理iscsi-target服务。

[root@Target iet]# chkconfig --add iscsi-target

[root@Target iet]# chkconfig --level 35 iscsi-target on

[root@Target iet]# chkconfig --list iscsi-target

iscsi-target    0:off   1:off   2:off   3:on    4:off   5:on    6:off

[root@Target iet]#

要注意的是iscsi-target的后台进程是ietd,不是iscsi-target。ietd我的理解是iscsi enterprise target daemon这样记的话,就容易了。


三、配置iSCSI Target端:

1、修改/etc/iet/下的配置文件。

iscsi-target安装好了以后,在/etc/iet/目录下面就会生成三个文件:ietd.conf  initiators.allow  targets.allow

/etc/iet/ietd.conf 主要是配置要共享出来的磁盘、分区、以及initiator发现(discovery)和登陆(logon)时要用的密码。也是iscsi-target的主配置文件。

/etc/iet/initiators.allow 是配置基于IP的访问控制的。

/etc/iet/targets.allow  配置允许的共享磁盘,一般不作修改。


对/etc/ietd.conf文件的说明:

#Target iqn.2001-04.com.example:storage.disk2.sys1.xyz

注释:本行默认是注释掉的。

Target 说明定义了共享服务器上的共享名称及磁盘。

iqn 表示“iscsi qualified name”,简称iqn

2001-04  表示年、月

com.example 表示的是倒过来的共享服务器的主机名

storage.disk2.sys1.xyz  表示识别代码,也就是你要共享的设备。可以随意写不过为了管理的方便还是写成要共享的那个设备。


设定LUN(Logical Unit Number)找到如下类似行:

#Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz

取消当前行的注释,Lun 0 Path=/dev/sdc 表示块设备号为0,映射的磁盘为/dev/sdc

Type=fileio 默认值是fileio,可以用于磁盘、文件和LVM


最终修改好的文件内容如下:

Target iqn.2013-09.com.xfzhou.Target:sdc

Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz


如果还想再共享一块磁盘,则再加上上面的两行就行了。注意Target和Lun是成对出现的!

Target iqn.2013-09.com.xfzhou.Target:sdd

Lun 0 Path=/dev/sdd,Type=fileio,ScsiId=xyz,ScsiSN=xyz


2、启动iscsi target服务:

[root@Target ~]# service iscsi-target restart

Stopping iSCSI Target: [  OK  ]

[  OK  ] iSCSI Target: [  OK  ]

[root@Target ~]#

[root@Target ~]# pgrep ietd

7801

[root@Target ~]#


四、配置windows客户端:

我这里使用的是windows server 2003 sp2

windows上的iscsi initiator可以去http://www.microsoft.com/en-us/download/details.aspx?id=18986下载,Initiator-2.08-build3825-x86fre.exe要根据自已OS的平台下载相应的版本。该软件的安装就不用说了,太简单了!

安装完成后桌面上会有一个Microsoft iSCSI Initiator图标,如图,点击“Discovery”选项卡:


再点击“Add”按钮:把共享存储服务器的IP地址或是主机名填入,如果没有修改过端口号,就是默认的3260.


接下来点击“OK”之后,就会在Targets选项卡中看到如下结果:


这时看到的是一个Inactive的状态,这时可以点击下面的“Log On”来激活共享的磁盘。如下:

再点击”OK“后就会看到状态已经变成了Connected状态:


这时就在“磁盘管理“就可以看到有一块新的硬盘了:


接下来我想怎么做就怎么做了。现在是没有初始化的,可以右键”初始化磁盘“,之后就是分区格式化了。我这里先分了一个5G大小的区,在我的电脑中显示如下:


从上面的图可以看出,通过iscsi共享过来的磁盘,和本地的磁盘没有什么区别,最大的区别就是读写的速度上,共享的磁盘要比本地的慢很多。。



五、配置Linux的iscsi-initiator客户端:

1、在RHEL5.6上配置iscsi-initiator是很容易的,只需要安装iscsi-initiator-utils就行了如下(CD光盘中有):

[root@file ~]# rpm -ihv /mnt/Server/iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm

warning: /mnt/Server/iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...                ########################################### [100%]

1:iscsi-initiator-utils  ########################################### [100%]

[root@file ~]#

安装完成后,会创建/etc/iscsi/主程序的配置文件。

[root@file iscsi]# service iscsid start  启动iscsi initiator程序。

安装完成后,用户可以通过iscsiadm指令与iscsi target建立关联,iscsiadm是用来管理(更新、删除、插入、查询)iscsi配置数据库文件的命令行工具,用户能够用它对iscsi nodes,sessions,connections和discovery records进行操作。


2、在Linux上执行iscsi targets发现:

[root@file iscsi]# iscsiadm -m discovery -t sendtargets -p 192.168.10.50

192.168.10.50:3260,1 iqn.2013-09.com.xfzhou.Target:sdc

[root@file iscsi]#

从上面可以知道,linux客户端已经能够找到服务器上共享的iscsi磁盘了。

说明:当成功执行一次targets发现后,客户端会将查询到的信息记录到/var/lib/iscsi/send_targets 对应的目录下面,因此Targets发现只需要执行一次即可。

Discovery :在/var/lib/iscsi/send_targets目录下,生成一个target服务器信息文件,文件名为”target服务器的IP,端口号“(如:”202.96.209.133,3260“),此文件用来保存target服务器的相关信息。

Node:在/var/lib/iscsi/send_targets目录下,会生成一个或多个以target存储服务器上的target名命名的文件夹,每个文件夹下有一个用来记录target服务器上特定target信息的文件。


3、登陆iscis target:

[root@file iscsi]# iscsiadm -m node -T iqn.2013-09.com.xfzhou.Target -p 192.168.10.50 -l

这个命令可以在执行的时候提示:iscsiadm:no records found!,这时你查看下你的本地的硬盘,如果已经有了共享的磁盘了,那就对了。如果没有的话,就要重启下iscsid服务。这样你会在重启的过程中看到相关的登陆信息。


4、分区格式化共享磁盘:

[root@file iscsi]# fdisk -l /dev/sde

Disk /dev/sde: 10.7 GB, 10737418240 bytes

255 heads, 63 sectors/track, 1305 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

  Device Boot      Start         End      Blocks   Id  System

/dev/sde1               1         638     5124703+   7  HPFS/NTFS

/dev/sde2             639        1305     5357677+   5  Extended

/dev/sde5             639        1305     5357646   83  Linux

[root@file iscsi]#

以上是我对这个共享的盘进行了分区,分了一个逻辑分区和一个linux分区。前面的那个ntfs是刚才在windows下分的。


格式化:[root@file iscsi]# mkfs.ext3 /dev/sde5


5、调整分区的ext文件系统属性:

要先用tune2fs来修改文件系统的属性,去掉自动检查的属性

[root@file iscsi]# tune2fs -c -1 -i 0 /dev/sde5

tune2fs 1.39 (29-May-2006)

Setting maximal mount count to -1  把最大挂载次数设置成-1,也就是无穷大

Setting interval between checks to 0 seconds  检查的时间间隔为0,意不检查。

[root@file iscsi]#

因为Linux上的ext文件系统有一个特性,对某个分区mount、umount很多次后或者隔一个固定的时间后,系统会对该分区进行检测,这就会导致硬盘反应速度变慢,影响业务,上面的操作也就是去掉了文件系统自动检查的功能。


6、让其开机就自动挂载到/data目录下面:

要想让某个分区在开机就自动挂载到指定的目录,可以把它写在/etc/fstab文件中,由于这个共享过来的/dev/sde有可能是变的,比如在服务器上增加或是减少了一块磁盘,所以这里为了避免这种情况的出现,可以使用磁盘的UUID来代表,磁盘的UUID查看方法如下:

[root@file iscsi]# tune2fs -l /dev/sde

tune2fs 1.39 (29-May-2006)

tune2fs: Bad magic number in super-block while trying to open /dev/sde

Couldn't find valid filesystem superblock.

[root@file iscsi]# tune2fs -l /dev/sde5

tune2fs 1.39 (29-May-2006)

Filesystem volume name:   <none>

Last mounted on:          <not available>

Filesystem UUID:          5acb3056-dc69-4ae2-92b6-252007002232

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal resize_inode dir_index filetype sparse_super large_file

Default mount options:    (none)

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              670432

Block count:              1339411

Reserved block count:     66970

Free blocks:              1282938

Free inodes:              670421

First block:              0

Block size:               4096

Fragment size:            4096

Reserved GDT blocks:      327

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         16352

Inode blocks per group:   511

Filesystem created:       Fri Sep  6 22:31:06 2013

Last mount time:          n/a

Last write time:          Fri Sep  6 22:34:51 2013

Mount count:              0

Maximum mount count:      -1

Last checked:             Fri Sep  6 22:31:06 2013

Check interval:           0 (<none>)

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:               128

Journal inode:            8

Default directory hash:   tea

Directory Hash Seed:      179b3ebe-4d8b-4516-b4cf-908cfea96364

Journal backup:           inode blocks

[root@file iscsi]#


修改/etc/fstab

UUID=5acb3056-dc69-4ae2-92b6-252007002232       /data       ext3    _netdev 0 0

磁盘设备的名称可能会发生变化,从而引起文件系统不能挂载上来或者不能正确挂载,使用UUID的方式进行挂载可以解决这个问题,也可以使用给文件系统设置卷标的方式来解决

_netdev是针对iscsi设备的特殊mount选项,此挂载选项指示将在网络启动后挂载该卷,在关闭网络前卸载该卷。


OK所有的配置已经完成,一个简单的IP SAN就搭建好了!