SCSI 是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。IBM 公司开始动手研发基于 TCP/IP 协议和 SCSI 接口协议的新型存储技术,这也就是我们目前能看到的互联网小型计算机系统接口( iSCSI, Internet Small Computer System Interface)。
iSCSI的优缺点:
- iSCSI 存储技术非常便捷,在访问存储资源的形式上发生了很大变化,摆脱了物理环境的限制,同时还可以把存储资源分给多个服务器共同使用,因此是一种非常推荐使用的存储技术。
- 受到网速的制约,以往,硬盘设备直接通过主板上的总线进行数据传输,现在则需要让互联网作为数据传输的载体和通道,因此传输速率和稳定性是 iSCSI 技术的瓶颈。
iSCSI-HBA卡:
与一般的网卡不同(连接网络总线和内存,供计算机上网使用), iSCSI-HBA 卡连接的则是 SCSI 接口或 FC(光纤通道)总线和内存,专门用于在主机之间交换存储数据,其使用的协议也与一般网卡有本质的不同。运行 Linux系统的服务器会基于 iSCSI 协议把硬盘设备命令与数据打包成标准的 TCP/IP 数据包,然后通过以太网传输到目标存储设备,而当目标存储设备接收到这些数据包后,还需要基于 iSCSI 协议把 TCP/IP 数据包解压成硬盘设备命令与数据。
iSCSI服务配置:
- 安装targetcli并启动
yum install targetd targetcli.noarch
systemctl start targetd
systemctl enable targetd
- 配置iSCSI服务端共享资源。在执行 targetcli 命令后就能看到交互式的配置界面了。在该界面中可以使用很多 Linux 命令,比如利用 ls 查看目录参数的结构,使用 cd 切换到不同的目录中。 /backstores/block 是 iSCSI服务端配置共享设备的位置。我们需要把刚刚创建的 RAID 5 磁盘阵列 md0 文件加入到配置共享设备的“资源池”中,并将该文件重新命名为 disk0,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为 disk0 的存储设备。
startcli
create disk0 /dev/md0
- 创建 iSCSI target 名称及配置共享资源。
iSCSI target 名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。系统在生成这个 target 名称后,还会在/iscsi 参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到 iSCSI 共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录 iSCSI 服务端后,即可默认使用这硬盘设备提供的共享存储资源了。 - 设置访问控制列表( ACL)。
iSCSI 协议是通过客户端名称进行验证的,也就是说,用户在访问存储共享资源时不需要输入密码,只要 iSCSI 客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在 iSCSI 服务端的配置文件中写入一串能够验证用户信息的名称。acls 参数目录用于存放能够访问 iSCSI 服务端共享存储资源的客户端名称。
/iscsi/iqn.20...d80/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.d497c356ad80:client
- 设置 iSCSI 服务端的监听 IP 地址和端口号。
位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或 IP 地址对外提供共享存储资源呢?这就需要我们在配置文件中手动定义 iSCSI 服务端的信息,即在 portals 参数目录中写上服务器的 IP 地址。
/iscsi/iqn.20.../tpg1/portals> create 192.168.180.10
- 配置妥当后检查配置信息, 重启 iSCSI 服务端程序并配置防火墙策略。
/iscsi/iqn.20.../tpg1/portals> ls /
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- disk0 ........................................................................... [/dev/md0 (40.0GiB) write-thru activated]
| 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.b7a83b4a95d5 ...................................................... [TPGs: 1]
| o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 1]
| | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.b7a83b4a95d5:client .................................. [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
| o- luns .......................................................................................................... [LUNs: 1]
| | o- lun0 ......................................................................................... [block/disk0 (/dev/md0)]
| o- portals .................................................................................................... [Portals: 1]
| o- 192.168.180.10:3260 .............................................................................................. [OK]
o- loopback ......................................................................................................... [Targets: 0]
/iscsi/iqn.20.../tpg1/portals> exit
[root@linuxprobe ~]# systemctl restart targetd
[root@linuxprobe ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@linuxprobe ~]# firewall-cmd --reload
success
iSCSI Linux客户端配置
- 安装iSCSI 客户端服务程序 initiator。
yum install iscsi-initiator-utils
- iSCSI 客户端访问并使用共享存储资源。(先发现,再登录,最后并使用)
iscsiadm -m discovery -t st -p 192.168.180.10
其中, -m node 参数为将客户端所在主机作为一台节点服务器, -T iqn.2003-01. org.linuxiscsi.linuxprobe.x8664:sn.d497c356ad80 参数为要使用的存储资源(大家可以直接复制前面命令中扫描发现的结果,以免录入错误), -p 192.168.10.10 参数依然为对方 iSCSI 服务端的 IP 地址。最后使用--login 或-l 参数进行登录验证。
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -p 192.168.10.10 --login
- 如果我们不再需要使用 iSCSI 共享设备资源了,可以用 iscsiadm 命令的-u 参数将其设备卸载:
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 -u