第17章:使用 iSCSI 服务部署网络存储
本章学习内容有:介绍计算机硬件存储设备的不同接口技术的优缺点;学习 iSCSI 技术;如何部署 iSCSI 服务端程序?如何远程访问 iSCSI 服务端存储的资源?
一、iSCSI 技术概述
1、硬盘接口协议
硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服务器的整体性能造成影响。前面我们已经学习了硬盘存储结构、RAID磁盘阵列、LVM技术等,这些技术都旨在解决硬盘存储设备的读写速度以及存储数据的安全性。
为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有 IDE、SCSI 和 SATA 这 3 种。
- IDE 是一种成熟稳定、价格便宜的并行传输接口。
- SATA 是一种传输速度更快、数据校验更完整的串行传输接口。
- SCSI 是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。
2、什么是 iSCSI 协议?它解决了什么问题?
不论使用什么类型的硬盘接口,硬盘上的数据总是要通过计算机主板上的总线与 CPU、内存设备进行数据交换,这种物理环境上的限制给硬盘资源的共享带来了各种不便。
后来,IBM 公司开始动手研发基于 TCP/IP 协议和 SCSI 接口协议的新型存储技术,这也就是我们目前能看到的互联网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)。这是一种将 SCSI 接口与以太网技术相结合的新型存储技术,可以用来在网络中传输 SCSI 接口的命令和数据。这样,不仅克服了传统 SCSI 接口设备的物理局限性,实现了跨区域的存储资源共享,还可以在不停机的状态下扩展存储容量。
3、iSCSI 技术在生产环境中的优势和劣势
iSCSI 存储技术非常便捷,在访问存储资源的形式上发生了很大变化,摆脱了物理环境的限制,同时还可以把存储资源分给多个服务器共同使用,因此是一种非常推荐使用的存储技术。
但是,iSCSI 存储技术受到了网速的制约。以往,硬盘设备直接通过主板上的总线进行数据传输,现在则需要让互联网作为数据传输的载体和通道,因此传输速率和稳定性是 iSCSI 技术的瓶颈。随着网络技术的持续发展,相信 iSCSI 技术也会随之得以改善。
4、iSCSI-HBA 卡 与 iSCSI 协议
既然要通过以太网来传输硬盘设备上的数据,那么数据是通过网卡传入到计算机中的么?是通过 iSCSI-HBA 卡来传输数据的。
iSCSI-HBA 卡 与一般的网卡有所不同,一般的网卡是连接网络总线和内存的,而 iSCSI-HBA 卡连接的则是 SCSI 接口(或者 FC光纤通道)总线和内存,其专门用于在主机间交换存储数据,它使用的协议与普通网卡有本质的不同。
运行 Linux系统的服务器会基于 iSCSI 协议把硬盘设备命令与数据打包成标准的 TCP/IP 数据包,然后通过以太网传输到目标存储设备;而当目标存储设备接收到这些数据包后,还需要基于 iSCSI 协议把 TCP/IP 数据包解压成硬盘设备命令与数据。
二、创建 RAID磁盘阵列
既然要使用 iSCSI 存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中出现故障,则维护的难度相较于本地硬盘设备要更加复杂、困难。
因此推荐部署 RAID 磁盘阵列组,确保数据的安全性。下面以配置 RAID5 磁盘阵列组为例进行讲解。
1)在虚拟机中添加 4 块新硬盘,用于稍后创建 RAID5 磁盘阵列和备份盘。
2)使用 mdadm 命令创建 RAID5 磁盘阵列。
其中,-Cv 参数为创建阵列并显示过程,/dev/md0 为生成的阵列组名称,-n 3 参数为创建 RAID 5 磁盘阵列所需的硬盘个数,-l 5 参数为 RAID 磁盘阵列的级别,-x 1 参数为磁盘阵列的备份盘个数。在命令后面要逐一写上使用的硬盘名称。
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
在上述命令成功执行之后,得到一块名称为/dev/md0 的新设备,这是一块 RAID5 级别的磁盘阵列,并且还有一块备份盘为硬盘数据保驾护航。使用 mdadm -D 命令来查看设备的详细信息。
mdadm -D /dev/md0
三、配置 iSCSI 服务端
iSCSI 技术在工作形式上分为服务端(target)与客户端(initiator)。
iSCSI 服务端即用于存放硬盘存储资源的服务器,它作为上述创建的 RAID 磁盘阵列的存储端,能够为用户提供可用的存储资源。
iSCSI 客户端则是用户使用的软件,用于访问远程 iSCSI服务端的存储资源。
1)安装 iSCSI 服务端程序以及其配置命令工具
yum install -y targetd
yum install -y targetcli
2)iSCSI 服务端程序在 Linux系统中的服务名称为 targetd,现在我们启动该服务,并将其添加到开机启动项中去。
systemctl start targetd
systemctl enable targetd
3)使用 targetcli 配置命令
targetcli 是用于管理 iSCSI 服务端存储资源的专用配置命令,它能够提供类似于 fdisk 命令的交互式配置功能,将 iSCSI 共享资源的配置内容抽象成“目录”的形式,我们只需将各类配置信息填入到相应的“目录”中即可。
这里的难点主要在于认识每个“参数目录”的作用。当把配置参数正确地填写到“目录”中后,iSCSI 服务端就可以提供共享资源服务了。
4)配置 iSCSI 服务端共享资源
/backstores/block 是 iSCSI服务端配置共享设备的位置。在 targetcli 交互命令环境下,使用 create 命令把上述所创建的 RAID 5 磁盘阵列 /dev/md0 文件加入到配置共享设备的“资源池”中,并将该文件重新命名为 disk0。
5)创建 iSCSI target 名称及配置共享资源
iSCSI target 名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。
稍后用户在扫描 iSCSI 服务端时即可看到这个字符串。系统在生成这个 target 名称后,还会在/iscsi 参数目录中创建一个与该字符串同名的新“目录”用来存放共享资源。
我们需要把前面加入到 iSCSI 共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录 iSCSI 服务端后,即可默认使用这硬盘设备提供的共享存储资源了。
6)设置 iSCSI 服务端(targetd 服务)的 ACL 访问控制列表
iSCSI 协议是通过客户端名称进行验证的,也就是说,用户在访问 iSCSI 服务端存储的共享资源时不需要输入密码,只要 iSCSI 客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可。
因此我们需要在 iSCSI 服务端的配置文件中写入一串能够验证用户信息的名称。/acls 参数目录用于存放能够访问 iSCSI 服务端共享存储资源的客户端名称。
7)设置 iSCSI 服务端的监听 IP 地址和端口号
位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或 IP 地址对外提供共享存储资源呢?这就需要我们在配置文件中手动定义 iSCSI 服务端的信息,即在 portals 参数目录中写上服务器的 IP 地址,系统将默认使用 3260 端口向外提供 iSCSI 共享存储资源服务。
8)对 iSCSI 服务端配置完成后,执行 exit 命令退出 targetcli 交互环境。最后重启 iSCSI 服务端程序,并设置 firewalld 防火墙策略,使其放行 3260/tcp 端口号的流量。
四、傅用 Linux机器作为 iSCSI 客户端
在 RHEL 7 系统中,已经默认安装了 iSCSI 客户端服务程序 initiator。如果您的系统没有安装的话,可以使用如下命令手动安装:
yum install iscsi-initiator-utils
1)配置 iSCSI 客户端访问 iSCSI服务端的验证信息
iSCSI 协议是通过客户端的名称来进行验证,而该名称也是 iSCSI 客户端的唯一标识,而且必须与服务端配置文件中访问控制列表中的信息一致,否则客户端在尝试访问存储共享设备时,系统会弹出验证失败的保存信息。
vim /etc/iscsi/initiatorname.iscsi
systemctl restart iscsid
systemctl enable iscsid
2)开始访问 iSCSI 服务端的共享存储资源
iSCSI 客户端访问 iSCSI服务端的基本步骤是:“先发现,再登录,最后挂载并使用”。
iscsiadm 是用于管理、查询、插入、更新或删除 iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程 iSCSI 服务端,然后查看找到的服务端上有哪些可用的共享存储资源。
其中,-m discovery 参数的目的是扫描并发现可用的存储资源,-t st 参数为执行扫描操作的类型,-p 参数用于指定 iSCSI 服务端的IP 地址。
[root@localhost ~]# iscsiadm -m discovery -t st -p 192.168.10.10
192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.geekxia.x8664:sn.d497c356ad80
在使用 iscsiadm 命令发现了远程服务器上可用的存储资源后,接下来准备登录 iSCSI 服务端。
其中,-m node 参数为将客户端所在主机作为一台节点服务器,-T 参数指定将要使用的存储资源,-p 参数指定 iSCSI 服务端的 IP 地址,--login 或-l 参数进行登录验证。
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.geekxia.x8664:sn.d497c356ad80 -p 192.168.10.10 --login
在 iSCSI 客户端成功登录之后,会在客户端主机上多出一块名为/dev/sd* 的设备文件(硬盘命名规则由 udev 服务管理着)。使用 file 命令可以查看该设备的信息。
对设备 /dev/sd* 进行格式化,并手动挂载至 iSCSI 客户端的系统中:
格式化:
mkfs.xfs /dev/sd*
挂载:
mkdir /iscsi
mount /dev/sd* /iscsi
df -h
从此以后,这个设备文件/dev/sd* 就如同是iSCSI客户端本机主机上的硬盘那样工作。
3)一个需要注意的问题
由于 udev 服务是按照系统识别硬盘设备的顺序来命名硬盘设备的,当客户端主机同时使用多个远程存储资源时,如果下一次识别远程设备的顺序发生了变化,则客户端挂载目录中的文件也将随之混乱。
为了防止发生这样的问题,我们应该在/etc/fstab 配置文件中使用设备的 UUID 唯一标识符进行挂载,这样不论远程设备资源的识别顺序再怎么变化,系统也能正确找到设备所对应的目录。
blkid 命令可用于查看设备的名称、文件系统及 UUID。
查看指定设备的 UUID:
blkid | grep /dev/sd*
使用 UUID名称 永久挂载远程 iSCSI 服务端的存储资源:由于/dev/sd* 是一块网络存储设备,而 iSCSI 协议是基于TCP/IP 网络传输数据的,因此必须在/etc/fstab 配置文件中添加上_netdev 参数,表示当系统联网后再进行挂载操作,以免系统开机时间过长或开机失败。
vim /etc/fstab
4)卸载 iSCSI 服务端的存储资源
如果我们不再需要使用 iSCSI 共享设备资源了,可以用 iscsiadm 命令的-u 参数将其设备卸载。
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.geekxia.x8664:sn.d497c356ad80 -u
五、使用 Windows机器作为 iSCSI 客户端
使用 Windows 系统作为 iSCSI客户端也可以正常访问 iSCSI 服务器上的共享存储资源,而且其操作原理及步骤与 Linux 系统作为 iSCSI客户端基本相同。
1)在Windows客户端运行 iSCSI 程序。
在 Windows 7 操作系统中已经默认安装了 iSCSI 客户端程序。在控制面板中找到“系统和安全” -> “管理工具” -> “iSCSI 发起程序”,双击该图标。(在第一次运行 iSCSI发起程序时,系统会提示“Microsoft iSCSI 服务端未运行”,单击“是”按钮即可自动启动并运行 iSCSI 发起程序)
2)扫描指定 iSCSI服务器上可用的存储资源。
不论是 Windows 系统还是 Linux 系统,要想使用 iSCSI 共享存储资源都必须先进行扫描发现操作。
运行 iSCSI 发起程序后在“目标”选项卡的“目标”文本框中写入 iSCSI 服务端的 IP 地址,然后单击“快速连接”按钮。在弹出的“快速连接”提示框中可看到共享的硬盘存储资源,单击“完成”按钮即可。
3)连接 iSCSI 服务端的共享存储资源。
由于在 iSCSI 服务端程序上设置了 ACL访问控制权限,使得只有客户端名称与 ACL 策略中的名称保持一致时才能使用远程存储资源,因此需要在“配置”选项卡中单击“更改”按钮,把 iSCSI 发起程序的名称修改为服务端 ACL 所定义的名称。
iSCSI 发起程序的名称修改完成后,点击“连接”即可。
4)访问远程的 iSCSI共享存储资源。
在桌面“计算机”图标上右键,打开计算机管理程序。对磁盘进行初始化操作,初始化完成后
本章复习题
本章 END 2019-01-15