搭建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就搭建好了!