实验目的

本次实验是利用iSCSI协议来搭建一个IP-SAN系统

 

实验前提:
准备一个共享的设备。在实验中,可以使用分区代替一个硬盘,如果使用分区代替硬盘设备,首先需要创建分区。创建过程不在给出,在这里我使用的共享设备为/dev/sdb
实验平台为RHEL 5.8
iSCSI target所在的主机地址为:192.168.108.150
iSCSI initiator所在的主机地址有三个,分别为:192.168.108.199、192.168.108.201、192.168.108.202

 

 

IP-SAN的实现步骤

一、服务器端的配置
1、安装iSCSI服务器端
# yum -y install scsi-target-utils
在安装完成后,会生成几个文件,比较重要的文件有:
/etc/rc.d/init.d/tgtd     这个是target的守护进程
/etc/tgt/targets.conf  这个是target的配置文件,如果要想让一些配置永久生生效,需要修改其配置文件。
/usr/sbin/tgt-admin   这个是服务器端的管理工具,服务器启动后,这个程序会读取/etc/tgt/targets.conf中的信息
/usr/sbin/tgtadm   这也是一个服务器端的管理工具,不过使用这个程序来管理操作,不会让其配置永久生效,如果想让其配置永久生效,需要写到配置文件/etc/tgt/targets.conf中。

 

2、启动服务器端的程序
iSCSI的服务器端程序为/etc/init.d/tgtd,且该程序监听在tcp的3260端口
# service tgtd start
# chkconfig tgtd on
# netstat -tnlp | grep 3260

 

3、创建一个target
#tgtadm --lld iscsi --mode target --op new --tid 1  --targetname iqn.2015-03.com.xsl.www:xsl.disk1
查看所有的target的信息
# tgtadm --lld iscsi --mode target --op show
查看某个特定的target的信息,这里我创建的target的id为1,如果要查看tid为1的设备的信息,需要执行如下命令:
tgtadm --lld iscsi --mode target --op show --tid 1

4、在已有的target上创建一个LUN,LUN id为1,并指定后端存储设备的路径为/dev/sdb
# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb
显示target上的LUN信息
#tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2015-03.com.xsl.www:xsl.disk1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 53687 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags:
    Account information:
    ACL information:
 
 

5、设定授权,只允许192.168.108.0/24这个网络中的initiator访问target
# tgtadm --lld iscsi --mode target --op bind  --tid 1 -I 192.168.108.0/24
其中的-I相当于--initiator-address
这里设置就是基于ip的认证。

如果需要设置基于用户的认证,还需要添加如下内容
创建一个新的账号和密码。这个账号是target端用来验证initiator端的
# tgtadm --lld iscsi --mode account --op new --user iscsiuser --password iscsiuser

查看以创建好的账号
# tgtadm --lld iscsi --mode account --op show
Account list:
    iscsiuser

在特定的target上添加账号
#tgtadm --lld iscsi --mode account --op bind --tid 1  --user iscsiuser
#查看target上的相关信息,是否授权以被设置
# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2015-03.com.xsl.www:xsl.disk1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 53687 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags:
    Account information:
        iscsiuser
    ACL information:
        192.168.108.0/24
  

由于CHAP协议是双向认证的,因此,还需要配置一个外出账号
创建一个外出账号,这个是initiator端用来验证target端的。
# tgtadm --lld iscsi --mode account --op new --user outuser --password 123456
将这个账号添加到tid为1的target上。既然作为外出账号,需要在添加的时候,加上--outgoing选项
#tgtadm --lld iscsi --mode account --op bind --tid 1 --user outuser --outgoing
查看外出账号是否创建
# tgtadm --lld iscsi --mode target --op show
Target 1: iqn.2015-03.com.xsl.www:xsl.disk1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 53687 MB, Block size: 512
            Online: Yes
            Removable media: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags:
    Account information:
        iscsiuser
        outuser (outgoing)
    ACL information:
        192.168.108.0/24
  
说明:在命令行中定义的一些参数,一旦服务器重启这些参数将会丢失。因此,为了让定义的数据永久生效,需要修改配置文件/etc/tgt/targets.conf中的一些参数。关于如何修改,这里不在给出。
 

 

二、客户端的配置
1、initiator的安装
在所有的具有initiator功能的主机上安装iscsi-initiator-utils这个软件包
在这里我有三个initiator主机,因此,需要在这三台主机上安装。在这里我讲服务器端target所在的主机作为跳板机,因此,只需要执行如下命令即可:
# for I in {1..3};do  ssh ha$I\.xsl\.com  'yum -y install iscsi-initiator-utils';done
如果没有跳板机,需要在所有的主机上执行yum -y install iscsi-initiator-utils命令。
该软件包安装成功后,会生成一些文件、其中比较重要的文件有:
/etc/iscsi/iscsid.conf     这个文件将在iscsid守护进程启动和iscsiadm程序运行的时候被读取,主要是提供认证和目标指向的信息。
/etc/rc.d/init.d/iscsi   自动挂载目标设备的脚本
/etc/rc.d/init.d/iscsid   启动守护设备模块和监听程序的脚本
/sbin/iscsi-iname          这个程序可以用来修改iSCSI target设备名称的前缀,需要加上-p选项
/sbin/iscsiadm    这是一个客户端的管理工具

 

启动iscsi进程和iscsid进程
#service iscsi start
#service iscsid start
#chkconfig iscsi on
#chkconfig iscsid on

 

修改initiatorName
# echo "InitiatorName=`iscsi-iname -p iqn.2015-03.com.redhat`" > /etc/iscsi/initiatorname.iscsi
# echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi

 

2、修改客户端的配置文件/etc/iscsi/iscsid.conf
需要在这个文件中添加如下几行:
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser 
node.session.auth.password = iscsiuser

 

3、发现iscsi设备
# iscsiadm -m discovery -t st -p 192.168.108.150:3260
192.168.108.150:3260,1 iqn.2015-03.com.xsl.www:xsl.disk1

 

4、登录到iSCSI设备上,并将其导入到本地
# iscsiadm -m node -T iqn.2015-03.com.xsl.www:xsl.disk1 -p 192.168.108.150:3260 -l
Logging in to [iface: default, target: iqn.2015-03.com.xsl.www:xsl.disk1, portal: 192.168.108.150,3260] (multiple)
Login to [iface: default, target: iqn.2015-03.com.xsl.www:xsl.disk1, portal: 192.168.108.150,3260] successful.

说明:
如果initiator端已经登录过此target,此时还需要先注销登录后重启iscsid服务,并在删除此前生成的database后,重新发现target,并重新登入,过程如下:
# iscsiadm -m session -r sid -u
# iscsiadm -m node -T iqn.2015-03.com.xsl.www:xsl.disk1 -p 192.168.108.150 -u
# iscsiadm -m node -T iqn.2015-03.com.xsl.www:xsl.disk1 -p 192.168.108.150  -o delete
# rm -rf /var/lib/iscsi/nodes/iqn.2015-03.com.xsl.www:xsl.disk1
# rm -rf -rf /var/lib/iscsi/send_targets/192.168.108.150,3260
# service iscsid restart

重新发现iSCSI设备,并登录

# iscsiadm -m discovery -t st -p 192.168.108.150:3260
# iscsiadm -m node -T iqn.2015-03.com.xsl.www:xsl.disk1 -p 192.168.108.150:3260 -l

 

5、验证iscsi设备是否导入到本地系统上
#fdisk -l
如果本地含有/dev/sdb这个硬盘,表示iscsi设备已经成功导入到本地。

 

6、在多个设备上进行测试是否iscsi设备都可以导入到本地
在多个initiator端上执行如下命令,查看是否iscsi设备导入到本地,这里我有3个initiator端,因此,需要在这三个initiator端执行如下命令:
# iscsiadm -m discovery -t st -p 192.168.108.150:3260
# iscsiadm -m node -T iqn.2015-03.com.xsl.www:xsl.disk1 -p 192.168.108.150:3260 -l

最后在每一个initiator端上执行fdisk -l命令,看看/dev/sdb是存在。如果存在,则说明iscsi设备都导入到了本地。因此,三个initiator端上的应用程序都可以访问iSCSI设备了。