iSCSI服务器

TOC

了解iSCSI服务

一般服务器存储设备除了内置磁盘,内置磁盘都拥有Raid磁盘阵列构成,常见的解决方案就是增加NAS(网络附加存储服务器)或外接存储设备,再高端一点就是SAN(存储局域网)。

NAS与SAN

NAS(Network Attached Storage,网络附加存储服务器):相当于一台文件服务器,通常支持TCP/IP,并会提供NFS、SAMBA、FTP等常见的通信协议来提供客户端取得文件系统

SAN(Storage Area Networks,存储局域网):可以通过某些特殊的接口或信道来提供局域网内所有机器进行磁盘访问,SAN提供磁盘给主机用,而NAS提供的是网络协议的文件系统(NFS、SAMBA等)

什么是iSCSI服务?

iSCSI(Internet Small Computer System Interface):是互联网小型计算机系统接口,通过TCP/IP的技术,将存储设备通过iSCSI target功能,做成可以提供磁盘的服务器端,再通过iSCSI initiator功能做成能够挂载使用iSCSI target的客户端,就可以通过iSCSI协议像访问本地存储设备一样访问远程iSCSI存储设备的应用。

核心组件

  • Target(目标端):存储服务器端,提供可共享的块存储资源(如磁盘、分区、LVM 卷),并通过iSCSI协议将其暴露给网络。
  • Initiator(发起端):客户端,通过iSCSI协议连接Target,将远程块存储识别为本地 “虚拟磁盘”,可直接进行格式化、挂载等操作。
  • IQN(iSCSI Qualified Name):是iSCSI协议中用于唯一标识一个节点(Initiator或Target)的名字(比如:iqn.2023-05.com.example:storage.array1.disk0),相当于iSCSI世界里的“身份证”。
  • Session(会话):Initiator与Target建立的连接,由 一个或多个TCP连接组成,在会话中传输iSCSI命令和数据。
  • PDU(Protocol Data Unit):iSCSI协议的数据传输基本单元,封装了SCSI命令/响应,并通过TCP/IP传输。
  • LUN(Logical Unit Number):Target上暴露给Initiator的逻辑磁盘单元,每个LUN相当于一块可供主机使用的远程磁盘。
  • Discovery(发现机制):Initiator需要发现Target才能使用存储资源。常见方法有SendTargets:Initiator向Target请求其可用LUN列表和iSNS(Internet Storage Name Service):集中式服务,类似DNS,管理和发现iSCSI设备。
  • CHAP 认证(可选):iSCSI支持CHAP(Challenge Handshake Authentication Protocol),用于Initiator和Target双向认证,保证安全性。

工作流程

1.发现阶段:iSCSI发起端首先需要发现可用的iSCSI目标端设备。发起端会向指定的iSCSI发现端口(通常是 TCP 端口 3260)发送发现请求,目标端设备接收到请求后,会返回其自身的信息,包括iSCSI名称、IP地址等。发起端根据这些信息建立与目标端的连接。

2.登录阶段:发起端与目标端建立连接后,会进行登录操作。在登录过程中,发起端和目标端会交换一些必要的参数,如连接的安全设置、数据传输的最大块大小等,以确保双方能够正常通信。

3.数据传输阶段:登录成功后,发起端可以向目标端发送SCSI命令,如读取或写入数据。这些SCSI命令会被封装成iSCSI数据包,通过TCP/IP网络传输到目标端。目标端接收到数据包后,解析其中的SCSI命令,并执行相应的操作。操作完成后,目标端会将结果封装成iSCSI响应数据包返回给发起端。

4.注销阶段:当发起端不再需要访问目标端设备时,会发起注销操作,断开与目标端的连接。在注销过程中,双方会清理相关的资源,确保连接的正常关闭。

iSCSI服务搭建和使用

服务端

1.准备两个新磁盘,查看磁盘。

fdisk -l

如下图所示:
iSCSI.001
2.使用dd命令创建一个仿真的伪磁盘。

dd if=/dev/zero of=/test/disk1.img bs=1M count=500

如下图所示:
iSCSI.002
3.使用mdadm工具创建软RAID阵列设备(两个硬盘/dev/sdb,/dev/sdc)。

 mdadm -Cv /dev/md0 -a yes -n2 -l5 /dev/sd[bc]

查看RAID信息:

mdadm -D /dev/md0

查看信息,如下图所示:
iSCSI.003
编辑mdadm.conf文件写入UUID,文件位置:/etc/mdadm.conf

DEVICE /dev/sdb /dev/sdc  
ARRY /dev/md0 UUID=1b21ca8b:10e18d4b:1ef88c20:440dfe3d

下载安装scsi-target-utils创建iSCSI对象Target,并启动服务。

yum -y install scsi-target-utils
systemctl start tgtd
systemctl enable tgtd

启动之后会发现服务以3260端口的形式运行。
6.查看主机名并创建对象。

tgtadm -L iscsi -o new -m target -t 1 -T iqn.2020-03.com.renjie.test1:raid

我们可以通过一下命令查看对象

tgtadm -L iscsi -o show -m target

查看对象,如下图所示:
iSCSI.004
7.为客户端分配LUN。

tgtadm --lld iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/md0

8.使得target服务端接收initiator客户端的访问。

tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

补充说明:也可以直接修改配置文件,以免重启没有保存配置(记得保存重启服务),配置文件: /etc/tgt/targets.conf

修改内容如下:

default-driver iscsi

<target iqn.2020-03.com.renjie.test1:raid>
backing-store /test/disk1.img
backing-store /dev/md0
initiator-address 192.168.0.0/24
</target>

查看状态:

# 第一种命令方式
tgt-admin --show
# 第二种命令方式
tgtadm -L iscsi -o show -m target

查看状态结果,如下图所示:
iSCSI.005

客户端

配置文件:/etc/iscsi/iscsid.conf
主要程序:/sbin/iscsid
管理iSCSI initiator的主要设置程序:/sbin/iscsiadm
让本机模拟成为iSCSI的主要服务:/etc/init.d/iscsid
启动脚本登录iSCSI target:/etc/init.d/iscsi

开始配置客户端使用
1.安装客户端工具iscsi-initiator-utils

yum -y install iscsi-initiator-utils

2.启动客户端服务

systemctl restart iscsi
systemctl enable iscsi
systemctl restart iscsid
systemctl enable iscsid

2.连接Target并登录。

iscsiadm -m discovery -t sendtargets -p 192.168.0.101
iscsiadm -m node –T iqn.2020-03.com.renjie.test1:raid --login

连接成功的话,如下图所示:
iSCSI.006
3.在客户端服务器查看磁盘是否连接成功,成功就可以对该磁盘进行分区挂载使用之类的操作。

fdisk -l

查看结果,如下图所示:
iSCSI.007

补充说明:如果之前服务端设置了密码这编辑/etc/iscsi/iscsid.conf文件配置密码,内容如下
node.session.auth.username = admin(检测时会用到用户名)
node.session.auth.password = password(检测时会用到密码)
discovery.sendtargets.auth.username = admin(登录时会用到用户)
discovery.sendtargets.auth.password = password(登录时会用到密码)

注销目标

1.先取消挂载,删除UUID,删除挂载点。

umount /test

2.临时注销。

iscsiadm -m node -T iqn.2020-03.com.renjie.test1:raid -p 192.168.0.101 -u

3.永久注销,永久注销iscsi目标前,一定先要临时注销iscsi目标。

 iscsiadm -m node -T iqn.2020-03.com.renjie.test1:raid -p 192.168.0.101 -u

iscsiadm -m node -T iqn.2020-03.com.renjie.test1:raid -p 192.168.0.101 -o delete