IP 存储核心 iSCSI:原理拆解 + 无报错实战指南

文章目录

    • [一、 iSCSI 技术概述](#一、 iSCSI 技术概述)
    • [二、 iSCSI 核心架构与概念](#二、 iSCSI 核心架构与概念)
      • [1. 核心组件定义](#1. 核心组件定义)
      • [2. 交互流程](#2. 交互流程)
    • [三、 环境规划与基础配置](#三、 环境规划与基础配置)
      • [1. 节点规划](#1. 节点规划)
      • [2. 系统初始化](#2. 系统初始化)
    • [四、 iSCSI Target 服务端配置](#四、 iSCSI Target 服务端配置)
      • [1. 安装与启动服务](#1. 安装与启动服务)
      • [2. 配置 Backstore(后端存储)](#2. 配置 Backstore(后端存储))
      • [3. 创建 Target 与 IQN](#3. 创建 Target 与 IQN)
      • [4. 绑定 LUN 与配置 ACL](#4. 绑定 LUN 与配置 ACL)
      • [5. 优化 Portal 监听地址](#5. 优化 Portal 监听地址)
      • [6. 保存配置](#6. 保存配置)
      • [7. 非交互式管理](#7. 非交互式管理)
    • [五、 iSCSI Initiator 客户端配置](#五、 iSCSI Initiator 客户端配置)
      • [1. 安装与初始化](#1. 安装与初始化)
      • [2. 发现与连接 Target](#2. 发现与连接 Target)
      • [3. 验证存储设备](#3. 验证存储设备)
      • [4. 格式化 iSCSI 设备](#4. 格式化 iSCSI 设备)
      • [5. 持久化挂载与系统启动保障](#5. 持久化挂载与系统启动保障)
      • [6. 断开目标连接](#6. 断开目标连接)
      • 7.故障排查
    • 六、构建高可用多路径(Multipath)架构
      • [1. 服务端环境准备](#1. 服务端环境准备)
      • [2. 什么是多路径](#2. 什么是多路径)
      • [3. 客户端多路径配置](#3. 客户端多路径配置)
      • [4. 多路径状态监控](#4. 多路径状态监控)
      • [5. 多路径设备使用与持久化](#5. 多路径设备使用与持久化)
    • [七、 总结](#七、 总结)

一、 iSCSI 技术概述

SCSI (Small Computer System Interface,小型计算机系统接口)是计算机与智能设备(如硬盘、光驱、打印机等)之间通信的经典标准。随着网络技术的发展,IBM 研发了 iSCSI(Internet SCSI)技术,又称 IP-SAN。该技术将传统 SCSI 接口与以太网技术深度融合,基于 TCP/IP 协议栈封装 SCSI 指令,使其能够在 IP 网络中透明传输,从而实现存储资源的网络化共享。

在性能保障方面,iSCSI 通常依托专用的 10 Gb 或更高速率的以太网构建存储网络。由于 SAN 流量通常在数据中心内部封闭传输,且理想状态下与 LAN 业务网络物理隔离,因此默认不进行加密以追求极致性能。若需跨越 WAN 传输,管理员可通过配置 IPsec 来保障数据链路安全。

二、 iSCSI 核心架构与概念

iSCSI 采用经典的 C/S(客户端/服务端)架构。对于 Initiator 而言,远程 iSCSI Target 呈现为本地未格式化的 SCSI 块设备,其使用体验等同于通过 FC 或直连 SAS 连接的本地磁盘。

1. 核心组件定义

  • Initiator(发起端):iSCSI 客户端,通常以软件形式部署,也可通过硬件 HBA(Host Bus Adapter)实现。每个 Initiator 必须拥有全局唯一的 IQN 标识。
  • Target(目标端):iSCSI 服务器上的存储资源实体。每个 Target 拥有一个唯一的 IQN,并提供一个或多个 LUN(逻辑单元)。单台物理服务器可承载多个 Target。
  • IQN(iSCSI Qualified Name) :全局唯一标识符,遵循严格命名规范:iqn.YYYY-MM.com.reversed.domain:name_string。其中 YYYY-MM 为注册年月,com.reversed.domain 为反向域名,name_string 为自定义目标名称。
  • Portal(门户) :定义 Target 监听的 IP 地址与端口(如 172.25.250.50:3260),是网络访问的入口。
  • LUN(Logical Unit Number):Target 对外暴露的块设备映射。
  • ACL(Access Control List):基于 Initiator IQN 的访问控制列表,用于精细化权限管理。
  • TPG(Target Portal Group):Target 的完整配置集合,包含 Portal、LUN 和 ACL。常规场景下每个 Target 仅包含一个 TPG。

2. 交互流程

  1. Discovery(发现):Initiator 查询 Target 端可用的存储资源列表。
  2. Login(登录):Initiator 向 Target 发起身份验证,验证通过后即可挂载并使用远程块设备。

三、 环境规划与基础配置

1. 节点规划

节点角色 主机名 IP 地址 存储配置
iSCSI Target iscsi-server 10.1.8.10/24 新增 2 块 20G SCSI 磁盘
iSCSI Initiator iscsi-client 10.1.8.11/24 无额外存储

2. 系统初始化

为确保网络连通性与服务正常运行,需在双端执行以下基础配置(以 iscsi-server 为例,iscsi-client 仅需修改对应主机名与 IP):

bash 复制代码
# 设置主机名
[root@localhost ~]# hostnamectl set-hostname iscsi-server

# 配置静态网络
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual \
ipv4.addresses 10.1.8.10/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
[root@localhost ~]# nmcli connection up ens33

# 关闭防火墙与 SELinux(生产环境建议配置相应规则而非直接关闭)
[root@localhost ~]# systemctl disable firewalld --now
[root@localhost ~]# setenforce 0

四、 iSCSI Target 服务端配置

1. 安装与启动服务

iSCSI Target 的核心组件包括 :

  • targetd(服务端守护进程)
  • targetcli(配置管理工具)
bash 复制代码
# 安装软件包
[root@iscsi-server ~]# yum install -y targetd targetcli

# 启用并启动服务
[root@iscsi-server ~]# systemctl enable target --now

# 若开启防火墙,需放行 iSCSI 服务
[root@iscsi-server ~]# firewall-cmd --permanent --add-service=iscsi-target
[root@iscsi-server ~]# firewall-cmd --reload

当您不带任何选项运行targetcli时,该命令将进入交互模式。

在以下示例中,使用ls命令显示当前布局。

bash 复制代码
[root@iscsi-server ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin. targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
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]

2. 配置 Backstore(后端存储)

Backstore 是 Target 的底层存储对象,支持多种类型:

  • block:物理块设备(磁盘、分区、LVM),最常用。
  • fileio:本地文件系统中的镜像文件。
  • pscsi:直接映射物理 SCSI 设备。
  • ramdisk:内存盘,重启后数据丢失。

使用 targetcli 进入交互模式,创建 Block 类型的 Backstore:

bash 复制代码
[root@iscsi-server ~]# targetcli
/> cd /backstores/block
/backstores/block> create myblock1 /dev/sdb
Created block storage object myblock1 using /dev/sdb.

3. 创建 Target 与 IQN

/iscsi 目录下创建 Target,系统将自动生成 TPG 及默认 Portal:

bash 复制代码
/backstores/block> cd /iscsi
/iscsi> create iqn.2026-04.cloud.csh.iscsi-server:disk1
Created target iqn.2026-04.cloud.csh.iscsi-server:disk1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
  1. iscsi 根目录 Targets:1

    当前一共创建了 1 个 iSCSI 目标(Target)

  2. iqn.2026-04.cloud.csh.iscsi-server:disk1

    iSCSI Target 唯一标识(IQN 名称)

    客户端存储发现、连接时,需要填写这一串名称。

  3. tpg1(Target Portal Group,目标门户组)

    一个 Target 可以有多个 TPG 组,这里只有tpg1。

    标记: no-gen-acls, no-auth

    no-gen-acls :不会自动生成 ACL 访问策略,必须手动添加客户端白名单

    no-auth :未开启 CHAP 账号密码认证

  4. acls ACLs: 0

    ACL = 客户端 IQN 白名单(访问控制列表)

    ACLs:0 → 还没有添加允许接入的客户端

    规则:默认拒绝所有客户端,不添加白名单就算客户端能连通 3260 端口也登录失败。

  5. luns LUNs: 0 【重点】

    LUN 作用:将后端磁盘 backstores 映射给这个 Target 对外共享

    LUNs:0 → 没有把硬盘 / 分区挂载进来!

    哪怕客户端成功登录 target ,看不到任何共享磁盘。

    对应流程:创建 Target 之后,绑定 LUN 这一步尚未执行。

  6. portals Portals:1

    Portal = 监听地址 + 端口(对外访问入口)

    0.0.0.0:3260

    0.0.0.0 :服务器本机所有网卡监听

    3260 :iSCSI 标准端口

    OK:监听正常,端口已就绪

  7. ✅ 当前状态总结

    ✅ Target(iqn 名称)已创建

    ✅ Portal 监听 0.0.0.0:3260 正常

  8. ❌ 缺少两大核心配置

    1.未绑定 LUN:没有关联后端硬盘

    2.未配置 ACL:没有放行客户端

状态解析 :此时 Target 已创建,Portal 监听 0.0.0.0:3260。但尚未绑定 LUN 与配置 ACL,客户端虽能连通端口,但无法获取存储资源或完成登录。

4. 绑定 LUN 与配置 ACL

将 Backstore 映射为 LUN,并添加客户端白名单:

bash 复制代码
# 绑定 LUN
/iscsi> cd /iscsi/iqn.2026-04.cloud.csh.iscsi-server:disk1/tpg1/luns
/iscsi/.../luns> create /backstores/block/myblock1
Created LUN 0.

# 配置 ACL(允许指定 Initiator 访问)
/iscsi/.../luns> cd ../acls
/iscsi/.../acls> create iqn.2026-04.cloud.csh.iscsi-client
Created Node ACL for iqn.2026-04.cloud.csh.iscsi-client
Created mapped LUN 0.

5. 优化 Portal 监听地址

出于安全考量,建议将默认的全接口监听修改为指定内网 IP:

bash 复制代码
# 删除默认: 0.0.0.0:3260 (随便本机哪个IP都能连)
# 新建指定:  10.1.8.10:3260 (只允许通过本机10.1.8.10这个网卡连接iscsi共享)
/iscsi/.../acls> cd ../portals
/iscsi/.../portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/.../portals> create 10.1.8.10 3260
Created network portal 10.1.8.10:3260.

6. 保存配置

退出 targetcli 时,配置将自动保存至 /etc/target/saveconfig.json

bash 复制代码
/iscsi/.../portals> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

7. 非交互式管理

对于自动化运维场景,可直接通过命令行参数操作,但需显式执行 saveconfig

bash 复制代码
[root@iscsi-server ~]# targetcli /backstores/block create myblock2 /dev/sdc
[root@iscsi-server ~]# targetcli /iscsi create iqn.2026-04.cloud.csh.iscsi-server:disk2
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04...:disk2/tpg1/luns create /backstores/block/myblock2
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04...:disk2/tpg1/acls create iqn.2026-04.cloud.csh.iscsi-client
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04...:disk2/tpg1/portals create 10.1.8.10 3260
[root@iscsi-server ~]# targetcli saveconfig

提示:与交互式使用targetcli不同,命令行模式必须显式运行saveconfig子命令以保存配置。

五、 iSCSI Initiator 客户端配置

iSCSI 启动器通常以软件方式实现。 使用基于软件的iSCSI启动器需要连接到具有足够带宽的现有以太网网络,以承载存储流量。

您也可以使用硬件启动器-主机总线适配器(HBA),从而减轻了其他系统资源的负担。

1. 安装与初始化

配置iSCSI客户端启动程序需要安装iscsi-initiator-utils软件包,该软件包包括iscsi和iscsid服务以及/etc/iscsi/iscsid.conf和/etc/iscsi/initiatorname.iscsi配置文件。

bash 复制代码
# 安装 Initiator 工具包
[root@iscsi-client ~]# yum install -y iscsi-initiator-utils

# 配置唯一的 Initiator IQN
[root@iscsi-client ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2026-04.cloud.csh.iscsi-client

# 重启服务使配置生效
[root@iscsi-client ~]# systemctl restart iscsid

作为iSCSI启动器,客户端需要其自己的唯一iSCSI合格名称(IQN)。在安装iscsi-initiator-utils的过程中,该软件包生成唯一的IQN,并存储到/etc/iscsi/initiatorname.iscsi文件中。 管理员通常需要更改该名称。

/etc/iscsi/iscsid.conf文件包含您连接的目标的默认设置。 这些设置包括iSCSI超时,重试以及用于身份验证的用户名和密码参数。

软件包安装会自动配置iscsid服务,以便启动器在系统启动时自动重新连接到任何已发现的目标。 每当您修改启动程序的配置文件时,请重新启动iscsid服务。

2. 发现与连接 Target

在使用远程设备之前,首先需要发现目标。 发现过程使用/etc/iscsi/iscsid.conf中的配置将目标信息和设置存储在/var/lib/iscsi/nodes/目录中。

您可以使用以下命令执行远程目标的发现:

bash 复制代码
# 发现远程 Target
[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk2

# 登录指定 Target
[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.csh.iscsi-server:disk1 -l
Logging in to [iface: default, target: iqn.2026-04...:disk1, portal: 10.1.8.10,3260]
Login to [iface: default, target: iqn.2026-04...:disk1, portal: 10.1.8.10,3260] successful.

参数说明:

  • portal_ip参数是目标门户的IP地址。
  • 如果未指定port参数,它将使用默认端口3260。

3. 验证存储设备

此时,系统将检测到新的SCSI块设备,就好像它是本地连接的硬盘驱动器一样。 您可以使用以下命令查看新设备,该命令以打印级别3显示有关当前iSCSI登录会话的信息。

bash 复制代码
[root@iscsi-client ~]# lsblk
NAME              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                 8:0    0   200G  0 disk
├─sda1              8:1    0     1G  0 part /boot
└─sda2              8:2    0   199G  0 part
  ├─centos-root   253:0    0    50G  0 lvm  /
  └─centos-home   253:2    0 141.1G  0 lvm  /home
sdb                 8:16   0    20G  0 disk          # iSCSI 远程磁盘
bash 复制代码
[root@iscsi-client ~]# iscsiadm -m session -P 3 iSCSI Transport Class version 2.0-870
version 6.2.0.874-22
Target: iqn.2026-04.cloud.csh.iscsi-server:disk1 (non-flash)
Current Portal: 10.1.8.10:3260,1
Persistent Portal: 10.1.8.10:3260,1 **********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.2026-04.cloud.csh.iscsi-client
Iface IPaddress: 10.1.8.11
Iface HWaddress: <empty>
Iface Netdev: <empty>
SID: 1
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
*********
Timeouts:
*********
Recovery Timeout: 120
Target Reset Timeout: 30
LUN Reset Timeout: 30
Abort Timeout: 15
*****
CHAP:
*****
username: <empty>
password: ********
username_in: <empty>
password_in: ********
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 262144
FirstBurstLength: 65536
MaxBurstLength: 262144
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 3  State: running
scsi3 Channel 00 Id 0 Lun: 0
Attached scsi disk sdb      State: running

或者,您可以查看 dmesg , tail /var/log/messages 或 ls -l /dev/disk/by-path/iscsi 命令的输出。 该登录过程在重新启动后将保持不变。 因此,启动后块设备将自动可用。

4. 格式化 iSCSI 设备

如果发现的块设备已经具有分区,文件系统或LVM卷,则可以使用常规命令(如mount)访问该数据。您可以使用lsblk --fs命令检查设备。

bash 复制代码
[root@iscsi-client ~]# blkid
/dev/sda1: UUID="5fc475dd-3212-46e8-b923-cbbc61cac3ee" TYPE="xfs"
/dev/sda2: UUID="eRXTvj-r4BZ-5Vxe-61w1-Klgv-WgGm-qYTZYc" TYPE="LVM2_member"
/dev/sr0: UUID="2020-11-04-11-36-43-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="21306770-85c2-4c92-8692-0a2ca78922a8" TYPE="xfs"
/dev/mapper/centos-swap: UUID="ff509751-eabd-4b34-ac22-9d65cea06ef1" TYPE="swap"
/dev/mapper/centos-home: UUID="0a51daf5-8540-49f8-ad82-c732d9cbbd45" TYPE="xfs"

多个启动程序同时从同一目标安装同一文件系统,会导致文件系统损坏或尝试读取数据时出现不一致。

本地文件系统(例如ext4或XFS)不支持从多个系统并发安装。如果需要允许从多个系统同时访问基于iSCSI的块设备,请使用群集文件系统(例如GFS2)。

如果磁盘为空,则可以对其进行格式化,创建分区或将其用作LVM物理卷。

5. 持久化挂载与系统启动保障

为确保 iSCSI 设备在系统重启后能够正确、安全地自动挂载,必须严格遵循以下工程规范:

  1. 强制使用 UUID 标识 :切勿在 /etc/fstab 中使用设备名称(如 /dev/sd*)。由于 iSCSI 设备的命名依赖于网络响应顺序,设备名可能在引导过程中发生漂移,导致挂载点错乱。
  2. 启用 _netdev 挂载选项:iSCSI 高度依赖网络栈。该选项可确保系统在网络就绪及 iSCSI 启动器初始化完成之前,不会尝试挂载文件系统,从而避免启动失败。

编辑 /etc/fstab 文件,添加如下挂载记录:

bash 复制代码
[root@iscsi-client ~]# vim /etc/fstab
UUID="0461e240-7743-47fe-876b-6df8b8e7ebf8" /sdb xfs defaults,_netdev        0 0

确保 iscsi 服务已配置为开机自动启动(默认通常为启用状态):

bash 复制代码
[root@iscsi-client ~]# systemctl enable iscsi

重启系统并验证挂载状态,确认 iSCSI 设备已按预期加载:

bash 复制代码
[root@iscsi-client ~]# reboot

[root@iscsi-client ~]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   200G  0 disk
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   199G  0 part
├─centos-root 253:0    0    50G  0 lvm  /
├─centos-swap 253:1    0   7.9G  0 lvm  [SWAP]
└─centos-home 253:2    0 141.1G  0 lvm  /home
sdb               8:16   0    20G  0 disk /sdb
sdc               8:32   0    20G  0 disk

6. 断开目标连接

要停止使用iSCSI目标,请执行以下步骤:

  • 确保没有使用目标提供的任何设备。 例如,卸载文件系统。
  • 从/etc/fstab等位置删除对目标的所有持久引用。
  • 从iSCSI目标注销。
bash 复制代码
[root@iscsi-client ~]# umount /sdb

[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.csh.iscsi-server:disk1 -p 10.1.8.10:3260 -u
Logging out of session [sid: 1, target: iqn.2026-04.cloud.csh.iscsi-server:disk1, portal: 10.1.8.10,3260]
Logout of [sid: 1, target: iqn.2026-04.cloud.csh.iscsi-server:disk1, portal: 10.1.8.10,3260] successful.
bash 复制代码
[root@iscsi-client ~]# iscsiadm -m session
tcp: [2] 10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk2 (non-flash)

[root@iscsi-client ~]# iscsiadm -m node
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk2

删除 iSCSI目标的本地记录,以使启动器在引导过程中不会自动登录到目标。

bash 复制代码
# 删除本地记录
[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.csh.iscsi-server:disk1 -p 10.1.8.10:3260 -o delete

[root@iscsi-client ~]# iscsiadm -m node
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk2

7.故障排查

如果发现成功,但是启动器登录到发现的目标时遇到问题,则该问题很可能与访问控制或身份验证有关。客户端上的IQN与服务器上的IQN不匹配会导致目标登录失败。

可能是客户端上的启动器IQN不正确引起的,请在客户端的/etc/iscsi/initiatorname.iscsi文件中修复IQN,然后重新启动iscsid服务以使更改生效。

bash 复制代码
[root@iscsi-client ~]# vim /etc/iscsi/initiatorname.iscsi

# 重启 iscsid 服务,释放之前客户端扫描时使用的IQN。
[root@iscsi-client ~]# systemctl restart iscsid

执行重新发现并尝试登录目标:

bash 复制代码
# 重新发现
[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk1
10.1.8.10:3260,1 iqn.2026-04.cloud.csh.iscsi-server:disk2

# 重新登录
[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.csh.iscsi-server:disk1 -l
Logging in to [iface: default, target: iqn.2026-04.cloud.csh.iscsi-server:disk1, portal: 10.1.8.10,3260] (multiple)
Login to [iface: default, target: iqn.2026-04.cloud.csh.iscsi-server:disk1, portal: 10.1.8.10,3260] successful.

六、构建高可用多路径(Multipath)架构

1. 服务端环境准备

在配置多路径前,需确保 iSCSI Target 端正确暴露多网络接口。以下为节点规划:

节点名称 节点IP 作用
iscsi-server(增加1块20G SCSI硬盘) 10.1.8.10(vmnet8), 10.1.1.10/24(vmnet1) iSCSI Target
iscsi-client 10.1.8.11(vmnet8), 10.1.1.11/24(vmnet1) iSCSI Initiator

服务端安装与配置示例:

bash 复制代码
[root@iscsi-server ~]# yum install -y targetd targetcli
[root@iscsi-server ~]# systemctl enable target --now
[root@iscsi-server ~]# firewall-cmd --add-service=iscsi-target
[root@iscsi-server ~]# firewall-cmd --add-service=iscsi-target --permanent

[root@iscsi-server ~]# targetcli /backstores/block create myblock1 /dev/sdb
[root@iscsi-server ~]# targetcli /iscsi create iqn.2026-04.cloud.csh.iscsi-server:disk1
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.csh.iscsi-server:disk1/tpg1/luns create /backstores/block/myblock1
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.csh.iscsi-server:disk1/tpg1/acls create iqn.2026-04.cloud.csh.iscsi-client

[root@iscsi-server ~]# targetcli server:disk1/tpg1/portals delete
[root@iscsi-server ~]# targetcli server:disk1/tpg1/portals create
[root@iscsi-server ~]# targetcli server:disk1/tpg1/portals create
[root@iscsi-server ~]# targetcli
/iscsi/iqn.2026-04.cloud.csh.iscsi- 0.0.0.0 3260
/iscsi/iqn.2026-04.cloud.csh.iscsi- 10.1.8.10 3260
/iscsi/iqn.2026-04.cloud.csh.iscsi- 10.1.1.10 3260
saveconfig

验证 Target 配置:

bash 复制代码
[root@iscsi-server ~]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

2. 什么是多路径

多路径是指服务器和存储阵列存在多个物理连接方式使用虚拟设备,这种方式可以提供更加弹性的存储连接(一个路径down掉不会影响连接性),也可以聚合存储带宽提供性能。

多路径由dm-multipath子系统提供,使用内核device mapper系统获得虚拟设备,有multipathd进程和multipath命令行工具管理。

软件包device-mapper-multipath提供必要的binaries daemon和kernel modules。安装、配置、启动后,多路径设备节点会创建在两个位置。

出于管理目的, multipath设备创建在/dev/mapper,如果选择了user-friendly名称,这些设备也可以命名为mpathNpM,或者配置在WorldWide ID(WWID)之后。管理员也可以自定义多路径设备名,这些自定义名称在multipaths配置文件的multipaths部分使用alias选项定义。

多路径设备也会创建在/dev目录,格式/dev/dm-N与/dev/mapper下的文件匹配。这些设备提供给系统内部使用,禁止管理目的直接使用。

重要:多路径提供存储访问路径down情况的保护。如果存储本身不可用,访问访问存储也会不可用。

创建多路径设备,不同的路径将会合并到组中,取决于/etc/multipath.conf配置。典型情况,同一时刻只能激活一个组,一个组可以包含多个路径。当某个组故障,多路径进程将切换流量到不同组中。

3. 客户端多路径配置

安装与启用

安装 device-mapper-multipath 软件包,并使用 mpathconf 工具生成或更新配置文件:

bash 复制代码
[root@iscsi-client ~]# yum install -y device-mapper-multipath

# 生成配置文件(若文件不存在)
[root@iscsi-client ~]# mpathconf --enable

# 若文件已存在,则修改现有配置
[root@iscsi-client ~]# mpathconf --enable --with_multipathd y --with_chkconfig y

# 启动服务
[root@iscsi-client ~]# systemctl enable multipathd --now
发现设备
设备识别与 WWN 验证

WWN(WorldWide Name) ,全球唯一名称,是由 IEEE 标准化的全球唯一标识符,用于标识存储设备(如硬盘、 RAID 阵列、光纤交换机等),每个设备具有全球唯一名称。

应用场景:在光纤通道(FC)、 iSCSI 等存储网络中,用于识别和定位存储设备。

WWN 是判断多路径设备是否指向同一存储设备的核心依据:所有属于同一多路径设备的物理路径(如sdb 、 sdc ),其对应的存储设备 WWN必然相同。

使用 scsi_id 验证

bash 复制代码
[root@iscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
360014052fc732600aa0433fae1758a1a
[root@iscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc
360014052fc732600aa0433fae1758a1a

使用 udevadm 验证

bash 复制代码
[root@iscsi-client ~]# udevadm info --query=property --name=/dev/sdb | grep ID_WWN_W
ID_WWN_WITH_EXTENSION=0x60014052fc732600aa0433fae1758a1a
[root@iscsi-client ~]# udevadm info --query=property --name=/dev/sdc | grep ID_WWN_W
ID_WWN_WITH_EXTENSION=0x60014052fc732600aa0433fae1758a1a

通过 UUID 或其他标识符辅助判断

bash 复制代码
[root@iscsi-client ~]# blkid /dev/sdb
[root@iscsi-client ~]# blkid /dev/sdc

4. 多路径状态监控

multipath 命令提供了强大的状态监控能力:

  • -l:读取磁盘缓存文件(bindings),不扫描硬件,执行速度快,但信息可能滞后。
  • -ll:实时扫描所有 SCSI 设备并重新计算路径优先级,推荐用于排错和日常检查。
bash 复制代码
[root@iscsi-client ~]# multipath -ll
mpatha (360014052fc732600aa0433fae1758a1a) dm-3 LIO-ORG,myblock1 size=20G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active    # status=active -> 当前活动路径(主路径)
| `- 3:0:0:0 sdb 8:16 active ready running           # sdb是主路径(当前I/O走这条)
`-+- policy='service-time 0' prio=1 status=enabled   # status=enabled -> 备用可用路径(从路径)
  `- 4:0:0:0 sdc 8:32 active ready running           # sdc是备路径(冗余备用)

默认策略说明service-time 0 属于主备模式(Active-Passive),同一时间仅走一条主路径。主路径故障时自动切换至备用路径,平时备用路径不承载流量。

5. 多路径设备使用与持久化

识别到 /dev/mapper/mpatha 后,即可像普通块设备一样进行分区、格式化与挂载:

bash 复制代码
[root@iscsi-client ~]# parted /dev/mapper/mpatha mklabel gpt
[root@iscsi-client ~]# parted /dev/mapper/mpatha unit MiB mkpart webapp 1 10241
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore

[root@iscsi-client ~]# mkdir /mpatha1
[root@iscsi-client ~]# mkfs.xfs /dev/mapper/mpatha1
[root@iscsi-client ~]# mount /dev/mapper/mpatha1 /mpatha1
[root@iscsi-client ~]# df -h /mpatha1/
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/mpatha1   10G   33M   10G  1% /mpatha1

/etc/fstab 中配置持久化挂载:

bash 复制代码
[root@iscsi-client ~]# vim /etc/fstab
# 最后增加一条
/dev/mapper/mpatha1 /mpatha1 xfs _netdev 0 0

[root@iscsi-client ~]# umount /mpatha1
[root@iscsi-client ~]# mount -a
[root@iscsi-client ~]# df -h /mpatha1/
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/mpatha1   10G   33M   10G  1% /mpatha1

七、 总结

核心价值

iSCSI 通过将存储协议封装于 TCP/IP 之上,打破了传统 SAN 对专用光纤网络的依赖,以极低的成本实现了企业级块存储的网络化共享。其核心价值在于高性价比架构灵活性 以及与现有以太网基础设施的无缝兼容

适用场景

  • 虚拟化环境:为 VMware、KVM 等提供共享数据存储。
  • 数据库集群:为 Oracle RAC、SQL Server 等提供共享块设备。
  • 备份与归档:作为备份目标的网络存储池。
  • 开发测试环境:快速部署与回收存储资源。

最佳实践建议

  1. 网络隔离:务必将 iSCSI 流量与业务 LAN 分离,建议使用独立的物理网卡或 VLAN,并配置 Jumbo Frames(MTU 9000)以减少 CPU 开销。
  2. 安全加固:生产环境应强制启用 CHAP 认证,并结合 ACL 实现最小权限原则;跨公网传输必须启用 IPsec。
  3. 高可用设计:配置多路径 I/O(Multipath)以消除单点故障,提升链路冗余与负载均衡能力。
  4. 监控与告警:定期监控 iSCSI 会话状态、网络延迟及存储 IOPS,建立异常自动恢复机制。
  5. 配置持久化 :服务端务必确保 saveconfig 执行成功,客户端应配置 node.startup = automatic 以实现开机自动重连。
相关推荐
超智算科技2 小时前
超智算领衔协办“NVIDIA创业企业展示·西安站”,全栈AI服务赋能行业生态协同发展
大数据·网络·人工智能·物联网·百度
️学习的小王2 小时前
基于UDP实现简易聊天室(基础版)——Python实现
网络·python·udp
砚凝霜3 小时前
软考网络工程师|第 5 章 路由基础、静态路由、RIP、OSPF、BGP、IS-IS 完整备考笔记
网络·笔记
wsad05323 小时前
CentOS Stream 10 配置静态 IP 完整指南
linux·tcp/ip·centos
星恒讯工业路由器3 小时前
4G(LTE)基础技术解析:从频段划分到网络架构的核心知识点
大数据·网络·信息与通信·工业物联网·4g lte·lte网络架构·无线通信基础
深念Y4 小时前
ZTE_UZ901_NVRAM经验总结
linux·服务器·网络·嵌入式硬件·嵌入式·随身wifi
似水এ᭄往昔4 小时前
【Linux网络编程】--TCP_Socket
linux·网络·tcp/ip
2501_915921434 小时前
抓包鹰抓取系统 App 的流量,从底层读明文
网络协议·计算机网络·网络安全·adb·https·udp
若汝棋茗4 小时前
UDP 调试难复现?先把目标端点、广播和消息记录管起来
网络·网络协议·udp