iSCSI概述:
iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。
iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)。
Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
SCSI 结构基于客户/服务器模式,其通常应用环境是:设备互相靠近,并且这些设备由 SCSI 总线连接。iSCSI 的主要功能是在 TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。此外,iSCSI 提供了在 IP 网络封装 SCSI 命令,且运行在 TCP 上。
完整的iSCSI系统的拓扑结构如下:
iSCSI配置实现过程如下:
实验系统环境如下:
操作系统: CentOS release 6.5 (Final)
director(iSCSI Target): 172.16.100.3/16 scsi-target-utils-1.0.24-10.el6.x86_64
node1(iSCSI Initiator) : 172.16.100.6/16 iscsi-initiator-utils.x86_64 0:6.2.0.873-10.el6
关闭防火墙:
iptables: Firewall is not running.
关闭SELINUX:
setenforce: SELinux is disabled
准备工作:
iSCSI可分享的设备类型有很多,包括镜像文件(*.img)、分区(partition)、物理硬盘、raid设备、逻辑卷等,下面我们测试常用的几种设备类型:
(1)准备共享的设备分区类型
# fdisk -l /dev/sdb Disk /dev/sdb: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
建立所需要的新分区大小为20G:
# fdisk -l /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-15665, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +20G
重新读取分区表:
# partx -a /dev/sdb # fdisk -l /dev/sdb1 Disk /dev/sdb1: 21.5 GB, 21484399104 bytes 255 heads, 63 sectors/track, 2611 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
(2)准备要共享的镜像文件
在director的/srv目录下创建一个1G大小的镜像文件
# mkdir /srv/iscsi # dd if=/dev/zero of=/srv/iscsi/disk1.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 36.8793 s, 29.1 MB/s [[email protected] ~]# ll -lh /srv/iscsi/disk1.img -rw-r--r-- 1 root root 1.0G Aug 20 14:40 /srv/iscsi/disk1.img
(3)创建逻辑卷
创建一个大小为10G的LV
# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created # vgcreate vg1 /dev/sdc Volume group "vg1" successfully created # lvcreate -L 20G -n iscsi vg1 Logical volume "iscsi" created
(4)准备共享的设备物理硬盘
添加一个大小为120G的硬盘
配置director(iSCSI Target)
(1)安装scsi-target-utils管理工具
CentOS自带scsi-target-utils软件包,使用该工具进行target配置:
# yum -y install scsi-target-utils # chkconfig tgtd on # service tgtd start # ss -tunlp | grep tgt tcp LISTEN 0 128 :::3260 :::* users:(("tgtd",1259,5),("tgtd",1262,5)) tcp LISTEN 0 128 *:3260 *:* users:(("tgtd",1259,4),("tgtd",1262,4))
(2)配置target有以下两种方式:
第一种方式:使用tgtadm全命令工具创建;此命令工具配置的iscsi target系统重启之后会丢失。
第二种方式:编辑/etc/tgt/targets.conf,编辑配置文件生成的iscsi target系统重启之后不会丢失。
第一种使用target命令工具配置如下:
(1)创建一个target:
# tgtadm -L iscsi -o new -m target -t 1 -T iqn.2016.08.com.samlee:iscsi.disk
(2)查询创建的target所有信息:
# tgtadm -L iscsi -m target -o show 或: # tgt-admin -show Target 1: iqn.2016.08.com.samlee:iscsi.disk ##target名称,以及标识号 System information: ##系统信息及状态 Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 ##逻辑单元号;默认从0开始 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No ##移除 Prevent removal: No ##阻止 Readonly: No Backing store type: null ##块设备类型 Backing store path: None ##提供块设备的位置 Backing store flags: ##块设备标记 Account information: ##授权用户访问 ACL information: ##授权ip地址段访问
(3)在target中添加分区设备
# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 1 -b /dev/sdb1
(4)在target中添加镜像文件
# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 2 -b /srv/iscsi/disk1.img
(5)在target中添加lv逻辑卷
# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 3 -b /dev/vg1/iscsi
(6)在target中添加硬盘设备
# tgtadm -L iscsi -m logicalunit -o new -t 1 -l 4 -b /dev/sdd
(7)给target授权允许172.16.0.0/16网络访问及iscsiuser用户访问,默认是不允许任何用户访问
# tgtadm -L iscsi -m account -o new --user iscsiuser --password iscsiuser # tgtadm -L iscsi -m account -o bind --tid 1 --user iscsiuser # tgtadm -L iscsi -m target -o bind -t 1 -I 172.16.0.0/16
第二种方式:编辑/etc/tgt/targets.conf
target主配置文件为/etc/tgt/targets.conf,下面我们来设置改文件。
在该文件最后追加以下设置:
<target iqn.2016.08.com.samlee:iscsi.disk> backing-store /srv/iscsi/disk1.img backing-store /dev/sdb1 backing-store /dev/vg1/iscsi backing-store /dev/sdd incominguser iscsiuser iscsiuser initiator-address 172.16.0.0/16 </target>
说明:
说明: (1)iqn = iSCSI Qualified Name (2)iSCSI target的名称规则如下: iqn.2016.08.com.samlee:iscsi.disk iqn.年份-月份.域名反写.设备识别 (2)每个在同一个target上的backing-store 称为逻辑单元号(Logical Unit Number,LUN), 这个实验中有4个LUN。
配置iSCSI Initiator
(1)安装iSCSI客户端工具
# yum -y install iscsi-initiator-utils
(2)设置开机自启动
# chkconfig iscsi on # chkconfig iscsid on
(3)配置initiator文件
initiator的配置文件位于/etc/iscsi/,该目录下有两个文件,initiatorname.iscsi 和iscsid.conf,其中iscsid.conf 是其配置文件,initiatorname.iscsi 是标记了initiator的名称,我们做如下配置:
# echo "InitiatorName=`iscsi-iname -p iqn.2016.08.com.samlee:iscsi.disk`" > /etc/iscsi/initiatorname.iscsi # echo "InitiatorAlias=node1.samlee.com" >> /etc/iscsi/initiatorname.iscsi
配置iscsid.conf文件开启用户认证:
# vim /etc/iscsi/iscsid.conf 启用一下选项: node.session.auth.authmethod = CHAP node.session.auth.username = iscsiuser node.session.auth.password = iscsiuser
启动iscsi客户端服务
# service iscsi start # service iscsid start
(4)侦测target
如果我们事先不知道目标主机的target名称,我们就需要进行侦测:
# iscsiadm -m discovery -t st -p 172.16.100.3 Starting iscsid: [ OK ] 172.16.100.3:3260,1 iqn.2016.08.com.samlee:iscsi.disk
参数选项说明:
-m discovery //侦测target -t sendtargets //通过iscsi协议 -p IP:port //指定target的IP和port,不写port的话,默认为3260
(5)查看nodes
iscsiadm 侦测到的结果会写入/var/lib/iscsi/nodes/ 中,因此只需启动/etc/init.d/iscsi 就能够在下次开机时,自动连接到正确的target了
# ls /var/lib/iscsi/ ifaces isns nodes send_targets slp static # ls /var/lib/iscsi/send_targets/ 172.16.100.3,3260 # ls -lR /var/lib/iscsi/nodes/ /var/lib/iscsi/nodes/: total 4 drw------- 3 root root 4096 Aug 20 16:42 iqn.2016.08.com.samlee:iscsi.disk /var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk: total 4 drw------- 2 root root 4096 Aug 20 16:42 172.16.100.3,3260,1 /var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk/172.16.100.3,3260,1: total 4 -rw------- 1 root root 1818 Aug 20 16:42 default
侦测信息都写入了/var/lib/iscsi/nodes/iqn.2016.08.com.samlee:iscsi.disk/172.16.100.3,3260,1/default文件中。
(6)连接target
查看目前系统上面所有的target
# iscsiadm -m node 172.16.100.3:3260,1 iqn.2016.08.com.samlee:iscsi.disk
登陆target
# iscsiadm -m node -T iqn.2016.08.com.samlee:iscsi.disk -P 172.16.100.3 -l Logging in to [iface: default, target: iqn.2016.08.com.samlee:iscsi.disk, portal: 172.16.100.3,3260] (multiple) Login to [iface: default, target: iqn.2016.08.com.samlee:iscsi.disk, portal: 172.16.100.3,3260] successful.
(6)查看磁盘状态如下图所示:
现在可以看到,initiator 上面多了四块硬盘,大小和target上的LUN一致。这时你就可以像使用本地磁盘一样使用这些iSCSI设备。
测试应用如下:
(1)将/dev/sdb 和/dev/sdc 创建成LV挂载使用:
创建LV逻辑卷:
# pvcreate /dev/sdb /dev/sdc # vgcreate vg_iscsi /dev/sdb /dev/sdc # lvcreate -L 130G -n lv_iscsi vg_iscsi
格式化创建文件并挂载:
# mke2fs -t ext4 /dev/vg_iscsi/lv_iscsi # mkdir /data # vim /etc/fstab /dev/vg_iscsi/lv_iscsi /data ext4 defaults,_netdev 0 0 # mount -a
创建测试文件:
# touch /data/iscsi{1..100}.txt # ls /data/
创建测试文件成功后,重启客户端:
# df -TH # ls /data/
以上为iSCSI配置实现全过程。