存储设备的类型:

       DNS:Direct Attached Storage  

                  直接附加存储:直连在主机总线上的设备

       NAS:Network Attached Storage

                  网络附加存储:文件共享服务器

       SAN:Storage Area Network     

                  存储区域网络:使用其他协议传输SCSI协议和SCSI报文

                  IP SAN     (廉价的共享存储)

                  FC SAN                  

       目前的SAN存储有两种:一是基于光纤通道的FC SAN;二是基于以太网的IP SAN(也就常说的iSCSI)。 FC SAN通过光纤交换机连接到主机(HBA卡),也就是说可以连接到光纤交换机的主机都可以访问这个存储; iSCSI作为共享于以太网络上的存储则更类似于NAS。

SCSI协议栈:

                  initiator  客户端     (看到的是SCSI设备;需要在内核中装载iSCSI和SCSI驱动)

                  target     服务器端  (可以使用任何硬盘类型,对于客户端来说都是SCSI硬盘;需要在内核中装载iSCSI和SCSI驱动)

一,构建iSCSI共享存储

测试环境:

          OS:rhel6.5

          node1: 192.168.1.121  iscsi-initiator-utils    (initiator)

          node2: 192.168.1.122  iscsi-initiator-utils    (initiator)

          node3: 192.168.1.160  scsi-target-utils        (target)

二,target端配置

1,在node3上安装scsi-target-utils

     # yum -y install scsi-target-utils

2,准备共享的设备(这里使用的是两个新的磁盘分区,但是对于initiator端来说看到的是一个硬盘可以分区格式化的)

    # fdisk /dev/sda

     p

     n

     p

     3

     +20G

     再准备一个磁盘分区

     n

     e

     4

     w

     # partx -a /dev/sda

     # fdisk -l /dev/sda[1-6]      ###查看分好的分区大小

PS:这里一定不能进行格式化

3,启动服务

     # service tgtd start

     # chkconfig tgtd on

4,查看服务是否正常启动

     # netstat -tnlp | grep 3260

5,服务端配置管理工具tgtadm的使用

     tgtadm常用于管理三类对象:

                 target : 创建,查看,删除

                 lun: 创建,查看,删除

                 认证: 用户创建,绑定,解绑定,删除,查看

常用选项:
              -L   --lld  <driver>  :指定要加载的驱动 如iscsi;
              -o  --op  <operation> :对这个驱动程序所要做的操作,如new,show,delete,bind,unbind;
              -m --mode <mode>  :指定操作的对象,如target,logicalunit;
              -t   --tid  <tid> : 指定target的ID;
              -T  --targetname <targetname> : 指定target的名称使用iqn的命名规范,如iqn.2015-10.com.luochen2015.testtarget:disk1;
              -l   --lun  <lun> : 指定lun的ID;
              -b  --backing-store  <path> : 关联到某个指定lun上的后端存储设备,可以是分区也可以是磁盘;
              -I   --initiator-address <address> : 指定授权访问某个target的IP地址;
example:
    创建一个新的target
         # tgtadm -L iscsi -o new -m target -t 1 -T iqn.2015-10.com.luochen2015.testtarget:disk1
    查看target信息
         # tgtadm -L iscsi -o show -m target
    为target创建一个lun
         # tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sda3
    解除IP绑定
         # tgtadm -L iscsi -o unbind -m target -t 1 -I 192.168.1.0/24
    删除lun
         # tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 2
    删除target
         # tgtadm -L iscsi -o delete -m target -t 1

6,创建一个target

     # tgtadm -L iscsi -o new -m target -t 1 -T iqn.2015-10.com.luochen2015.testtarget:disk1

7,为target创建一个lun

     # tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sda3

8,认证IP访问

     # tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.1.0/24

9,为target再创建一个lun

     # tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sda5

三,initiator端配置

1,在node1和node2上安装iscsi-initiator-utils

     # yum -y install iscsi-initiator-utils

     # rpm -ql iscsi-initiator-utils

2,在node1上配置InitiatorName和别名

     # echo "InitiatorName=`iscsi-iname -p iqn.2015-10.com.luochen2015`" > /etc/iscsi/initiatorname.iscsi

     # echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi

3,在node1上启动服务

     # service iscsi start

     # chkconfig iscsi on

     # service iscsid start

     # chkconfig iscsid on

4,iscsiadm工具的使用

     iscsiadm是个模式化的工具,其模式可通过-m或--mode选项指定,常见的模式有discovery、node、fw、session、host、iface几个,如果没有额外指定其它选项,则discovery和node会显示其相关的所有记录;session用于显示所有的活动会话和连接,fw显示所有的启动固件值,host显示所有的iSCSI主机,iface显示/var/lib/iscsi/ifaces目录中的所有ifaces设定。

语法格式:
      iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -I iface -t type -p ip:port [ -l ] ]
      iscsiadm -m node [ -d debug_level ] [ -P printlevel ] [ -L all,manual,automatic ] [ -U all,manual,automatic ] [ [ -T tar-getname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ]
常用选项:
              -d  --debug=debug_level   显示debug信息,级别为0-8;
              -l   --login
              -t   --type=type  这里可以使用的类型为sendtargets(可简写为st)、slp、fw和 isns,此选项仅用于discovery模式,且目前仅支持st、fw和isns;其中st表示允许每个iSCSI target发送一个可用target列表给initiator;
              -p  --portal=ip[:port]  指定target服务的IP和端口;
              -m --mode op  可用的mode有discovery, node, fw, host iface 和 session;
              -T  --targetname=targetname  用于指定target的名字;
              -u  --logout
              -o  --op=OPEARTION:指定针对discoverydb数据库的操作,其仅能为new、delete、update、show和nonpersistent其中之一;
              -I   --interface=[iface]:指定执行操作的iSCSI接口,这些接口定义在/var/lib/iscsi/ifaces中;
example:
    在某个主机上探测target:
          # iscsiadm -m discovery -t st -p 192.168.1.160
    对那个主机上的target发起登录请求:
          # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtarget:disk1 -p 192.168.1.160:3260 -l
    退出某个主机上的target:
          # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtartget:disk1 -p 192.168.1.160:3260 -u
    删除target发现信息:
          # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtarget:disk1 -p 192.168.1.160:3260 -o delete
    查看会话相关信息:
          # iscsiadm -m session -s    

5,在node1上探测node3的target

     # iscsiadm -m discovery -t st -p 192.168.1.160

6,在node1上对node3上的target发起登录请求

     # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtarget:disk1 -p 192.168.1.160:3260 -l

7,在node1上查看本地上是否有新的硬盘 (/dev/sdb /dev/sdc 两块新硬盘)

     # fdisk -l /dev/sd[a-z]

8,在node1上对新的硬盘进行分区格式化

     # fdisk /dev/sdb

     n

     p

     1

     +5G

     w

9,在node1上查看分区信息

     # cat /proc/partitions

10,在node1上格式化分区

     # mke2fs -t ext4 /dev/sdb1

11,在node1上挂载

     # mount /dev/sdb1 /mnt

12,提供一个测试文件

     # cp /etc/inittab ./

四,在node2上挂载测试

1,在node2上配置InitiatorName和别名

     # echo "InitiatorName=`iscsi-iname -p iqn.2015-10.com.luochen2015`" > /etc/iscsi/initiatorname.iscsi

     # echo "InitiatorAlias=initiator2" >> /etc/iscsi/initiatorname.iscsi

2,在node2上启动服务

     # service iscsi start

     # chkconfig iscsi on

     # service iscsid start

     # chkconfig iscsid on

3,在node2上探测node3的target

     # iscsiadm -m discovery -t st -p 192.168.1.160

4,在node2上对node3上的target发起登录请求

     # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtarget:disk1 -p 192.168.1.160:3260 -l

5,在node2上查看本地上是否有新的硬盘 (/dev/sdb /dev/sdc 两块新硬盘)

     # fdisk -l /dev/sd[a-z]

6,在node2上挂载node1上已经分区格式化的硬盘

     # mount /dev/sdb1 /mnt

     # cd /mnt

     # ls -a        ###查看是否有在node1上提供的测试文件,如果有的话证明配置成功

PS:不能在两个initiator端同时挂载一个文件系统,如果同时挂载了那么在两个节点上对于同一个文件的修改对于对方节点是不可见的;可以在不同initiator端挂载不同的分区来解决;

7,在某个节点上删除target会话信息

     # umount /mnt

     # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtarget:disk1 -p 192.168.1.160:3260 -u

     # iscsiadm -m node -T iqn.2015-10.com.luochen2015.testtarget:disk1 -p 192.168.1.160:3260 -o delete

     # rm -rf  /var/lib/iscsi/*

五,使用tgt-admin工具(配置文件)来配置target(上面使用的是tgtadm)

     # cd /etc/tgt

     # cp targets.conf targets.conf.bak

     # vim targets.conf

             <target iqn.2015-10.com.luochen2015.testtarget:disk1>

                       backing-store /dev/sda3

                       initiator-address 192.168.1.0/24

             <target>

     # service tgtd restart

     # tgtadm -L iscsi -o show -m target