Linux 服务:iSCSI 存储服务配置全流程指南
Linux 服务:iSCSI 存储服务配置全流程指南
一、iscsi简介
1、概念
互联网小型计算机系统接口(Internet Small Computer System Interface,简称iSCSI)是一个基于TCP/IP的协议,用于通过IP网络仿真SCSI高性能本地存储总线,从而为远程块存储设备提供数据传输和管理。iSCSI协议的运行方式类似于客户端/服务器配置。
二、配置iscsi存储服务器–(提供iscsi目标)
1、新建分区–/dev/sda5–10G
fdisk /dev/sda
partprobe /dev/sda
2、安装targetcli软件包—在RHEL7上提供配置iscsi目标的使用程序是targetcli
yum -y install targetcli
3、使用targetcli交互模式,创建后备存储
/(根节点):整个存储目标配置的顶层目录,包含所有可配置的组件。
backstores(后端存储):
存储目标实际使用的物理或逻辑存储资源,相当于 “存储池”。包含以下类型:
block:直接使用块设备(如 /dev/sda、LVM 逻辑卷)作为后端存储。
fileio:使用普通文件作为后端存储(将文件模拟为块设备 ,使用dd命令创建的文件)。
pscsi:通过 SCSI 协议直接关联物理 SCSI 设备。通常不使用
ramdisk:使用内存中的虚拟磁盘作为后端存储类似于U盘(临时存储,重启后丢失)。
括号中的 [Storage Objects: 0] 表示当前该类型下没有配置任何存储对象(即没有关联实际的存储资源)。
iscsi:
配置 iSCSI 目标服务的节点,iSCSI 是一种通过网络(通常是以太网)将存储设备共享给其他主机的协议。[Targets: 0] 表示当前没有创建任何 iSCSI 目标(即没有共享任何存储给网络中的其他主机)。
loopback:
配置本地环回目标的节点,用于在本机内部模拟存储目标(测试用途为主)。[Targets: 0] 表示当前没有配置任何环回目标。
[root@server ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb41
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:块设备存储(如物理硬盘分区)。
#fileio:文件类型存储(如普通文件模拟的存储)。
#pscsi:物理 SCSI 设备。
#ramdisk:内存虚拟磁盘。
#iscsi:iSCSI 目标配置区(当前无任何目标,后续用于定义共享给客户端的存储目标)。
#loopback:环回目标配置区(本地测试用,暂未使用)。/> cd backstores/block
/backstores/block> ls
o- block .................................................. [Storage Objects: 0]
/backstores/block> create block1 /dev/sda5
#操作说明:create命令用于创建存储对象,格式为create <对象名> <物理设备路径>。
#此处创建名为block1的存储对象,关联到物理分区/dev/sda5(即把该分区作为可共享的存储资源)。
Created block storage object block1 using /dev/sda5.
/backstores/block> ls
o- block .................................................. [Storage Objects: 1]o- block1 ........................ [/dev/sda5 (5.0GiB) write-thru deactivated]/backstores> cd /
/> ls
o- / ..................................................................... [...]o- backstores .......................................................... [...]| o- block .............................................. [Storage Objects: 1]| | o- block1 .................... [/dev/sda5 (5.0GiB) write-thru deactivated]| o- fileio ............................................. [Storage Objects: 0]| o- pscsi .............................................. [Storage Objects: 0]| o- ramdisk ............................................ [Storage Objects: 0]o- iscsi ........................................................ [Targets: 0]o- loopback ..................................................... [Targets: 0]
4、为目标创建iqn
/> cd iscsi
/iscsi> create iqn.2025-08.com.example:hrz
#操作说明:使用create命令创建一个 iSCSI 目标,名称遵循 IQN(iSCSI Qualified Name)格式:
#iqn:固定前缀,表示 iSCSI 合格名称。
#2025-08:创建年份和月份。
#com.example:反向域名(通常使用组织的域名)。
#hrz:自定义标识符(可用于区分不同目标)。
Created target iqn.2025-08.com.example:hrz.
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.2020-03.com.example:disk1 ................................... [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]
5、创建acl–在TPG中,创建ACL以控制客户端节点的访问
/iscsi> cd iqn.2025-08.com.example:hrz/tpg1/acls
/iscsi/iqn.20...hrz/tpg1/acls> ls
o- acls ................................................................ [ACLs: 0]
/iscsi/iqn.20...hrz/tpg1/acls> create iqn.2025-08.com.example:luoqi
#使用create命令添加客户端的 IQN 到 ACL 中,允许该客户端访问目标。
#客户端 IQN 格式与目标 IQN 一致:iqn.2025-08.com.example:luoqi(luoqi为客户端标识符)。
Created Node ACL for iqn.2025-08.com.example:luoqi
/iscsi/iqn.20...hrz/tpg1/acls> ls
o- acls ................................................................ [ACLs: 1]o- iqn.2025-08.com.example:luoqi .............................. [Mapped LUNs: 1]o- mapped_lun0 ...................................... [lun0 block/block1 (rw)]
6、创建LUN–此步骤还将激活每个后备存储。此处为block1后备存储创建LUN
/iscsi/iqn.20...hrz/tpg1/acls> cd ../luns
/iscsi/iqn.20...hrz/tpg1/luns> ls
o- luns ................................................................ [LUNs: 0]
/iscsi/iqn.20...hrz/tpg1/luns> create /backstores/block/block1
#操作说明:使用create命令将存储后端的block1对象(对应/dev/sda5)映射为该目标的 LUN。
#路径/backstores/block/block1指定了要映射的存储对象。
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2025-08.com.example:luoqi
/iscsi/iqn.20...hrz/tpg1/luns> ls
o- luns ................................................................ [LUNs: 1]o- lun0 .......................... [block/block1 (/dev/sda5) (default_tg_pt_gp)]
7、创建门户–在TPG中,创建一个门户配置侦听IP地址和端口,先把默认的门户配置删除,然后创建
/iscsi/iqn.20.../tpg1/portals> delete ip_address=0.0.0.0 ip_port=3260
Deleted network portal 0.0.0.0:3260
#操作说明:删除 TPG1 中默认的端口配置(监听所有 IP 地址的 3260 端口)。
#0.0.0.0表示监听服务器上所有可用的 IP 地址,这在生产环境中可能不够安全或不符合网络规划。
/iscsi/iqn.20.../tpg1/portals> create ip_address=192.168.100.20 ip_port=3260Using default IP port 3260
#操作说明:创建新的端口配置,指定 iSCSI 目标仅监听服务器的192.168.100.20这个 IP 地址的 3260 端口(iSCSI 默认端口)。
#这样配置后,客户端只能通过192.168.100.20:3260访问该 iSCSI 目标,增强了网络访问的可控性。
Created network portal 192.168.100.20:3260.
/iscsi/iqn.20.../tpg1/portals> ls
o- portals .......................................................... [Portals: 1]o- 192.168.100.20:3260 .................................................... [OK]
8、整体预览targetcli配置
/> ls
o- / ....................................................................... [...]o- backstores ............................................................ [...]| o- block ................................................ [Storage Objects: 1]| | o- block1 ....................... [/dev/sda5 (0 bytes) 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.2025-08.com.example:hrz ..................................... [TPGs: 1]| o- tpg1 ............................................. [no-gen-acls, no-auth]| o- acls ........................................................ [ACLs: 1]| | o- iqn.2025-08.com.example:luoqi ...................... [Mapped LUNs: 1]| | o- mapped_lun0 .............................. [lun0 block/block1 (rw)]| o- luns ........................................................ [LUNs: 1]| | o- lun0 .................. [block/block1 (/dev/sda5) (default_tg_pt_gp)]| o- portals .................................................. [Portals: 1]| o- 192.168.100.20:3260 ............................................ [OK]o- loopback ....................................................... [Targets: 0]
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
9、重启服务,并设置下次启动生效
systemctl restart target
systemctl enable target或者使用
systemctl restart iscsi
systemctl restart iscsid
systemctl enable iscsi
systemctl enable iscsid
10、设置防火墙—由于防火墙对应的service name中没有target和iscsi,所以只需要添加端口3260即可(也可直接关闭)
firewall-cmd --add-port=3260/tcp --permanent
firewall-cmd --reload
三、iscsi客户端配置
1、安装iscsi-initiator-utils
yum -y install iscsi-initiator-utils
2、修改/etc/iscsi/initiatorname.iscsi配置文件—作为iscsi节点,客户端需要唯一的iqn,我们需要将该配置文件中的iqn改成我们之前在acl中新建的那个iqn
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2025-08.com.example:luoqi
3、重启iscsi、iscsid服务,并设置下次启动生效
systemctl restart iscsi
systemctl enable iscsi
systemctl restart iscsid
systemctl enable iscsid
4、发现目标
在iscsi客户端上连接目标之前,必须先发现目标,发现过程将目标节点信息和设置存储在/var/lib/iscsi/nodes目录中,并使用/etc/iscsi/iscsi.conf配置文件中的默认值。
在发现模式中,sendtargets请求仅返回带有为此启动器配置的访问权限的目标
iscsiadm -m discovery -t sendtargets -p 192.168.100.20:3260
5、登陆目标
iscsiadm -m node -T iqn.2025-08.com.example:hrz -p 192.168.100.20:3260 -l
6、登录成功后使用fdisk -l命令查看磁盘情况,会发现客户端多了一个块设备
fdisk -l
7、使用iscsi块存储
对/dev/sdb设备进行分区,并格式化,规划划分分区大小为1G,格式化为xfs
parted /dev/sdb
udevadm settle
mkfs.xfs /dev/sdb1
8、挂载
mkdir /iscsistorage
mount /dev/sdb1 /iscsistorage(临时挂载)
永久挂载
blkid /dev/sdb5----把查询到的UUID复制
vim /etc/fstab
UUID=1cef44a7-c317-4078-91fb-86b089cc9a0c /iscsistorage xfs defaults,_netdev 0 0mount -a
注意:_netdev一定要加上,因为我们一旦重启了服务器,系统启动过程中是先读取/etc/fstab文件,然后再读取网卡的,由于我们iscsi存储时属于网络共享,所以如果我们没有写入_netdev这个参数的话,系统就识别不了iscsi存储共享的设备,导致系统启动失败。
四、注销目标
1、临时注销
iscsiadm -m node -T iqn.2025-08.com.example:hrz -p 192.168.100.20:3260 -u
2、永久注销—永久注销iscsi目标前,一定先要临时注销iscsi目标。
iscsiadm -m node -T iqn.2025-08.com.example:hrz -p 192.168.100.20:3260 -uiscsiadm -m node -T iqn.2025-08.com.example:hrz -p 192.168.100.20:3260 -o delete