Linux 服务:iSCSI 存储服务配置全流程指南

发布于:2025-08-18 ⋅ 阅读:(19) ⋅ 点赞:(0)

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   0

mount  -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   -u

iscsiadm  -m  node  -T  iqn.2025-08.com.example:hrz  -p 192.168.100.20:3260  -o  delete

网站公告

今日签到

点亮在社区的每一天
去签到