iscsi
网络存储设备根据存储技术的不同,主要分为三类: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 )的最大缺点。
- 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)
创建lun(target块设备的逻辑单元):
- 如果是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