引言
iSCSI(Internet Small Computer System Interface)是一种基于IP网络的存储协议,允许通过TCP/IP网络进行存储设备的访问。iSCSI 技术使存储设备可以像普通的网络设备一样通过标准的以太网连接进行通信,从而实现了存储资源的网络化和远程访问。本文将详细介绍iSCSI的基本概念、配置方法以及在Linux系统中的应用场景。
一、iSCSI 概述
iSCSI 协议将传统的SCSI命令封装在TCP/IP协议中,使得SCSI设备可以通过IP网络进行通信。通过iSCSI技术,可以将远程的存储设备(称为Target)呈现给本地系统(称为Initiator),从而使本地系统能够像访问本地磁盘一样访问远程存储。
二、iSCSI 的基本组件
- iSCSI Initiator:发起iSCSI连接的一方,通常是需要访问存储资源的客户端系统。
- iSCSI Target:提供存储资源的一方,通常是存储服务器或存储阵列。
- LUN(Logical Unit Number):iSCSI Target上的逻辑单元号,每个LUN代表一个存储设备。
- IQN(iSCSI Qualified Name):用于唯一标识iSCSI Initiator和Target的名称,格式为iqn.yyyy-mm.naming-authority:unique-string。
三、iSCSI 的工作流程
- 发现目标:Initiator通过广播或多播发现iSCSI Target,或者直接通过已知的IP地址连接Target。
- 登录阶段:Initiator与Target建立会话,进行认证(如果启用)。
- 认证阶段:双方进行认证,验证彼此的身份。
- 全双工阶段:双方进行正常的SCSI命令交互。
- 会话终止:当不再需要访问存储时,Initiator可以终止会话。
四、Linux 系统中的 iSCSI 配置
4.1. 安装 iSCSI Initiator
在Linux系统中,通常需要安装iscsi-initiator-utils或open-iscsi包来支持iSCSI功能。
yum install open-iscsi
4.2. 发现 iSCSI Target
使用iscsiadm命令发现iSCSI Target。
iscsiadm -m discovery -t st -p target_ip_address
4.3. 登录 iSCSI Target
登录发现的iSCSI Target:
iscsiadm -m node -T target_iqn -p target_ip_address -l
4.4. 配置自动登录:
将iSCSI Target添加到/etc/iscsi/iscsi.conf或/etc/iscsi/initiatorname.iscsi中,以实现自动登录。
InitiatorName=iqn.2003-01.org.linux-iscsi:initiatorname
并在/etc/iscsi/iscsid.conf中设置自动启动:
node.startup = automatic
4.5. 格式化和挂载 LUN
一旦登录成功,iSCSI LUN将作为一个新的磁盘设备出现在Linux系统中。可以对其进行格式化并挂载:
mkfs.ext4 /dev/sdb
mkdir /mnt/iscsi
mount /dev/sdb /mnt/iscsi
4.6. 验证挂载状态
使用df -h命令验证LUN是否成功挂载
df -h
五、配置实战
主机名称 | 操作系统 | IP地址 |
iSCSI服务端 | kylin v10 | 192.168.2.136 |
iSCSI客户端 | kylin v10 | 192.168.2.137 |
5.1 服务端配置
1) 安装iSCSI服务端程序
# dnf install -y targetcli
2)确认服务端未使用的存储
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdb 8:16 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4G 0 rom /run/media/root/Kylin-Server-10
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 99G 0 part
├─klas-root 253:0 0 65.1G 0 lvm /
├─klas-swap 253:1 0 2G 0 lvm [SWAP]
└─klas-backup 253:2 0 31.8G 0 lvm
我们选择sdc磁盘
3)配置iSCSI服务端共享资源
# targetcli
targetcli shell version 2.1.54
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]
o- vhost ...................................................................................... [Targets: 0]
o- xen-pvscsi ................................................................................. [Targets: 0]
/>
/backstores/block是iSCSI服务端配置共享设备的位置,将sdc加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0
/backstores/block> create kyshare1 /dev/sdc
Created block storage object kyshare1 using /dev/sdc.
/backstores/block> ls
o- block ................................................................................ [Storage Objects: 1]
o- kyshare1 .................................................... [/dev/sdc (20.0GiB) write-thru deactivated]
o- alua ................................................................................. [ALUA Groups: 1]
o- default_tg_pt_gp ..................................................... [ALUA state: Active/optimized]
4) 创建iSISI Target名称
进入/iscsi目录进行配置
/> cd iscsi
/iscsi> pwd
/iscsi
/iscsi> ls
o- iscsi ........................................................................................ [Targets: 0]
/iscsi> create iqn.2024-09.yunbee.com.kylinserver
Created target iqn.2024-09.yunbee.com.kylinserver.
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.2024-09.yunbee.com.kylinserver ............................................................ [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>
5)配置kyshared1存储对象逻辑单元号LUN
/iscsi> cd iqn.2024-09.yunbee.com.kylinserver/tpg1/luns
/iscsi/iqn.20...ver/tpg1/luns> ls
o- luns ............................................................................................ [LUNs: 0]
/iscsi/iqn.20...ver/tpg1/luns> create /backstores/block/kyshare1
Created LUN 0.
/iscsi/iqn.20...ver/tpg1/luns> ls
o- luns ............................................................................................ [LUNs: 1]
o- lun0 ..................................................... [block/kyshare1 (/dev/sdc) (default_tg_pt_gp)]
/iscsi/iqn.20...ver/tpg1/luns>
6)配置访问控制列表
/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2024-09.yunbee.com.kylinserver/tpg1/acls
/iscsi/iqn.20...ver/tpg1/acls> ls
o- acls ............................................................................................ [ACLs: 0]
/iscsi/iqn.20...ver/tpg1/acls> create iqn.2024-09.yunbee.com.kylinserver:client
Created Node ACL for iqn.2024-09.yunbee.com.kylinserver:client
Created mapped LUN 0.
/iscsi/iqn.20...ver/tpg1/acls> ls
o- acls ............................................................................................ [ACLs: 1]
o- iqn.2024-09.yunbee.com.kylinserver:client .............................................. [Mapped LUNs: 1]
o- mapped_lun0 ................................................................ [lun0 block/kyshare1 (rw)]
/iscsi/iqn.20...ver/tpg1/acls>
iSCSI协议是通过客户端名称进行验证的。也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可。
7)设置iSCSI服务端的监听IP地址和端口号
/iscsi/iqn.20...ver/tpg1/acls> cd /iscsi/iqn.2024-09.yunbee.com.kylinserver/tpg1/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
/iscsi/iqn.20.../tpg1/portals> create 192.168.2.136 3260
Using default IP port 3260
Created network portal 192.168.2.136:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ...................................................................................... [Portals: 1]
o- 192.168.2.136:3260 ................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals>
8)退出保存
/iscsi/iqn.20.../tpg1/portals> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
5.2 客户端配置
1)安装iSCSI客户端服务程序initiator
# dnf install iscsi-initiator-utils
2)配置iSCSI客户端中的initiator名称文件
# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2024-09.yunbee.com.kylinserver:client
--重启服务
# systemctl restart iscsid
3)扫描发现远程iSCSI服务端
# iscsiadm -m discovery -t st -p 192.168.2.136
192.168.2.136:3260,1 iqn.2024-09.yunbee.com.kylinserver
4)登录iSCSI服务端
# iscsiadm -m node -T iqn.2024-09.yunbee.com.kylinserver -p 192.168.2.136 --login
Logging in to [iface: default, target: iqn.2024-09.yunbee.com.kylinserver, portal: 192.168.2.136,3260]
Login to [iface: default, target: iqn.2024-09.yunbee.com.kylinserver, portal: 192.168.2.136,3260] successful.
5)检查客户端的存储
多了一块sdd磁盘
[root@db2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdb 8:16 0 20G 0 disk
└─vg_01-lv01 253:3 0 25G 0 lvm /data
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 1G 0 part
├─sdc2 8:34 0 1G 0 part
├─sdc3 8:35 0 1G 0 part
├─sdc4 8:36 0 1G 0 part
└─sdc5 8:37 0 1G 0 part
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4G 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 99G 0 part
├─klas-root 253:0 0 65.1G 0 lvm /
├─klas-swap 253:1 0 2G 0 lvm [SWAP]
└─klas-backup 253:2 0 31.8G 0 lvm
6)格式化挂载
# file /dev/sdd
/dev/sdd: block special (8/48)
# mkfs.xfs -f /dev/sdd
meta-data=/dev/sdd isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# mkdir /share1
# mount /dev/sdd /share1/
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 5.3G 0 5.3G 0% /dev
tmpfs tmpfs 5.3G 0 5.3G 0% /dev/shm
tmpfs tmpfs 5.3G 18M 5.3G 1% /run
tmpfs tmpfs 5.3G 0 5.3G 0% /sys/fs/cgroup
/dev/mapper/klas-root xfs 66G 7.8G 58G 12% /
tmpfs tmpfs 5.3G 4.0K 5.3G 1% /tmp
/dev/nvme0n1p1 xfs 1014M 213M 802M 21% /boot
/dev/mapper/vg_01-lv01 ext4 25G 45M 24G 1% /data
tmpfs tmpfs 1.1G 0 1.1G 0% /run/user/992
tmpfs tmpfs 1.1G 0 1.1G 0% /run/user/0
tmpfs tmpfs 1.1G 0 1.1G 0% /run/user/993
192.168.2.136:/nfsfile nfs4 66G 8.9G 57G 14% /nfsfile
/dev/sdd xfs 20G 176M 20G 1% /share1
六、iSCSI 的应用场景
- 存储虚拟化:通过iSCSI技术,可以将多台服务器的存储资源整合起来,形成一个大的存储池。
- 远程复制:可以在不同的地理位置之间复制数据,实现数据备份和灾难恢复。
- 云存储:在云计算环境中,iSCSI可以实现存储资源的动态分配和管理。
- 虚拟化环境:在虚拟化环境中,iSCSI可以为虚拟机提供统一的存储访问。
七、iSCSI 的优势与局限
优势
- 成本效益:使用现有的以太网基础设施,减少了专用存储网络的建设成本。
- 易于扩展:可以轻松地将存储资源扩展到整个网络,甚至跨越不同的地理位置。
- 标准化:基于标准的TCP/IP协议,与其他网络技术兼容性好。
局限
- 性能瓶颈:在高负载情况下,TCP/IP协议的开销可能会影响性能。
- 网络延迟:网络延迟会影响iSCSI的性能,特别是在远距离传输时。
- 安全性:虽然iSCSI支持多种认证机制,但网络传输的安全性仍然需要额外保障。
八、总结
iSCSI技术使得存储设备可以通过标准的IP网络进行访问,极大地提高了存储资源的利用率和灵活性。通过本文的介绍,您已经掌握了iSCSI的基本概念、配置方法以及在Linux系统中的应用场景。无论是构建存储虚拟化环境还是实现远程数据复制,iSCSI都是一个值得考虑的选择。通过合理的配置和管理,iSCSI可以为您的企业提供高效、可靠的存储解决方案。随着技术的不断发展,iSCSI将继续在存储领域发挥重要作用。