iSCSI 服务器总结:概念、架构、配置与多路径详解
✅ iSCSI 的基本概念和架构(Target / Initiator / IQN / LUN / ACL)✅ 使用targetcli配置 iSCSI Target(backstore → IQN → LUN → ACL → Portal)✅ 使用iscsiadm配置 Initiator(发现 → 登录 → 格式化 → 挂载 → 持久化)✅ 多路径(Multipath)的配置与高可用测试,实现路径
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 和命令行模式。交互模式以 /> 提示符开始,支持 ls、cd、create、delete 等命令。
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),可以构建高可用的共享存储架构。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)