宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

网络存储设备根据存储技术的不同,主要分为三类:DAS(Direct Attached Storage)、NAS(Network Attached Storage)和SAN(Storage Area Network)。 

DAS  直接连接存储) 是对SCSI总线的进一步发展。它对外利用SCSI总线通道和多个主机连接,解决了SCSI卡只能连接到一个主机上的缺陷。 
NAS(附网存储系统)系统是用一个装有优化的文件系统和瘦操作系统的专用数据存储服务器,提供跨平台的文件共享功能。 
SAN(存储区域网)是通过专用高速网将一个或多个网络存储设备(如磁盘阵列RAID)和服务器连接起来的专用存储系统。

iSCSI协议

        iSCSI 协议定义了在TCP/IP网络发送、接收块级存储数据的规则与方法。发送端将SCSI指令与数据本体封装到TCP/IP封包中,然后通过以太网络发送。接 收端收到TCP/IP封包后,将它们还原为SCSI指令与数据,并依指令执行。完成指令后,再将响应的SCSI指令与数据封装到TCP/IP封包,发回发 送端。通过这种方式,存取远程存储设备时,就如同在本地端存取本机的SCSI硬盘一样

        ISCSI与FC并列为两大标准的块级传输协议。成本昂贵,是部署光纤存储区域网络(FC SAN )的最大缺点。

iscsi-风君子博客

SCSI层:根据客户端发出的请求建立SCSI CDB(命令描述块),并传给iSCSI层。同时接收来自iSCSI层的CDB,并向应用返回数据。
iSCSI层:对SCSI CDB进行封装,以便能够在基于TCP/IP协议的网络上进行传输,完成SCSI到TCP/IP的协议映射。这一层是iSCSI协议的核心层。本章也主要针对这一层的配置和管理进行介绍。
TCP/IP层:对IP报文进行路由和转发,并且提供端到端的透明可靠的传输。

搭建实验环境:

iSCSI Target(服务器端)配置

安装:

# yum -y install targetcli

启动target服务:

# systemctl start target

设置为开机自启动服务:

# systemctl enable target

查看防火墙状态:

# systemctl status firewalld

禁用防火墙:

# systemctl stop firewalld
# systemctl disable firewalld

或者是开放3260端口:

# firewall-cmd --permanent --add-port=3260/tcp
# firewall-cmd --reload

开始配置ISCSI,执行 targetcli 命令后就能看到交互式的配置界面了。在该界面中可以使用很多Linux命令,比如利用ls查看目录参数的结构,使用cd切换到不同的目录中。/backstores/block是iSCSI服务端配置共享设备的位置:

# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
 
/>

有两种方式可以配置共享资源:

使用镜像文件

在执行 targetcli 命令创建的一个40G的镜像:

# dd if=/dev/sda of=/home/ye/iscsi/shareddata.img bs=1024k count=40960

然后可以在相应目录下创建一个名为shareddata 的 fileio backstore:

> /backstores/fileio/ create shareddata /home/ye/iscsi/shareddata.img 40G

使用磁盘分区或者逻辑卷

这种方法通常来说有更好的性能

/> /backstores/block/ create xendata /dev/sdb

然后配置ISCSITarget命名,即创建 IQN Iscsi Qualified Name) :

/> iscsi/ create iqn.2018-06.com.xenserver:xenserver1

进入新创建的目录:

/iscsi/iqn.20...er:xenserver1> cd tpg1/
/iscsi/iqn.20...nserver1/tpg1> ls
o- tpg1 ..................................................................................................... [no-gen-acls, no-auth]
  o- acls ................................................................................................................ [ACLs: 0]
  o- luns ................................................................................................................ [LUNs: 0]
  o- portals .......................................................................................................... [Portals: 1]
    o- 0.0.0.0:3260 ........................................................................................................... [OK]

在目录tpg1下定义了三个object:

acls access control lists: restrict access to resources)
luns logical unit number: define exported resources)
portals define ways to reach the exported resources; consist in pairs of IP addresses and ports)

创建luntarget块设备的逻辑单元):

如果是Fileio backstore

/iscsi/iqn.20...nserver1/tpg1> luns/ create /backstores/fileio/shareddata

如果是Block backstore

/iscsi/iqn.20...ample:t1/tpg1> luns/ create /backstores/block/xendata

创建ACL允许ISCSI客户机连接:

/iscsi/iqn.20...nserver1/tpg1> acls/ create iqn.2018-06.com.xenserver:client

创建用户和密码:

/iscsi/iqn.20...nserver1/tpg1> cd acls
/iscsi/iqn.20...er1/tpg1/acls> cd iqn.2018-06.com.xenserver:client/
/iscsi/iqn.20...server:client> ls
o- iqn.2018-06.com.xenserver:client ............................................................................... [Mapped LUNs: 1]
  o- mapped_lun0 ..................................................................................... [lun0 fileio/shareddata rw)]
/iscsi/iqn.20...server:client> set auth userid=ye
Parameter userid is now 'ye'.
/iscsi/iqn.20...server:client> set auth password=123456
Parameter password is now '123456'.

iSCSI Initiator(客户端)配置

安装:

# yum -y install iscsi-initiator-utils

注:Ubuntu下比较方便好用的initiator是open iscsi:

apt-get install -y open-iscsi

启动iscsi服务:

# systemctl start iscsi

设置为开机自启动服务:

# systemctl enable iscsi

配置ISCSIInitiator名称(此处InitiatorName须与服务端配置的ACL允许ISCSI客户机连接的名称一致):

# vi /etc/iscsi/initiatorname.iscsi

修改为:

InitiatorName=iqn.2018-06.com.xenserver:client

修改ISCSIInitiator配置文件:

/etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = ye
node.session.auth.password = 123456

查找ISCSI设备:

# iscsiadm --mode discovery --type sendtargets --portal 172.20.110.22

连接ISCSI设备:

# iscsiadm --mode node --targetname iqn.2018-06.com.xenserver:xenserver1 --portal 172.20.110.22 --login

查看ISCSI设备状态:

# lsblk --scsi
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
sda  0:0:0:0    disk ATA      ST500DM002-1BD14 KC65 sata
sdb  4:0:0:0    disk LIO-ORG  shareddata       4.0  iscsi
sr0  1:0:0:0    rom  HL-DT-ST DVDRAM GTA0N     LC00 sata

使用命令fdisk -l即可看到新添加的ISCSI设备。

创建文件系统

格式分区:

# mkfs.ext4 /dev/sdb
mke2fs 1.42.9 28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? y,n) y
Filesystem label=
OS type: Linux
Block size=4096 log=2)
Fragment size=4096 log=2)
Stride=0 blocks, Stripe width=2048 blocks
2621440 inodes, 10485760 blocks
524288 blocks 5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624
 
Allocating group tables: done                            
Writing inode tables: done                            
Creating journal 32768 blocks): done
Writing superblocks and filesystem accounting information: done   

提取给磁盘的UUID :

# blkid | grep "/dev/sdb"
/dev/sdb: UUID="cb6d172d-1db0-4881-942e-9e88d20a074e" TYPE="ext4" 
# echo "UUID=cb6d172d-1db0-4881-942e-9e88d20a074e" >> /etc/fstab

添加挂载点:

# vi /etc/fstab
UUID=cb6d172d-1db0-4881-942e-9e88d20a074e /mnt/xenserver ext4 _netdev 0 0

其中,  /mnt/xenserver是挂载路径,  ext4代表文件系统  ,_netdev代表该挂载的磁盘分区为网络磁盘分区。

挂载:

# mount /mnt/xenserver

最后设置开机自动连接ISCSI设备:

# iscsiadm --mode node --targetname iqn.2018-06.com.xenserver:xenserver1 --portal 172.20.110.22  -o update -n node.startup -v automatic