iSCSI简介:
从协议层次的角度看,通常所说的SCSI通常是指一组包含块命令、控制器管理、系统命令和enclosure服务等内容的协议规范,对应于回话层;而其下的物理通道和链接方式就对应在数据链路层,SCSI命令可以通过串口、Fibre Channel、SAS、infiniband、Internet、USB、PCIE等进行传输。iSCSI就是一种把异地存储资源通过TCP/IP网络映射到本地逻辑存储设备的SCSI实现。不同于NFS向用户提供按文件为单位访问远程存储的方式,它向用户提供了以块方式访问远程存储资源的接口,也就是说用户可以在本地/dev/下看到iSCSI映射后的磁盘。通常所说的target端是指远端存储资源所在的主机,比如存储服务器;而initiator端是指链接到target端并会访问远端存储资源的节点。
iSCSI target管理工具的特点:
基于iSCSI的网络属性,很直观地我们能想到它基本上是基于server-client模型。提供存储资源的target相当于server,而使用远程存储资源的initiator端相当于client。基于现有的iSCSI协议规范,能够开发出target端和initiator端工具。在Linux系统上,initiator端工具可以用iscsiadm,目前大部分os都自带有这款工具;而target端的工具由于直接和性能和存储管理相关,数量更多,目前常见的有targetcli、targetadm、ietadm,它们各有所长,分别能适用不同的场合。
适合Linux操作系统的三款ISCSI target工具(服务端)
1、小巧玲珑的LIO targetcli
相对而言,targetcli是最新的target管理工具,内核态基于Linux 2.6.38开始引入的Linux IO Target,用户态提供了targetcli命令和python开发库rtslib,为用户提供了友好的操作界面。为此,现在大部分Linux OS发现版本默认都自带了LIO targetcli。在缺省没有安装的linux OS上,用户可以参考下面的命令进行安装:
Yum安装的软件包:
yum install targetcli
启动服务命令:
systemctl start targetd.service
systemctl start target.service
2、功能完备的tgtadm
在LIO出现之前,tgtadm是首选的target管理工具,被用到企业存储解决方案当中。除了LUN管理、ACL控制等功能之外,它还提供了对已连接上的initiator的检测和iSNS服务的支持。虽然界面没法和LIO的targetcli相比,但是不乏功能强大的命令来完成各种操作。
Yum安装的软件包:
yum install scsi-target-utils.x86_64
启动服务命令:
systemctl start tgtd
3、精益求精的ietadm
tgtadm创建的SCSI设备实际都是在用户态中实现的,存在性能瓶颈。为了解决这个问题,企业级别的target管理工具((iSCSI Enterprise Target) 营运而生,它依赖内核模块iscsi_trgt.ko来帮助iSCSI设备的创建。此外,ietadm提供了以配置脚本的方式来设置和管理target及权限,还提供了显示discovery列表的功能。
/etc/tgt/targets.conf 配置文件参数说明
backing-store (虚拟的装置): 指定挂载的磁盘路径。例如,/dev/sdb
initiator-address (使用者端位址): 设定客户端连接target目标存储输入用户和密码进行验证,不用设定代表所有客户端都能使用,也可以使用iptables 来规范可以连接的客户端。
incominguser (使用者帐号密码设定): 设定限制客户端连接的IP地址。此设定后面接两个参数,分别是帐号与密码。
write-cache [off|on] (是否使用快取):增加target存储目标快取速度,如果数据重要不推荐使用。
一、使用tgtadm工具搭建iscsi共享存储
Linux System Environment
[root@server ~]# cat /etc/redhat-release #==》系统版本
CentOS Linux release 7.5.1804 (Core)
[root@server ~]# uname –r #==》系统内核
3.10.0-862.el7.x86_64
[root@server ~]# uname -m #==》系统位数
x86_64
[root@server ~]# echo $LANG #==》系统字符集
en_US.UTF-8
******Server服务端操作******
1、关闭防火墙及selinux
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
2、安装tgtadm工具并启动
yum install scsi-target-utils -y
systemctl start tgtd
systemctl enable tgtd
systemctl status tgtd
3、配置共享存储磁盘并重启服务生效
cat <> /etc/tgt/targets.conf
backing-store /dev/sdb
initiator-address 10.0.0.0/24
incominguser iscsiadm iscsiadm123
write-cache off
EOF
systemctl restart tgtd
4、查看共享存储情况
tgt-admin -show
******Client客户端操作******
1、关闭防火墙及selinux
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
2、安装iscsi-initiator-utils客户端工具
yum install -y iscsi-initiator-utils
3、启动iscsid和iscsi客户端连接服务
systemctl start iscsi
systemctl start iscsid
systemctl enable iscsi
systemctl enable iscsid
systemctl sttus iscsi
systemctl sttus iscsid
4、修改客户端InitiatorName和CHAP验证用户和密码登录,每客户端的InitiatorName是唯一(自定义)
cat <> /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2020-07.cc.rhce:client02
EOF
sed -i 's/#node.session.auth.authmethod = CHAP/node.session.auth.authmethod = CHAP/g' /etc/iscsi/iscsid.conf
sed -i 's/#node.session.auth.username = username/node.session.auth.username = iscsiadm/g' /etc/iscsi/iscsid.conf
sed -i 's/#node.session.auth.password = password/node.session.auth.password = iscsiadm123/g' /etc/iscsi/iscsid.conf
5、发现target会话(server端共享存储)
[root@client01 ~]# iscsiadm -m discovery -t sendtargets -p 10.0.0.10
10.0.0.10:3260,1 iqn.2014-11.dev.iscsi-target:iscsidisk
6、登录target会话(server端共享存储)
###登录target会话(server端共享存储)
[root@client01 ~]# iscsiadm -m node -T iqn.2014-11.dev.iscsi-target:iscsidisk -p
###退出target会话(server端共享存储)
[root@client01 ~]# iscsiadm -m node -T iqn.2014-11.dev.iscsi-target:iscsidisk -p
##删除target会话(server端共享存储),此命令谨慎使用
iscsiadm -m node -o delete -T iqn.2014-11.dev.iscsi-target:iscsidisk -p 10.0.0.10:3260
7、查看连接
[root@client01 ~]# iscsiadm -m session
tcp: [7] 10.0.0.10:3260,1 iqn.2014-11.dev.iscsi-target:iscsidisk (non-flash)
8、检查连接的ISCSI磁盘
[root@client01 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
9、分区、格式、挂载ISCSI磁盘
[root@client01 ~]# fdisk /dev/sdb
[root@client01 ~]# mkfs.ext4 /dev/sdb1
[root@client01 ~]# mount /dev/sdb1 /mnt
[root@client01 ~]# df -h | grep mnt
/dev/sdb1 9.8G 23M 9.2G 1% /mnt