1. iSCSI 技术介绍
硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服务器的整体性能造成影响。硬盘存储结构、RAID 磁盘阵列技术以及LVM 技术等都是用于存储设备的技术,尽管这些技术有软件层面和硬件层面之分,但是它们都旨在解决硬盘存储设备的读写速度问题,或者竭力保障存储数据的安全。
为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有 IDE、SCSI 和 SATA 这 3 种。
➢ IDE:一种成熟稳定、价格便宜的并行传输接口。
➢ SATA:一种传输速度更快、数据校验更完整的串行传输接口。
➢ SCSI:一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。
无论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与 CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各种不便。后来,IBM 公司开始动手研发基于 TCP/IP 协议和 SCSI 接口协议的新型存储技术,这也就是我们目前能看到的互联网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)。这是一种将 SCSI 接口与以太网技术相结合的新型存储技术,可以用来在网络中传输 SCSI 接口的命令和数据。这样,不仅克服了传统 SCSI 接口设备的物理局限性,实现了跨区域的存储资源共享,而且可以在不停机的状态下扩展存储容量。
下面将讲解一下 iSCSI 技术在生产环境中的优势和劣势。首先,(优势)iSCSI 存储技术非常便捷,在访问存储资源的形式上发生了很大变化,摆脱了物理环境的限制,同时还可以把存储资源分给多个服务器共同使用,因此是一种非常推荐使用的存储技术。但是,(劣势)iSCSI 存储技术受到了网速的制约。以往硬盘设备直接通过主板上的总线进行数据传输,现在则需要让互联网作为数据传输的载体和通道,因此传输速率和稳定性是 iSCSI 技术的瓶颈。随着网络技术的持续发展,相信 iSCSI 技术也会随之得以改善。
既然要通过以太网来传输硬盘设备上的数据,那么数据是通过网卡传入到计算机中的么?这就有必要向大家介绍 iSCSI-HBA 卡了。与一般的网卡不同(连接网络总线和内存,供计算机上网使用),iSCSI-HBA 卡连接的则是 SCSI 接口或 FC(光纤通道)总线和内存,专门用于在主机之间交换存储数据,其使用的协议也与一般网卡有本质的不同。运行 Linux 系统的服务器会基于 iSCSI 协议把硬盘设备命令与数据打包成标准的 TCP/IP 数据包,然后通过以太网传输到目标存储设备,而当目标存储设备接收到这些数据包后,还需要基于iSCSI 协议把 TCP/IP 数据包解压成硬盘设备命令与数据。
总结来说,iSCSI 技术具有硬件成本低、操作简单、维护方便以及扩展性强等优势,为我们提供了数据集中化存储的服务,而且其以区块为单位的数据存储空间,在简化了存储空间管理步骤的前提下,还增添了存储空间的弹性。对于用户而言,仿佛计算机上多了一块新的“本地硬盘”,可以使用本地的计算机操作系统进行管理,就像是使用本地硬盘那样来使用远程存储空间。这种高扩展性和低组建成本、低维护成本的整合存储方式,正是大部分预算受限的中小企业和办公室所需要的。
2. 创建 RAID 磁盘阵列
既然要使用 iSCSI 存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度相较于本地硬盘设备要更加复杂、困难。因此推荐各位读者按照本书第 6 章讲解的知识来部署 RAID 磁盘阵列组,确保数据的安全性。下面以配置 RAID 5 磁盘阵列组为例进行讲解。考虑到第 6 章已经事无巨细地讲解了 RAID 磁盘阵列技术和配置方法,因此本节不会再重复介绍相关参数的意义以及用途,忘记了的读者可以返回去看一下。
首先在虚拟机中添加 4 块新硬盘,用于创建 RAID 5 磁盘阵列和备份盘,如图所示。
启动虚拟机系统,使用 mdadm 命令创建 RAID 磁盘阵列。其中,-Cv 参数为创建阵列并显示过程,/dev/md0 为生成的阵列组名称,-n 3 参数为创建 RAID 5 磁盘阵列所需的硬盘个数,-l 5 参数为 RAID 磁盘阵列的级别,-x 1 参数为磁盘阵列的备份盘个数。在命令后面要逐一写上使用的硬盘名称。另外,还允许使用通配符来指定硬盘设备的名称,感兴趣的可以试一下。
[root@linuxprobe~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
在上述命令成功执行之后,得到一块名称为/dev/md0 的新设备,这是一块 RAID 5 级别的磁盘阵列,并且还有一块备份盘为硬盘数据保驾护航。大家可使用 mdadm -D 命令来查看设备的详细信息。另外,由于在使用远程设备时极有可能出现设备识别顺序发生变化的情况,因此,如果直接在 fstab 挂载配置文件中写入/dev/sdb、/dev/sdc 等设备名称的话,就有可能在下一次挂载了错误的存储设备。而 UUID 值是设备的唯一标识符,用于精确地区分本地或远程设备。于是我们可以把这个值记录下来,一会儿准备填写到挂载配置文件中。
[root@linuxprobe~]# mdadm -D /dev/md0
/dev/md0: Version : 1.2 Creation Time : Tue Apr 27 08:06:43 2021 Raid Level : raid5 Array Size : 41908224 (39.97 GiB 42.91 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Tue Apr 27 08:08:28 2021 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Consistency Policy : resync Name : linuxprobe.com:0 (local to host linuxprobe.com) UUID : 759282f9:093dbf7c:a6c4a16d:ed70333c Events : 18 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 4 8 48 2 active sync /dev/sdd 3 8 64 - spare /dev/sde
3. 配置 iSCSI 服务端
iSCSI 技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI 服务端即用于存放硬盘存储资源的服务器,它作为前面创建的 RAID 磁盘阵列的存储端,能够为用户提供可用的存储资源。iSCSI 客户端则是用户使用的软件,用于访问远程服务端的存储资源。下面按照表来配置iSCSI 服务端和客户端所用的 IP 地址。
第一步:在 RHEL 8/CentOS 8 系统中,默认已经安装了 iSCSI 服务端程序,用户需要做的是配置好软件仓库后安装 iSCSI 服务端的交换式配置工具。相较于直接修改配置文件,通过交互式的配置过程来完成对参数的设定既方便又安全。在 dnf 命令的后面添加-y 参数后,在安装过程中就不需要再进行手动确认了:
[root@linuxprobe~]# dnf install -y targetcli
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use
subscription-manager to register.
Last metadata expiration check: 0:23:54 ago on Tue 27 Apr 2021 08:12:59 AM CST.
Dependencies resolved.
=============================================================================== Package Arch Version Repository Size
===============================================================================
Installing: targetcli noarch 2.1.fb49-1.el8 AppStream 73 k
Installing dependencies: python3-configshell noarch 1:1.1.fb25-1.el8 BaseOS 74 k python3-kmod x86_64 0.9-20.el8 BaseOS 90 k python3-pyparsing noarch 2.1.10-7.el8 BaseOS 142 k python3-rtslib noarch 2.1.fb69-3.el8 BaseOS 100 k python3-urwid x86_64 1.3.1-4.el8 BaseOS 783 k target-restore noarch 2.1.fb69-3.el8 BaseOS 23 k Transaction Summary
===============================================================================
Install 7 Packages
………………省略部分输出信息………………
Installed products updated. Installed:
targetcli-2.1.fb49-1.el8.noarch python3-configshell-1:1.1.fb25-1.el8.noarch python3-kmod-0.9-20.el8.x86_64 python3-pyparsing-2.1.10-7.el8.noarch python3-rtslib-2.1.fb69-3.el8.noarch python3-urwid-1.3.1-4.el8.x86_64 target-restore-2.1.fb69-3.el8.noarch Complete!
iSCSI 是跨平台的协议,因此用户也可以在 Windows 系统下搭建 iSCSI 服务端,再共享给 Linux 系统主机。 DataCore 软件公司推出的SANmelody 或是 FalconStor 软件公司推出的 iSCSI Server for Windows 等软件,在 Windows系统上使用都是要收费的。
第二步:配置 iSCSI 服务端共享资源。targetcli 是用于管理 iSCSI 服务端存储资源的专用配置命令,它能够提供类似于 fdisk 命令的交互式配置功能,将 iSCSI 共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。这里的难点主要在于认识每个“参数目录”的作用。当把配置参数正确地填写到“目录”中后,iSCSI服务端也就可以提供共享资源服务了。
在执行 targetcli 命令后就能看到交互式的配置界面了。在该界面中允许使用很多 Linux命令,比如利用 ls 查看目录参数的结构,使用 cd 切换到不同的目录中。
[root@linuxprobe~]# targetcli
targetcli shell version 2.1.fb49
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'. /> ls
o- / ........................................................ [...] o- backstores ............................................. [...] | o- block ................................. [Storage Objects: 0] | o- fileio ................................ [Storage Objects: 0] | o- pscsi ................................. [Storage Objects: 0] | o- ramdisk ............................... [Storage Objects: 0] o- iscsi ........................................... [Targets: 0] o- loopback ........................................ [Targets: 0]
/>
/backstores/block 是 iSCSI 服务端配置共享设备的位置。我们需要把刚刚创建的 RAID 5 磁盘阵列 md0 文件加入到配置共享设备的“资源池”中,并将该文件重新命名为 disk0,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为 disk0的存储设备。
/> cd /backstores/block
/backstores/block> create disk0 /dev/md0
Created block storage object disk0 using /dev/md0.
/backstores/block> cd /
/> ls
o- / ......................................................... [...] o- backstores .............................................. [...] | o- block .................................. [Storage Objects: 1] | | o- disk0 ......... [/dev/md0 (40.0GiB) write-thru deactivat
ed] | | o- alua ................................... [ALUA Groups: 1] | | o- default_tg_pt_gp .........[ALUA state: Active/optimized] | o- fileio ................................. [Storage Objects: 0] | o- pscsi .................................. [Storage Objects: 0] | o- ramdisk ................................ [Storage Objects: 0] o- iscsi ............................................ [Targets: 0] o- loopback ......................................... [Targets: 0]
/>
第三步:创建 iSCSI target 名称及配置共享资源。iSCSI target 名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。稍后用户在扫描 iSCSI 服务端时即可看到这个字符串,因此我们不需要记住它。
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6cad5.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> ls
o- iscsi ....................................................[Targets: 1]
o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6cad5
[TPGs: 1] 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]
注:请注意,在 iSCSI 自动生成的名称中,最后一个.为句号,不是名称中的一部分。
系统在生成这个 target 名称后,还会在/iscsi 参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到 iSCSI 共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录 iSCSI 服务端后,即可默认使用这硬盘设备提供的共享存储资源了。
/iscsi> cd iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6cad5/
/iscsi/iqn.20....745b21d6cad5> cd tpg1/luns
/iscsi/iqn.20...ad5/tpg1/luns> create /backstores/block/disk0
Created LUN 0.
第四步:设置访问控制列表(ACL)。iSCSI 协议是通过客户端名称进行验证的。也就是说,用户在访问存储共享资源时不需要输入密码,只要 iSCSI 客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在 iSCSI 服务端的配置文件中写入一串能够验证用户信息的名称。acls 参数目录用于存放能够访问 iSCSI 服务端共享存储资源的客户端名称。推荐在刚刚系统生成的 iSCSI target 后面追加上类似于:client 的参数,这样既能保证客户端的名称具有唯一性,又非常便于管理和阅读:
/iscsi/iqn.20...ad5/tpg1/luns> cd ..
/iscsi/iqn.20...21d6cad5/tpg1> cd acls
/iscsi/iqn.20...ad5/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.x8
664:sn.745b21d6cad5:client
Created Node ACL for iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6ca
d5:client
Created mapped LUN 0.
第五步:设置 iSCSI 服务端的监听 IP 地址和端口号。位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或 IP 地址对外提供共享存储资源呢?在配置文件中默认是允许所有网卡提供 iSCSI 服务,如果您认为这有些许不安全,可以手动删除:
/iscsi/iqn.20...ad5/tpg1/acls> cd ../portals/
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................. [Portals: 1] o- 0.0.0.0:3260 ..................................................... [OK]
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
继续进行设置,使系统使用服务器 IP 地址 192.168.10.10 的 3260 端口向外提供 iSCSI 共享存储资源服务:
/iscsi/iqn.20.../tpg1/portals> create 192.168.10.10
Using default IP port 3260
Created network portal 192.168.10.10:3260.
第六步:在参数文件配置妥当后,浏览刚刚配置的信息,确保上述提到的“目录”都已经填写了正确的内容。在确认信息无误后输入 exit 命令退出配置。注意,千万不要习惯性地按 Ctrl + C 组合键结束进程,这样不会保存配置文件,我们的工作也就白费了。
/iscsi/iqn.20.../tpg1/portals> cd /
/> ls
o- / ...................................................................[...] o- backstores ........................................................[...] | o- block ............................................[Storage Objects: 1] | | o- disk0 ........... [/dev/md0 (40.0GiB) write-thru activated] | | o- alua .............................................[ALUA Groups: 1] | | o- default_tg_pt_gp ......... [ALUA state: Active/optimized] | o- fileio ...........................................[Storage Objects: 0] | o- pscsi ............................................[Storage Objects: 0] | o- ramdisk ..........................................[Storage Objects: 0] o- iscsi ......................................................[Targets: 1] |o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6ca
d5 [TPGs: 1] | o- tpg1 .........................................[no-gen-acls, no-auth] | o- acls ....................................................[ACLs: 1] | | o-iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6
cad5:client [Mapped LUNs: 1] | | o- mapped_lun0 ...........................[lun0 block/disk0
(rw)] | o- luns ....................................................[LUNs: 1] | | o- lun0 ....... [block/disk0 (/dev/md0) (default_tg_pt_gp)] | o- portals ..............................................[Portals: 1] | o- 192.168.10.10:3260 .........................................[
OK] o- loopback ...................................................[Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
清空 iptables防火墙中的默认策略,设置 firewalld 防火墙,使其放行 iSCSI 服务或 3260/TCP端口号:
[root@linuxprobe~]# iptables -F
[root@linuxprobe~]# iptables-save
[root@linuxprobe~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@linuxprobe~]# firewall-cmd --reload
success
4. 配置 Linux 客户端
我们在前面的章节中已经配置了很多 Linux 服务,基本上可以说,无论是什么服务,客户端的配置步骤都要比服务端的配置步骤简单一些。在 RHEL 8 系统中,已经默认安装了 iSCSI客户端服务程序 initiator。如果您的系统没有安装的话,可以使用软件仓库手动安装。
[root@linuxprobe~]# dnf install iscsi-initiator-utils
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use
subscription-manager to register.
Last metadata expiration check: 0:00:04 ago on Tue 27 Apr 2021 01:34:47 AM CST.
Package iscsi-initiator-utils-6.2.0.876-7.gitf3c8e90.el8.x86_64 is already
installed.
Dependencies resolved.
Nothing to do.
Complete!
前面讲到,iSCSI 协议是通过客户端的名称来进行验证的,而该名称也是 iSCSI 客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。
下面编辑 iSCSI 客户端中的 initiator 名称文件,把服务端的访问控制列表名称填写进来,然后重启客户端 iscsid 服务程序并将其加入到开机启动项中:
[root@linuxprobe~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6cad5:client
[root@linuxprobe~]# systemctl restart iscsid
[root@linuxprobe~]# systemctl enable iscsid
Created symlink /etc/systemd/system/multi-user.target.wants/iscsid.service→ /
usr/lib/systemd/system/iscsid.service.
iSCSI 客户端访问并使用共享存储资源的步骤很简单,只需要记住一个小口诀“先发现,再登录,最后挂载并使用”。iscsiadm 是用于管理、查询、插入、更新或删除 iSCSI 数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程 iSCSI 服务端,然后查看找到的服务端上有哪些可用的共享存储资源。其中,-m discovery 参数的目的是扫描并发现可用的存储资源,-t st 参数为执行扫描操作的类型,-p 192.168.10.10 参数为 iSCSI 服务端的 IP 地址:
[root@linuxprobe~]# iscsiadm -m discovery -t st -p 192.168.10.10
192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b21d6cad5
在使用 iscsiadm 命令发现了远程服务器上可用的存储资源后,接下来准备登录 iSCSI 服务端。其中,-m node 参数为将客户端所在主机作为一台节点服务器,-T 参数为要使用的存储
资源(大家可以直接复制前面命令中扫描发现的结果,以免录入错误),-p 192.168.10.10 参数
依然为对方 iSCSI 服务端的 IP 地址。最后使用--login 或-l 参数进行登录验证。
[root@linuxprobe~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.745b21d6cad5 -p 192.168.10.10 --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.745b21d6cad5, portal: 192.168.10.10,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:
sn.745b21d6cad5, portal: 192.168.10.10,3260] successful.
在 iSCSI 客户端成功登录之后,会在客户端主机上多出一块名为/dev/sdb 的设备文件。前面曾经讲过,udev 服务在命名硬盘名称时,与硬盘插槽是没有关系的。接下来便能够像使用本地主机上的硬盘那样来操作这个设备文件了。
[root@linuxprobe~]# ls -l /dev/sdb
brw-rw----. 1 root disk 8, 16 Apr 27 01:43 /dev/sdb
[root@linuxprobe~]# file /dev/sdb
/dev/sdb: block special (8/16)
下面进入标准的磁盘操作流程。考虑到大家已经学习了这部分内容,外加这个设备文件本身只有 40GB 的容量,因此不必进行分区,而是直接格式化并挂载使用。
[root@linuxprobe~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb isize=512 agcount=16, agsize=654720 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1
data = bsize=4096 blocks=10475520, imaxpct=25 = sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=5120, version=2 = sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@linuxprobe~]# mkdir /iscsi
[root@linuxprobe~]# mount /dev/sdb /iscsi/
不放心的话,可以使用 df 命令查看挂载情况:
[root@linuxprobe~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 974M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/sdb 40G 319M 40G 1% /iscsi
从此以后,这个设备文件就如同是客户端本机上的硬盘那样工作。需要提醒大家的是,由于udev 服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。为了防止发生这样的问题,应该在/etc/fstab 配置文件中使用设备的 UUID 进行挂载。这样,不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录。
blkid 命令用于查看设备的名称、文件系统及 UUID。可以使用管道符进行过滤,只显示与/dev/sdb 设备相关的信息:
[root@linuxprobe~]# blkid | grep /dev/sdb
/dev/sdb: UUID="0937b4ec-bada-4a09-9f99-9113296ab72d" TYPE="xfs"
由于/dev/sdb 是一块网络存储设备,而 iSCSI 协议是基于TCP/IP 网络传输数据的,因此必须在/etc/fstab 配置文件中添加上_netdev 参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败:
[root@linuxprobe~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Feb 25 10:42:11 2021
#
# Accessible filesystems, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and blkid(8) for more info.
#
# After editing, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=37d0bdc6-d70d-4cc0-b356-51195ad90369 /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
UUID="0937b4ec-bada-4a09-9f99-9113296ab72d" /iscsi xfs defaults 0 0
如果我们不再需要使用 iSCSI 共享设备资源了,可以用 iscsiadm 命令的-u 参数将其设备卸载:
[root@linuxprobe~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.745b21d6cad5 -u
Logging out of session [sid: 1, target: iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.745b21d6cad5, portal: 192.168.10.10,3260]
Logout of [sid: 1, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.745b
21d6cad5, portal: 192.168.10.10,3260] successful.
这种获取 iSCSI 远程存储的方法依赖的是 RHEL 8 系统自带的 iSCSI initiator 软件程序。该软件程序将以太网卡虚拟成 iSCSI 卡,进而接收数据,然后基于 TCP/IP 协议在主机与 iSCSI 存储设备之间实现数据传输功能。这种方式仅需主机与网络即可实现,因此成本是最低的。但是,在采用这种方式传输数据时,与 iSCSI 和 TCP/IP 相关的命令数据会消耗客户端自身的 CPU 计算性能,因此存在一定的额外开销。一般建议在低 I/O 或者低带宽要求的环境中使用这种方式。
如果在后续的生产环境中需要进行大量的远程数据存储,建议自行配备 iSCSI HBA(Host BusAdapter,主机总线适配器)硬件卡设备,并将其安装到 iSCSI 服务器上,从而实现 iSCSI服务器与交换机之间、iSCSI 服务器与客户端之间的高效数据传输。与 initiator 的软件方式相比,iSCSI HBA 硬件卡设备不需要消耗 CPU 计算性能,而且它是专用的远程数据存储设备,因此对 iSCSI 的支持也会更好。但是,iSCSI HBA 硬件卡设备的价格会稍微贵一些,大家需要在性能和成本之间进行权衡。
5. 配置 Windows 客户端
使用 Windows 系统的客户端也可以正常访问 iSCSI 服务器上的共享存储资源,而且操作原理及步骤与 Linux 系统的客户端基本相同。在进行下面的实验之前,请先关闭 Linux 系统客户端,以免这两台客户端主机同时使用 iSCSI 共享存储资源而产生潜在问题。下面按照表来配置 iSCSI 服务器和 Windows 客户端所用的 IP 地址。
第一步:运行 iSCSI 发起程序。在 Windows 10 操作系统中已经默认安装了 iSCSI 客户端程序,我们只需在控制面板中找到“系统和安全”标签,然后单击“管理工具”(见图 17-3),进入到“管理工具”页面后即可看到“iSCSI 发起程序”图标。双击该图标,在第一次运行 iSCSI发起程序时,系统会提示“Microsoft iSCSI 服务端未运行”,单击“是”按钮即可自动启动并运行 iSCSI 发起程序,如图 17-4 所示。
第二步:扫描发现 iSCSI 服务端上可用的存储资源。不论是 Windows 系统还是 Linux 系统,要想使用 iSCSI 共享存储资源,都必须先进行扫描发现操作。运行 iSCSI 发起程序后在“目标”选项卡的“目标”文本框中写入 iSCSI 服务端的 IP 地址,然后单击“快速连接”按钮,如图 17-5 所示。
在弹出的“快速连接”对话框中可看到共享的硬盘存储资源,此时显示“无法登录到目标”属于正常情况,单击“完成”按钮即可,如图 17-6 所示。
回到“目标”选项卡页面,可以看到共享存储资源的名称已经出现,如图 17-7 所示。
第三步:准备连接 iSCSI 服务端的共享存储资源。由于在 iSCSI 服务端程序上设置了 ACL,使得只有客户端名称与 ACL 策略中的名称保持一致时才能使用远程存储资源,因此首先需要在“配置”选项卡中单击“更改”按钮(见图 17-8),随后在修改界面写入 iSCSI 服务器配置过的ACL 策略名称(见图 17-9),最后重新返回到 iSCSI 发起程序的“目标”界面(见图 17-10)。
在确认 iSCSI 发起程序名称与 iSCSI 服务器 ACL 策略一致后,重新单击“连接”按钮,如图 17-11 所示,并单击“确认”按钮。大约 1~3 秒后,状态会更新为“已连接”,如图 17-12所示。
第四步:访问 iSCSI 远程共享存储资源。右键单击桌面上的“计算机”图标,打开计算机管理程序,如图 17-13 所示。
开始对磁盘进行初始化操作,如图 17-14 所示。Windows 系统用来初始化磁盘设备的步骤十分简单,各位读者都可以玩得转 Linux 系统,相信 Windows 系统就更不在话下了。Windows系统的初始化过程步骤如图 17-15~图 17-21 所示。
接下来即可进入正常的使用过程。由于整个传输过程是完全透明的,而且像一块本地硬盘那样稳定,因此不知情的用户可能都察觉不到这是一块远程存储设备。不过,这只是理论状态,实际上的 iSCSI 数据传输速率并不能完全达到本地硬盘的性能,会或多或少地受到网络带宽的影响,只不过差别不明显罢了。考虑到 iSCSI 存储技术还有一个优势,就是安全性高,这对于数据集中存储来讲显得十分重要。因此,在进行数据存储与传输时,iSCSI 值得一试!