iSCSI 服务器总结:概念、架构、配置与多路径详解

一、iSCSI 服务介绍

SCSI(Small Computer System Interface,小型计算机系统接口)是一种连接计算机与智能设备(硬盘、光驱、打印机等)的标准接口。

iSCSI(Internet Small Computer System Interface,Internet 小型计算机系统接口),又称为 IP‑SAN,由 IBM 研发。它将 SCSI 接口与以太网技术结合,基于 TCP/IP 协议连接 iSCSI 服务端(Target)和客户端(Initiator),使封装的 SCSI 数据包能在互联网上传输,从而实现网络存储。

通常使用千兆(1Gb)或万兆(10Gb)以太网以提升性能。为达到最佳性能,SAN 流量一般不加密,但可通过 IPsec 保证 WAN 安全。

二、iSCSI 架构

iSCSI 采用 C/S 架构

组件 说明
Initiator(客户端) 软件方式(常用)或硬件 HBA 卡。每个 Initiator 必须有唯一的 IQN
Target(服务端) 提供存储资源,每个 Target 有唯一 IQN。Target 可包含一个或多个 LUN
IQN 全球唯一名称,格式:iqn.YYYY-MM.com.reversed.domain:name_string。例如:iqn.2026-04.cloud.laogao.iscsi-server:disk1
Portal 服务器监听的地址和端口,默认 0.0.0.0:3260
LUN 逻辑单元号,代表 Target 提供的块设备。
ACL 访问控制列表,用 Initiator 的 IQN 限制访问。
TPG Target Portal Group,包含 Portal、LUN、ACL 的完整配置。

工作流程:Discovery(查询 Target 列表)→ Login(验证并登录)→ 使用块设备。

三、配置 iSCSI Target(服务端)

3.1 节点规划

节点名称 节点IP 作用
iscsi-server 10.1.8.10/24 iSCSI Target,增加 2 块 20G SCSI 硬盘
iscsi-client 10.1.8.11/24 iSCSI Initiator

3.2 安装与基础配置

# 安装服务端软件包:targetd(后台服务)和 targetcli(配置工具)
[root@iscsi-server ~]# yum install -y targetd targetcli

# 启用并启动 target 服务(注意:服务名是 target,不是 targetd)
[root@iscsi-server ~]# systemctl enable target --now

# 配置防火墙,放行 iSCSI 服务(端口 3260)
[root@iscsi-server ~]# firewall-cmd --permanent --add-service=iscsi-target
[root@iscsi-server ~]# firewall-cmd --reload

3.3 使用 targetcli 配置 Target

targetcli 提供交互式 shell 和命令行模式。交互模式以 /> 提示符开始,支持 lscdcreatedelete 等命令。

3.3.1 创建 backstore(后备存储)
# 进入交互模式
[root@iscsi-server ~]# targetcli

/> ls
# 输出显示当前配置树,包含 backstores、iscsi、loopback 等目录

# 进入 backstores/block 目录
/> cd /backstores/block
/backstores/block> create myblock1 /dev/sdb
# 创建名为 myblock1 的块设备后备存储,绑定物理磁盘 /dev/sdb
# 输出:Created block storage object myblock1 using /dev/sdb.

支持的 backstore 类型:

  • block:块设备(磁盘、分区、LVM)
  • fileio:文件作为磁盘映像
  • pscsi:物理 SCSI 设备
  • ramdisk:内存盘(重启后数据丢失)
3.3.2 创建 Target IQN
/backstores/block> cd /iscsi
/iscsi> create iqn.2026-04.cloud.laogao.iscsi-server:disk1
# 创建 IQN,自动生成 TPG 1,并默认在所有 IP 上监听 3260 端口
# 输出:Created target iqn.2026-04.cloud.laogao.iscsi-server:disk1.
#       Created TPG 1.
#       Created default portal listening on all IPs (0.0.0.0), port 3260.
3.3.3 绑定 LUN
# 进入该 Target 的 TPG1 的 luns 目录
/iscsi> cd iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/luns

# 将前面创建的 backstore myblock1 绑定为 LUN 0
/iscsi/iqn.20...sk1/tpg1/luns> create /backstores/block/myblock1
# 输出:Created LUN 0.
3.3.4 配置 ACL(访问控制)
# 进入 acls 目录
/iscsi/iqn.20...sk1/tpg1/luns> cd ../acls

# 创建 ACL,允许指定 IQN 的 Initiator 访问
# 注意:此 IQN 需要与客户端 /etc/iscsi/initiatorname.iscsi 文件一致
/iscsi/iqn.20.../tpg1/acls> create iqn.2026-04.cloud.laogao.iscsi-client
# 输出:Created Node ACL for iqn.2026-04.cloud.laogao.iscsi-client
#       Created mapped LUN 0.
3.3.5 配置 Portal(监听地址)
# 进入 portals 目录
/iscsi/iqn.20.../tpg1/acls> cd ../portals

# 删除默认的 0.0.0.0:3260(允许任意 IP 连接)
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
# 输出:Deleted network portal 0.0.0.0:3260

# 创建仅监听 10.1.8.10:3260,提高安全性
/iscsi/iqn.20.../tpg1/portals> create 10.1.8.10 3260
# 输出:Created network portal 10.1.8.10:3260.

# 退出 targetcli,配置会自动保存到 /etc/target/saveconfig.json
/> exit
# 输出:Configuration saved to /etc/target/saveconfig.json

3.4 非交互式配置(命令行模式)

# 创建第二个 backstore
[root@iscsi-server ~]# targetcli /backstores/block create myblock2 /dev/sdc

# 创建第二个 Target
[root@iscsi-server ~]# targetcli /iscsi create iqn.2026-04.cloud.laogao.iscsi-server:disk2

# 绑定 LUN
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/luns \
    create /backstores/block/myblock2

# 创建 ACL
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/acls \
    create iqn.2026-04.cloud.laogao.iscsi-client

# 删除默认 portal
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk2/tpg1/portals \
    delete 0.0.0.0 3260

# 注意:命令行模式必须手动保存配置
[root@iscsi-server ~]# targetcli saveconfig

四、配置 iSCSI Initiator(客户端)

4.1 安装软件包

# 安装 iscsi-initiator-utils(提供 iscsiadm、iscsid 服务)
[root@iscsi-client ~]# yum install -y iscsi-initiator-utils

4.2 设置客户端 IQN

# 编辑 initiator 配置文件,修改 IQN(必须与服务端 ACL 中设置的一致)
[root@iscsi-client ~]# vim /etc/iscsi/initiatorname.iscsi
# 内容示例:
InitiatorName=iqn.2026-04.cloud.laogao.iscsi-client

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

4.3 发现 Target

# 发现指定 Portal 上的 Target 列表
# -m discovery : 发现模式
# -t st        : 发送类型为 SendTargets
# -p 10.1.8.10 : Portal 地址(默认端口 3260)
[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10
# 输出示例:
# 10.1.8.10:3260,1 iqn.2026-04.cloud.laogao.iscsi-server:disk1
# 10.1.8.10:3260,1 iqn.2026-04.cloud.laogao.iscsi-server:disk2

4.4 登录 Target

# 登录到指定 Target
# -m node      : 节点模式
# -T TARGET_IQN: 指定 Target 的 IQN
# -p portal    : Portal 地址
# -l           : 登录(login)
[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -l
# 输出:Login to [iface: default, target: ..., portal: 10.1.8.10,3260] successful.

# 查看已登录的会话
[root@iscsi-client ~]# iscsiadm -m session
# 或查看详细会话信息(级别3)
[root@iscsi-client ~]# iscsiadm -m session -P 3

4.5 发现新磁盘并格式化挂载

# 查看新增的块设备(通常为 /dev/sdb 或 /dev/sdc)
[root@iscsi-client ~]# lsblk
# 输出示例:sdb 8:16 0 20G 0 disk

# 格式化磁盘(假设设备为 /dev/sdb)
[root@iscsi-client ~]# mkfs.xfs /dev/sdb

# 创建挂载点并挂载
[root@iscsi-client ~]# mkdir /sdb
[root@iscsi-client ~]# mount /dev/sdb /sdb

# 测试读写
[root@iscsi-client ~]# echo "test data" > /sdb/test.txt
[root@iscsi-client ~]# cat /sdb/test.txt

4.6 持久化挂载(/etc/fstab)

# 获取设备的 UUID(推荐使用 UUID 而非 /dev/sdX,因为设备名可能变化)
[root@iscsi-client ~]# blkid /dev/sdb
# 输出:/dev/sdb: UUID="81629560-cb56-4c19-814f-7f946d731b02" TYPE="xfs"

# 编辑 /etc/fstab,添加如下内容
[root@iscsi-client ~]# vim /etc/fstab
UUID="81629560-cb56-4c19-814f-7f946d731b02"  /sdb  xfs  defaults,_netdev  0 0
# _netdev 选项确保网络可用后再挂载,避免启动失败

# 确保 iscsi 服务开机自启(默认已启用)
[root@iscsi-client ~]# systemctl enable iscsi

五、断开 iSCSI 目标连接

# 1. 卸载文件系统
[root@iscsi-client ~]# umount /sdb

# 2. 从 /etc/fstab 中删除或注释相关行

# 3. 登出目标(logout)
[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -u

# 4. 删除本地节点记录(防止下次启动自动登录)
[root@iscsi-client ~]# iscsiadm -m node -T iqn.2026-04.cloud.laogao.iscsi-server:disk1 -p 10.1.8.10 -o delete

六、多路径访问(Multipath)

6.1 为什么需要多路径?

  • 高可用性:一条路径故障时,自动切换到另一条路径,业务不中断。
  • 负载均衡:可配置多条路径同时传输,提升带宽。
  • 冗余:双网卡、双交换机、双存储控制器等场景。

6.2 多路径环境规划

节点名称 IP地址 角色
iscsi-server 10.1.8.10/24 (vmnet8) + 10.1.1.10/24 (vmnet1) Target(双网卡)
iscsi-client 10.1.8.11/24 (vmnet8) + 10.1.1.11/24 (vmnet1) Initiator(双网卡)

6.3 服务端多路径配置(Target)

# 在已配置好第一个 Portal 的基础上,再添加第二个 Portal(另一个网卡)
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/portals \
    create 10.1.1.10 3260

# 验证两个 Portal 均已存在
[root@iscsi-server ~]# targetcli /iscsi/iqn.2026-04.cloud.laogao.iscsi-server:disk1/tpg1/portals ls
# 输出应包含 10.1.8.10:3260 和 10.1.1.10:3260

6.4 客户端安装多路径软件

# 安装 device-mapper-multipath
[root@iscsi-client ~]# yum install -y device-mapper-multipath

# 启用多路径(生成 /etc/multipath.conf)
[root@iscsi-client ~]# mpathconf --enable --with_multipath y --with_chkconfig y

# 启动 multipath 服务
[root@iscsi-client ~]# systemctl enable multipathd --now

6.5 发现并登录(双路径)

# 确保客户端的两个网卡均能访问各自的 Portal
# 先设置客户端 IQN(与 ACL 一致),然后发现两个 Portal 上的 Target
[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.8.10
[root@iscsi-client ~]# iscsiadm -m discovery -t st -p 10.1.1.10

# 登录所有已发现的目标(-L all 会登录所有节点)
[root@iscsi-client ~]# iscsiadm -m node -L all

6.6 验证多路径设备

# 使用 scsi_id 或 udevadm 查看两个路径的 WWN 是否相同
[root@iscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
# 输出:360014059a4a72ad3bf84b9bbb2ec0ffb
[root@iscsi-client ~]# /usr/lib/udev/scsi_id -g -u /dev/sdc
# 输出相同(说明是同一个存储设备)

# 查看多路径拓扑
[root@iscsi-client ~]# multipath -ll
# 输出示例:
# mpatha (360014059a4a72ad3bf84b9bbb2ec0ffb) dm-3 LIO-ORG , myblock1
# size=20G features='0' hwhandler='0' wp=rw
# |--+ policy='service-time 0' prio=1 status=active
# |  `- 3:0:0:0 sdb 8:16 active ready running
# `--+ policy='service-time 0' prio=1 status=enabled
#    `- 4:0:0:0 sdc 8:32 active ready running
  • status=active 的路径是当前主路径
  • status=enabled 的路径是备用路径(当前无流量)
  • 默认策略 service-time 0 为活动‑备用模式(Active‑Passive)

6.7 多路径配置文件说明(/etc/multipath.conf)

配置文件包含以下部分:

段落 作用
defaults 全局默认设置(如 path_selector、path_grouping_policy)
blacklist 忽略的设备(如本地磁盘)
blacklist_exceptions 白名单,强制包含某些设备
devices 特定设备类型的配置(根据 vendor/product 匹配)
multipaths 针对特定 WWID 的多路径配置,优先级最高
# 示例:自定义多路径别名并修改分组策略
[root@iscsi-client ~]# vim /etc/multipath.conf

multipaths {
    multipath {
        wwid 360014059a4a72ad3bf84b9bbb2ec0ffb
        alias myiscsi
        path_grouping_policy multibus   # 将所有路径放入一个组,实现负载均衡
    }
}

# 修改后需重启 multipathd 服务
[root@iscsi-client ~]# systemctl restart multipathd

6.8 使用多路径设备

# 多路径设备位于 /dev/mapper/ 下,名称为 mpatha 或自定义别名
[root@iscsi-client ~]# ls -l /dev/mapper/
# 格式化多路径设备(注意:不是格式化 /dev/sdb,而是 /dev/mapper/mpatha)
[root@iscsi-client ~]# mkfs.xfs /dev/mapper/mpatha

# 挂载
[root@iscsi-client ~]# mkdir /mpatha
[root@iscsi-client ~]# mount /dev/mapper/mpatha /mpatha

# 持久化挂载(使用 UUID 或 /dev/mapper/ 设备名)
[root@iscsi-client ~]# blkid /dev/mapper/mpatha
[root@iscsi-client ~]# vim /etc/fstab
UUID="..."  /mpatha  xfs  defaults,_netdev  0 0

6.9 高可用故障切换测试

测试1:断开服务端第二块网卡(备用路径)
# 在服务器上断开 ens36(对应 10.1.1.10)
[root@iscsi-server ~]# nmcli device disconnect ens36

客户端查看多路径状态:

[root@iscsi-client ~]# multipath -ll
# 输出显示:sdc(备用路径)变为 failed faulty running
# 主路径 sdb 仍然 active,业务不中断
测试2:恢复第二块网卡,断开第一块网卡
# 恢复 ens36
[root@iscsi-server ~]# nmcli device connect ens36
# 断开 ens33(对应 10.1.8.10)
[root@iscsi-server ~]# nmcli device disconnect ens33

客户端状态变化:

[root@iscsi-client ~]# multipath -ll
# 输出显示原主路径 sdb 变为 failed,而之前备用的 sdc 自动切换为 active
# 路径恢复后,当前活动的路径不会自动回切(除非配置 failback)

若需路径恢复后自动切回原主路径,可在 multipath.conf 中设置 failback immediate

七、常见故障排查

问题 可能原因 解决方法
Discovery 无输出 防火墙未放行、Portal 地址错误 检查服务器防火墙,netstat -tulnp | grep 3260
Login 失败 客户端 IQN 与服务端 ACL 不匹配 检查 /etc/iscsi/initiatorname.iscsi,重启 iscsid
设备名不稳定 磁盘扫描顺序不同 使用 UUID 或 /dev/disk/by-path/ 挂载
多路径不聚合 未安装 multipath 软件或配置错误 检查 multipath -ll,确认 WWID 相同
重启后设备丢失 iscsi 服务未启用或 _netdev 未设置 systemctl enable iscsi,fstab 添加 _netdev

八、总结

通过本实验,我们掌握了:

  • ✅ iSCSI 的基本概念和架构(Target / Initiator / IQN / LUN / ACL)
  • ✅ 使用 targetcli 配置 iSCSI Target(backstore → IQN → LUN → ACL → Portal)
  • ✅ 使用 iscsiadm 配置 Initiator(发现 → 登录 → 格式化 → 挂载 → 持久化)
  • ✅ 多路径(Multipath)的配置与高可用测试,实现路径冗余和自动切换

iSCSI 是将普通服务器转变为 IP‑SAN 存储设备的低成本方案,广泛用于虚拟化环境(如 KVM、VMware)和私有云。配合多路径和集群文件系统(如 GFS2),可以构建高可用的共享存储架构。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐